X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fturrets%2Fturret%2Fwalker.qc;h=415d5dfeef16fd315cd5c08d7dc269be2c199bd9;hb=fb5876e8defeb6af31e62002be26bdfa2beb56a7;hp=727da27f945aa4ef67a3a58a44504a4380b2e92a;hpb=a73f79e356dd25b6ea678379e7884ee45cc1977b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/turrets/turret/walker.qc b/qcsrc/common/turrets/turret/walker.qc index 727da27f9..415d5dfee 100644 --- a/qcsrc/common/turrets/turret/walker.qc +++ b/qcsrc/common/turrets/turret/walker.qc @@ -1,26 +1,4 @@ -#ifndef TURRET_WALKER_H -#define TURRET_WALKER_H - -//#define WALKER_FANCYPATHING - -#include "walker_weapon.qh" - -CLASS(WalkerTurret, Turret) -/* spawnflags */ ATTRIB(WalkerTurret, spawnflags, int, TUR_FLAG_PLAYER | TUR_FLAG_MOVE); -/* mins */ ATTRIB(WalkerTurret, mins, vector, '-70 -70 0'); -/* maxs */ ATTRIB(WalkerTurret, maxs, vector, '70 70 95'); -/* modelname */ ATTRIB(WalkerTurret, mdl, string, "walker_body.md3"); -/* model */ ATTRIB_STRZONE(WalkerTurret, model, string, strcat("models/turrets/", this.mdl)); -/* head_model */ ATTRIB_STRZONE(WalkerTurret, head_model, string, strcat("models/turrets/", "walker_head_minigun.md3")); -/* netname */ ATTRIB(WalkerTurret, netname, string, "walker"); -/* fullname */ ATTRIB(WalkerTurret, turret_name, string, _("Walker Turret")); - ATTRIB(WalkerTurret, m_weapon, Weapon, WEP_WALKER); -ENDCLASS(WalkerTurret) -REGISTER_TURRET(WALKER, NEW(WalkerTurret)); - -#endif - -#ifdef IMPLEMENTATION +#include "walker.qh" #ifdef SVQC @@ -63,8 +41,6 @@ const int ANIM_ROAM = 11; .float animflag; .float idletime; -#define WALKER_PATH(this, s, e) pathlib_astar(this, s, e) - bool walker_firecheck(entity this) { if (this.animflag == ANIM_MELEE) @@ -100,7 +76,7 @@ void walker_setnoanim(entity this) void walker_rocket_explode(entity this) { RadiusDamage (this, this.owner, (autocvar_g_turrets_unit_walker_rocket_damage), 0, (autocvar_g_turrets_unit_walker_rocket_radius), this, NULL, (autocvar_g_turrets_unit_walker_rocket_force), DEATH_TURRET_WALK_ROCKET.m_id, NULL); - delete (this); + delete(this); } void walker_rocket_touch(entity this, entity toucher) @@ -261,6 +237,7 @@ void walker_fire_rocket(entity this, vector org) settouch(rocket, walker_rocket_touch); rocket.flags = FL_PROJECTILE; IL_PUSH(g_projectiles, rocket); + IL_PUSH(g_bot_dodge, rocket); rocket.solid = SOLID_BBOX; rocket.max_health = time + 9; rocket.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_HEAT; @@ -318,7 +295,7 @@ void walker_move_path(entity this) if (this.pathgoal.enemy) { - this.pathcurrent = WALKER_PATH(this, this.pathgoal.origin, this.pathgoal.enemy.origin); + this.pathcurrent = pathlib_astar(this, this.pathgoal.origin, this.pathgoal.enemy.origin); this.pathgoal = this.pathgoal.enemy; } } @@ -345,6 +322,30 @@ void walker_move_path(entity this) #endif } +void walker_findtarget(entity this) +{ + entity e = find(NULL, targetname, this.target); + if (!e) + { + LOG_TRACE("Initital waypoint for walker does NOT exist, fix your map!"); + this.target = ""; + } + + if (e.classname != "turret_checkpoint") + LOG_TRACE("Warning: not a turrret path"); + else + { +#ifdef WALKER_FANCYPATHING + this.pathcurrent = pathlib_astar(this, this.origin, e.origin); + this.pathgoal = e; +#else + this.pathcurrent = e; +#endif + } + + // TODO: this doesn't reset target, so tur_defend will be the checkpoint too! +} + spawnfunc(turret_walker) { if(!turret_initialize(this, TUR_WALKER)) delete(this); } METHOD(WalkerTurret, tr_think, void(WalkerTurret thistur, entity it)) @@ -569,8 +570,6 @@ METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it)) { it.ticrate = 0.05; - entity e; - // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn. if(it.move_movetype == MOVETYPE_WALK) { @@ -588,6 +587,8 @@ METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it)) it.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; it.iscreature = true; it.teleportable = TELEPORT_NORMAL; + if(!it.damagedbycontents) + IL_PUSH(g_damagedbycontents, it); it.damagedbycontents = true; it.solid = SOLID_SLIDEBOX; it.takedamage = DAMAGE_AIM; @@ -604,26 +605,7 @@ METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it)) it.turret_firecheckfunc = walker_firecheck; if (it.target != "") - { - e = find(NULL, targetname, it.target); - if (!e) - { - LOG_TRACE("Initital waypoint for walker does NOT exsist, fix your map!"); - it.target = ""; - } - - if (e.classname != "turret_checkpoint") - LOG_TRACE("Warning: not a turrret path"); - else - { -#ifdef WALKER_FANCYPATHING - it.pathcurrent = WALKER_PATH(it, it.origin, e.origin); - it.pathgoal = e; -#else - it.pathcurrent = e; -#endif - } - } + InitializeEntity(it, walker_findtarget, INITPRIO_FINDTARGET); } #endif // SVQC @@ -659,4 +641,3 @@ void walker_draw(entity this) } #endif // CSQC -#endif