From 1d8de6296a270ddbbade5cd53046dc2169a3a6e4 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Wed, 29 Dec 2010 20:15:57 +0100 Subject: [PATCH] assault: show health bars with the ATTACK/DEFEND sprites --- qcsrc/server/assault.qc | 13 +++++++++++++ qcsrc/server/func_breakable.qc | 10 +++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/qcsrc/server/assault.qc b/qcsrc/server/assault.qc index 0d7da7357..05b2cc750 100644 --- a/qcsrc/server/assault.qc +++ b/qcsrc/server/assault.qc @@ -71,7 +71,11 @@ void assault_objective_decrease_use() { } if(other.assault_sprite) + { WaypointSprite_Disown(other.assault_sprite, waypointsprite_deadlifetime); + if(other.classname == "func_assault_destructible") + other.sprite = world; + } else return; // already activated! cannot activate again! @@ -148,7 +152,11 @@ void target_objective_decrease_activate() for(ent = world; (ent = find(ent, target, self.targetname)); ) { if(ent.assault_sprite != world) + { WaypointSprite_Disown(ent.assault_sprite, waypointsprite_deadlifetime); + if(ent.classname == "func_assault_destructible") + ent.sprite = world; + } spr = WaypointSprite_SpawnFixed("", 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite); spr.assault_decreaser = self; @@ -156,7 +164,12 @@ void target_objective_decrease_activate() spr.classname = "sprite_waypoint"; WaypointSprite_UpdateRule(spr, assault_attacker_team, SPRITERULE_TEAMPLAY); if(ent.classname == "func_assault_destructible") + { WaypointSprite_UpdateSprites(spr, "as-defend", "as-destroy", "as-destroy"); + WaypointSprite_UpdateMaxHealth(spr, ent.max_health); + WaypointSprite_UpdateHealth(spr, ent.health); + ent.sprite = spr; + } else WaypointSprite_UpdateSprites(spr, "as-defend", "as-push", "as-push"); WaypointSprite_UpdateTeamRadar(spr, RADARICON_OBJECTIVE, '1 0.5 0'); diff --git a/qcsrc/server/func_breakable.qc b/qcsrc/server/func_breakable.qc index 44605ddee..3af433ace 100644 --- a/qcsrc/server/func_breakable.qc +++ b/qcsrc/server/func_breakable.qc @@ -122,6 +122,11 @@ void func_breakable_behave_destroyed() void func_breakable_behave_restore() { self.health = self.max_health; + if(self.sprite) + { + WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health); + WaypointSprite_UpdateHealth(self.sprite, self.health); + } self.takedamage = DAMAGE_AIM; self.event_damage = func_breakable_damage; self.state = 0; @@ -180,9 +185,12 @@ void func_breakable_damage(entity inflictor, entity attacker, float damage, floa if(self.team) if(attacker.team == self.team) return; + self.health = self.health - damage; if(self.sprite) + { WaypointSprite_Ping(self.sprite); - self.health = self.health - damage; + WaypointSprite_UpdateHealth(self.sprite, self.health); + } func_breakable_colormod(); if(self.health <= 0) -- 2.39.2