From: Rudolf Polzer Date: Fri, 17 Jun 2011 06:50:04 +0000 (+0200) Subject: new spawnflag for warpzones: 2 (watch over origin, update entity if moved) X-Git-Tag: xonotic-v0.5.0~199^2~14^2~7 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ea73bfe85e356df9b6c705882a5077f48ab03de0;p=xonotic%2Fxonotic-data.pk3dir.git new spawnflag for warpzones: 2 (watch over origin, update entity if moved) --- diff --git a/qcsrc/warpzonelib/server.qc b/qcsrc/warpzonelib/server.qc index 921b2ed58..3892b329d 100644 --- a/qcsrc/warpzonelib/server.qc +++ b/qcsrc/warpzonelib/server.qc @@ -1,3 +1,10 @@ +// for think function +.vector warpzone_save_origin; +.vector warpzone_save_angles; +.vector warpzone_save_eorigin; +.vector warpzone_save_eangles; + +// for all entities .vector warpzone_oldorigin, warpzone_oldvelocity, warpzone_oldangles; .float warpzone_teleport_time; .entity warpzone_teleport_zone; @@ -366,6 +373,22 @@ void WarpZonePosition_InitStep_FindTarget() self.enemy.aiment = self; } +void WarpZoneCamera_Think(void) +{ + if(self.warpzone_save_origin != self.origin + || self.warpzone_save_angles != self.angles + || self.warpzone_save_eorigin != self.enemy.origin + || self.warpzone_save_eangles != self.enemy.angles) + { + WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles); + self.warpzone_save_origin = self.origin; + self.warpzone_save_angles = self.angles; + self.warpzone_save_eorigin = self.enemy.origin; + self.warpzone_save_eangles = self.enemy.angles; + } + self.nextthink = time; +} + void WarpZoneCamera_InitStep_FindTarget() { entity e; @@ -387,6 +410,13 @@ void WarpZoneCamera_InitStep_FindTarget() warpzone_cameras_exist = 1; WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles); self.SendFlags = 0xFFFFFF; + if(self.spawnflags & 2) + { + self.think = WarpZoneCamera_Think; + self.nextthink = time; + } + else + self.nextthink = 0; } void WarpZone_InitStep_UpdateTransform() @@ -511,6 +541,7 @@ void WarpZone_InitStep_FindTarget() } } +void WarpZone_Think(); void WarpZone_InitStep_FinalizeTransform() { if(!self.enemy || self.enemy.enemy != self) @@ -523,6 +554,13 @@ void WarpZone_InitStep_FinalizeTransform() WarpZone_SetUp(self, self.warpzone_origin, self.warpzone_angles, self.enemy.warpzone_origin, self.enemy.warpzone_angles); self.touch = WarpZone_Touch; self.SendFlags = 0xFFFFFF; + if(self.spawnflags & 2) + { + self.think = WarpZone_Think; + self.nextthink = time; + } + else + self.nextthink = 0; } float warpzone_initialized; @@ -613,6 +651,31 @@ void WarpZones_Reconnect() self = e; } +void WarpZone_Think() +{ + if(self.warpzone_save_origin != self.origin + || self.warpzone_save_angles != self.angles + || self.warpzone_save_eorigin != self.enemy.origin + || self.warpzone_save_eangles != self.enemy.angles) + { + entity oldself; + oldself = self; + WarpZone_InitStep_UpdateTransform(); + self = self.enemy; + WarpZone_InitStep_UpdateTransform(); + self = oldself; + WarpZone_InitStep_FinalizeTransform(); + self = self.enemy; + WarpZone_InitStep_FinalizeTransform(); + self = oldself; + self.warpzone_save_origin = self.origin; + self.warpzone_save_angles = self.angles; + self.warpzone_save_eorigin = self.enemy.origin; + self.warpzone_save_eangles = self.enemy.angles; + } + self.nextthink = time; +} + void WarpZone_StartFrame() { entity e;