Przeglądaj źródła

missing files with fixes for shower of bullets

Juan Linietsky 11 lat temu
rodzic
commit
fc676fa6f8

+ 1 - 1
drivers/theoraplayer/src/TheoraVideoClip.cpp

@@ -75,7 +75,7 @@ TheoraVideoClip::~TheoraVideoClip()
 	if (mAudioInterface)
 	if (mAudioInterface)
 	{
 	{
 		mAudioMutex->lock(); // ensure a thread isn't using this mutex
 		mAudioMutex->lock(); // ensure a thread isn't using this mutex
-		memdelete(mAudioInterface); // notify audio interface it's time to call it a day
+		delete mAudioInterface; // notify audio interface it's time to call it a day
 		mAudioMutex ->unlock();
 		mAudioMutex ->unlock();
 		delete mAudioMutex;
 		delete mAudioMutex;
 	}
 	}

+ 14 - 4
drivers/theoraplayer/video_stream_theoraplayer.cpp

@@ -240,6 +240,11 @@ public:
 		owner->setTimer(this);
 		owner->setTimer(this);
 	};
 	};
 
 
+	void stop() {
+
+		stream->stop();
+	};
+
 	void update(float time_increase)
 	void update(float time_increase)
 	{
 	{
 		mTime = (float)(stream->get_total_wrote() / channels) / freq;
 		mTime = (float)(stream->get_total_wrote() / channels) / freq;
@@ -257,7 +262,7 @@ public:
 	TheoraAudioInterface* createInstance(TheoraVideoClip* owner, int nChannels, int freq) {
 	TheoraAudioInterface* createInstance(TheoraVideoClip* owner, int nChannels, int freq) {
 
 
 		printf("************** creating audio output\n");
 		printf("************** creating audio output\n");
-		TheoraAudioInterface* ta = memnew(TPAudioGodot(owner, nChannels, freq));
+		TheoraAudioInterface* ta = new TPAudioGodot(owner, nChannels, freq);
 		return ta;
 		return ta;
 	};
 	};
 };
 };
@@ -267,13 +272,16 @@ static TPAudioGodotFactory* audio_factory = NULL;
 void VideoStreamTheoraplayer::stop() {
 void VideoStreamTheoraplayer::stop() {
 
 
 	playing = false;
 	playing = false;
-	if (clip)
+	if (clip) {
+		clip->stop();
 		clip->seek(0);
 		clip->seek(0);
+	};
 };
 };
 
 
 void VideoStreamTheoraplayer::play() {
 void VideoStreamTheoraplayer::play() {
 
 
 	playing = true;
 	playing = true;
+	started = true;
 };
 };
 
 
 bool VideoStreamTheoraplayer::is_playing() const {
 bool VideoStreamTheoraplayer::is_playing() const {
@@ -452,12 +460,14 @@ void VideoStreamTheoraplayer::set_file(const String& p_file) {
 
 
 VideoStreamTheoraplayer::~VideoStreamTheoraplayer() {
 VideoStreamTheoraplayer::~VideoStreamTheoraplayer() {
 
 
-	//if (mgr) {
+	stop();
+	//if (mgr) { // this should be a singleton or static or something
 	//	memdelete(mgr);
 	//	memdelete(mgr);
 	//};
 	//};
 	//mgr = NULL;
 	//mgr = NULL;
 	if (clip) {
 	if (clip) {
-		delete clip; // created by video manager with new
+		mgr->destroyVideoClip(clip);
+		clip = NULL;
 	};
 	};
 };
 };
 
 

+ 2 - 2
scene/2d/area_2d.cpp

@@ -162,7 +162,7 @@ void Area2D::_body_inout(int p_status,const RID& p_body, int p_instance, int p_b
 			E->get().shapes.insert(ShapePair(p_body_shape,p_area_shape));
 			E->get().shapes.insert(ShapePair(p_body_shape,p_area_shape));
 
 
 
 
-		if (E->get().in_tree) {
+		if (!node || E->get().in_tree) {
 			emit_signal(SceneStringNames::get_singleton()->body_enter_shape,objid,node,p_body_shape,p_area_shape);
 			emit_signal(SceneStringNames::get_singleton()->body_enter_shape,objid,node,p_body_shape,p_area_shape);
 		}
 		}
 
 
@@ -188,7 +188,7 @@ void Area2D::_body_inout(int p_status,const RID& p_body, int p_instance, int p_b
 			eraseit=true;
 			eraseit=true;
 
 
 		}
 		}
-		if (node && E->get().in_tree) {
+		if (!node || E->get().in_tree) {
 			emit_signal(SceneStringNames::get_singleton()->body_exit_shape,objid,obj,p_body_shape,p_area_shape);
 			emit_signal(SceneStringNames::get_singleton()->body_exit_shape,objid,obj,p_body_shape,p_area_shape);
 		}
 		}
 
 

+ 1 - 1
servers/physics_2d/space_2d_sw.cpp

@@ -437,6 +437,7 @@ Physics2DDirectSpaceStateSW::Physics2DDirectSpaceStateSW() {
 
 
 void* Space2DSW::_broadphase_pair(CollisionObject2DSW *A,int p_subindex_A,CollisionObject2DSW *B,int p_subindex_B,void *p_self) {
 void* Space2DSW::_broadphase_pair(CollisionObject2DSW *A,int p_subindex_A,CollisionObject2DSW *B,int p_subindex_B,void *p_self) {
 
 
+
 	CollisionObject2DSW::Type type_A=A->get_type();
 	CollisionObject2DSW::Type type_A=A->get_type();
 	CollisionObject2DSW::Type type_B=B->get_type();
 	CollisionObject2DSW::Type type_B=B->get_type();
 	if (type_A>type_B) {
 	if (type_A>type_B) {
@@ -451,7 +452,6 @@ void* Space2DSW::_broadphase_pair(CollisionObject2DSW *A,int p_subindex_A,Collis
 
 
 	if (type_A==CollisionObject2DSW::TYPE_AREA) {
 	if (type_A==CollisionObject2DSW::TYPE_AREA) {
 
 
-
 		ERR_FAIL_COND_V(type_B!=CollisionObject2DSW::TYPE_BODY,NULL);
 		ERR_FAIL_COND_V(type_B!=CollisionObject2DSW::TYPE_BODY,NULL);
 		Area2DSW *area=static_cast<Area2DSW*>(A);
 		Area2DSW *area=static_cast<Area2DSW*>(A);
 		Body2DSW *body=static_cast<Body2DSW*>(B);
 		Body2DSW *body=static_cast<Body2DSW*>(B);