From: terencehill Date: Mon, 19 Sep 2016 15:05:01 +0000 (+0200) Subject: Make use of .clientcamera showing the exploding generator, this way vis is checked... X-Git-Tag: xonotic-v0.8.2~487^2~4 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=8b946ef1b9a368aec3fa5c512b87f619bfa699c5;p=xonotic%2Fxonotic-data.pk3dir.git Make use of .clientcamera showing the exploding generator, this way vis is checked correctly --- diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc b/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc index a30dd7d07..afbd31842 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc @@ -1,7 +1,31 @@ #include "onslaught.qh" +#ifndef MENUQC +REGISTER_NET_LINKED(ENT_ONSCAMERA) +#endif + #ifdef CSQC +entity generator_camera; +NET_HANDLE(ENT_ONSCAMERA, bool isnew) +{ + this.origin_x = ReadCoord(); + this.origin_y = ReadCoord(); + this.origin_z = ReadCoord(); + setorigin(this, this.origin); + + this.angles_x = ReadAngle(); + this.angles_y = ReadAngle(); + this.angles_z = ReadAngle(); + + this.drawmask = MASK_NORMAL; + setmodel(this, MDL_Null); // give it a size for clientcamera + setsize(this, '-1 -1 -1', '1 1 1'); + + generator_camera = this; + return true; +} + REGISTER_MUTATOR(cl_ons, true); float ons_roundlost; @@ -35,7 +59,7 @@ MUTATOR_HOOKFUNCTION(cl_ons, CustomizeEventchase) { if(ons_roundlost) { - M_ARGV(0, vector) = generator_origin; + M_ARGV(0, vector) = generator_camera.origin; M_ARGV(1, vector) = autocvar_cl_eventchase_generator_viewoffset; M_ARGV(0, float) = autocvar_cl_eventchase_generator_distance; return true; diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc b/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc index d6606a370..8426b202d 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/sv_onslaught.qc @@ -28,11 +28,27 @@ float autocvar_g_onslaught_spawn_choose; float autocvar_g_onslaught_click_radius; void FixSize(entity e); +entity cam; // ======================= // CaptureShield Functions // ======================= +bool clientcamera_send(entity this, entity to, int sf) +{ + WriteHeader(MSG_ENTITY, ENT_ONSCAMERA); + + WriteCoord(MSG_ENTITY, this.origin_x); + WriteCoord(MSG_ENTITY, this.origin_y); + WriteCoord(MSG_ENTITY, this.origin_z); + + WriteAngle(MSG_ENTITY, this.angles_x); + WriteAngle(MSG_ENTITY, this.angles_y); + WriteAngle(MSG_ENTITY, this.angles_z); + + return true; +} + bool ons_CaptureShield_Customize(entity this, entity client) { entity e = WaypointSprite_getviewentity(client); @@ -817,6 +833,24 @@ void ons_Generator_UpdateSprite(entity e) } } +void ons_camSetup(entity this) +{ + if(cam) return; + + cam = new(objective_camera); + cam.origin = this.origin; + setorigin(cam, cam.origin); + cam.angles = this.angles; + Net_LinkEntity(cam, false, 0, clientcamera_send); + + FOREACH_CLIENT(true, it.clientcamera = cam;); + + WriteByte(MSG_ALL, SVC_SETVIEWANGLES); + WriteAngle(MSG_ALL, cam.angles_x); + WriteAngle(MSG_ALL, cam.angles_y); + WriteAngle(MSG_ALL, cam.angles_z); +} + void ons_GeneratorDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if(damage <= 0) { return; } @@ -877,6 +911,8 @@ void ons_GeneratorDamage(entity this, entity inflictor, entity attacker, float d //WaypointSprite_Kill(this.sprite); // can't do this yet, code too poor onslaught_updatelinks(); + + ons_camSetup(this); } // Throw some flaming gibs on damage, more damage = more chance for gib