From: Mario Date: Mon, 3 Jul 2017 15:33:52 +0000 (+1000) Subject: Give hagar a "proper" animation fix X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=dc4bb4f1601ed8d7ffa07a4407f8e841e383162a;p=xonotic%2Fxonotic-data.pk3dir.git Give hagar a "proper" animation fix --- diff --git a/qcsrc/common/weapons/all.qc b/qcsrc/common/weapons/all.qc index 3bf72b0b6..2dede544f 100644 --- a/qcsrc/common/weapons/all.qc +++ b/qcsrc/common/weapons/all.qc @@ -586,8 +586,6 @@ NET_HANDLE(wframe, bool isNew) } a.z *= wrate; - //LOG_INFO(vtos(a), " ", ftos(fr), " ", ftos(wrate), "\n"); - if(fr == WFRAME_IDLE) // we don't need to enforce idle animation wepent.animstate_looping = false; else diff --git a/qcsrc/common/weapons/weapon/hagar.qc b/qcsrc/common/weapons/weapon/hagar.qc index f7b289278..9ee06eaa0 100644 --- a/qcsrc/common/weapons/weapon/hagar.qc +++ b/qcsrc/common/weapons/weapon/hagar.qc @@ -443,14 +443,7 @@ void W_Hagar_Attack_Auto(Weapon thiswep, entity actor, .entity weaponentity, int int slot = weaponslot(weaponentity); ATTACK_FINISHED(actor, slot) = time + WEP_CVAR_PRI(hagar, refire) * W_WeaponRateFactor(actor); - int theframe = WFRAME_FIRE1; - entity this = actor.(weaponentity); - if(this) - { - if(this.wframe == WFRAME_FIRE1) - theframe = WFRAME_DONTCHANGE; - } - weapon_thinkf(actor, weaponentity, theframe, WEP_CVAR_PRI(hagar, refire), W_Hagar_Attack_Auto); + weapon_thinkf_ex(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(hagar, refire), W_Hagar_Attack_Auto, true); } METHOD(Hagar, wr_aim, void(entity thiswep, entity actor, .entity weaponentity)) diff --git a/qcsrc/server/weapons/weaponsystem.qc b/qcsrc/server/weapons/weaponsystem.qc index a0cc62b2a..85f02c472 100644 --- a/qcsrc/server/weapons/weaponsystem.qc +++ b/qcsrc/server/weapons/weaponsystem.qc @@ -337,8 +337,8 @@ void wframe_send(entity actor, entity weaponentity, int a, bool restartanim); * @param t defer thinking until time + t * @param func next think function */ -void weapon_thinkf(entity actor, .entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor, - .entity weaponentity, int fire) func) +void weapon_thinkf_ex(entity actor, .entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor, + .entity weaponentity, int fire) func, bool forcenorestart) { entity this = actor.(weaponentity); if (this == NULL) return; @@ -353,10 +353,15 @@ void weapon_thinkf(entity actor, .entity weaponentity, WFRAME fr, float t, void( restartanim = fr != WFRAME_IDLE; } + if(forcenorestart) + restartanim = false; + vector of = v_forward; vector or = v_right; vector ou = v_up; + this.wframe = fr; + v_forward = of; v_right = or; v_up = ou; @@ -405,6 +410,12 @@ void weapon_thinkf(entity actor, .entity weaponentity, WFRAME fr, float t, void( actor.anim_upper_action = 0; } } +void weapon_thinkf(entity actor, .entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor, + .entity weaponentity, int fire) func) +{ + weapon_thinkf_ex(actor, weaponentity, fr, t, func, false); +} + bool forbidWeaponUse(entity player) { diff --git a/qcsrc/server/weapons/weaponsystem.qh b/qcsrc/server/weapons/weaponsystem.qh index 2fb0f9956..f2e99720e 100644 --- a/qcsrc/server/weapons/weaponsystem.qh +++ b/qcsrc/server/weapons/weaponsystem.qh @@ -32,4 +32,6 @@ bool weapon_prepareattack_check(Weapon thiswep, entity actor, .entity weaponenti void weapon_prepareattack_do(entity actor, .entity weaponentity, float secondary, float attacktime); +void weapon_thinkf_ex(entity actor, .entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor, .entity weaponentity, int fire) func, bool forcenorestart); + void weapon_thinkf(entity actor, .entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor, .entity weaponentity, int fire) func);