From 9845f7811ffe4aa6015213c9856b873b5c36b90f Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Wed, 22 Jun 2011 15:11:15 +0200 Subject: [PATCH] Dynamic precache of turrets (to save memory) --- qcsrc/client/tturrets.qc | 104 ++++++++++++++---- .../server/tturrets/include/turrets_early.qh | 27 ++--- qcsrc/server/tturrets/system/system_misc.qc | 11 -- 3 files changed, 96 insertions(+), 46 deletions(-) diff --git a/qcsrc/client/tturrets.qc b/qcsrc/client/tturrets.qc index b83db07c7..fed48da9b 100644 --- a/qcsrc/client/tturrets.qc +++ b/qcsrc/client/tturrets.qc @@ -4,30 +4,89 @@ string tid2info_name; vector tid2info_min; vector tid2info_max; +void turret_tid2info(float _tid); +void turret_precache(float _tid); +float turret_is_precache[TID_LAST]; + void turrets_precache() { - precache_model ("models/turrets/ewheel-base2.md3"); - precache_model ("models/turrets/ewheel-gun1.md3"); - precache_model ("models/turrets/base.md3"); - precache_model ("models/turrets/flac.md3"); - precache_model ("models/turrets/reactor.md3"); - precache_model ("models/turrets/hellion.md3"); - precache_model ("models/turrets/hk.md3"); - precache_model ("models/turrets/machinegun.md3"); - precache_model ("models/turrets/mlrs.md3"); - precache_model ("models/turrets/phaser.md3"); - precache_model ("models/turrets/phaser_beam.md3"); - precache_model ("models/turrets/plasma.md3"); - precache_model ("models/turrets/plasmad.md3"); - precache_model ("models/turrets/tesla_head.md3"); - precache_model ("models/turrets/tesla_base.md3"); - precache_model ("models/turrets/walker_head_minigun.md3"); - precache_model ("models/turrets/walker_body.md3"); - precache_model ("models/turrets/rocket.md3"); - - precache_sound ("turrets/phaser.wav"); - precache_sound ("weapons/rocket_impact.wav"); - precache_sound ("weapons/uzi_fire.wav"); + turret_precache(TID_COMMON); +} + +void turret_precache(float _tid) +{ + if (!turret_is_precache[TID_COMMON]) + { + dprint("turret_precache TID_COMMON\n"); + precache_sound ("weapons/rocket_impact.wav"); + precache_model ("models/turrets/base-gib1.md3"); + precache_model ("models/turrets/base-gib2.md3"); + precache_model ("models/turrets/base-gib3.md3"); + precache_model ("models/turrets/base-gib4.md3"); + precache_model ("models/turrets/head-gib1.md3"); + precache_model ("models/turrets/head-gib2.md3"); + precache_model ("models/turrets/head-gib3.md3"); + precache_model ("models/turrets/head-gib4.md3"); + precache_model ("models/turrets/terrainbase.md3"); + precache_model ("models/turrets/base.md3"); + precache_model ("models/turrets/rocket.md3"); + } + turret_tid2info(_tid); + if(turret_is_precache[_tid]) + { + dprint("turret_precache: ", tid2info_name, "allready precache, skipping.\n"); + return; + } + else + dprint("turret_precache: ", tid2info_name, " precaching.\n"); + + switch(_tid) + { + case TID_EWHEEL: + precache_model ("models/turrets/ewheel-base2.md3"); + precache_model ("models/turrets/ewheel-gun1.md3"); + break; + case TID_FLAC: + precache_model ("models/turrets/flac.md3"); + break; + case TID_FUSION: + precache_model ("models/turrets/reactor.md3"); + break; + case TID_HELLION: + precache_model ("models/turrets/hellion.md3"); + break; + case TID_HK: + precache_model ("models/turrets/hk.md3"); + break; + case TID_MACHINEGUN: + precache_model ("models/turrets/machinegun.md3"); + precache_sound ("weapons/uzi_fire.wav"); + break; + case TID_MLRS: + precache_model ("models/turrets/mlrs.md3"); + break; + case TID_PHASER: + precache_model ("models/turrets/phaser.md3"); + precache_model ("models/turrets/phaser_beam.md3"); + precache_sound ("turrets/phaser.wav"); + break; + case TID_PLASMA: + precache_model ("models/turrets/plasma.md3"); + break; + case TID_PLASMA_DUAL: + precache_model ("models/turrets/plasmad.md3"); + break; + case TID_TESLA: + precache_model ("models/turrets/tesla_head.md3"); + precache_model ("models/turrets/tesla_base.md3"); + break; + case TID_WALKER: + precache_model ("models/turrets/walker_head_minigun.md3"); + precache_model ("models/turrets/walker_body.md3"); + precache_sound ("weapons/uzi_fire.wav"); + break; + } + turret_is_precache[_tid] = TRUE; } void turret_tid2info(float _tid) @@ -375,6 +434,7 @@ void ent_turret() self.angles_x = ReadAngle(); self.angles_y = ReadAngle(); + turret_precache(self.turret_type); turret_construct(); } diff --git a/qcsrc/server/tturrets/include/turrets_early.qh b/qcsrc/server/tturrets/include/turrets_early.qh index 3fd62cff3..a8aed4553 100644 --- a/qcsrc/server/tturrets/include/turrets_early.qh +++ b/qcsrc/server/tturrets/include/turrets_early.qh @@ -455,19 +455,20 @@ void turrets_precash(); // common .float turret_type; -float TID_EWHEEL = 1; -float TID_FLAC = 2; -float TID_FUSION = 3; -float TID_HELLION = 4; -float TID_HK = 5; -float TID_MACHINEGUN = 6; -float TID_MLRS = 7; -float TID_PHASER = 8; -float TID_PLASMA = 9; -float TID_PLASMA_DUAL = 10; -float TID_TESLA = 11; -float TID_WALKER = 12; -float TID_LAST = 12; +float TID_COMMON = 1; +float TID_EWHEEL = 2; +float TID_FLAC = 3; +float TID_FUSION = 4; +float TID_HELLION = 5; +float TID_HK = 6; +float TID_MACHINEGUN = 7; +float TID_MLRS = 8; +float TID_PHASER = 9; +float TID_PLASMA = 10; +float TID_PLASMA_DUAL = 11; +float TID_TESLA = 12; +float TID_WALKER = 13; +float TID_LAST = 13; float TNSF_UPDATE = 2; float TNSF_STATUS = 4; diff --git a/qcsrc/server/tturrets/system/system_misc.qc b/qcsrc/server/tturrets/system/system_misc.qc index 7b2875d7d..fc17121eb 100644 --- a/qcsrc/server/tturrets/system/system_misc.qc +++ b/qcsrc/server/tturrets/system/system_misc.qc @@ -221,17 +221,6 @@ void turrets_precache_debug_models() void turrets_precash() { - precache_model ("models/turrets/base-gib1.md3"); - precache_model ("models/turrets/base-gib2.md3"); - precache_model ("models/turrets/base-gib3.md3"); - precache_model ("models/turrets/base-gib4.md3"); - - precache_model ("models/turrets/head-gib1.md3"); - precache_model ("models/turrets/head-gib2.md3"); - precache_model ("models/turrets/head-gib3.md3"); - precache_model ("models/turrets/head-gib4.md3"); - precache_model ("models/turrets/terrainbase.md3"); - //precache_model ("models/turrets/base.md3"); //precache_model ("models/turrets/flac.md3"); //precache_model ("models/turrets/pd_proj.md3"); -- 2.39.2