]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Dynamic precache of turrets (to save memory)
authorJakob MG <jakob_mg@hotmail.com>
Wed, 22 Jun 2011 13:11:15 +0000 (15:11 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Wed, 22 Jun 2011 13:11:15 +0000 (15:11 +0200)
qcsrc/client/tturrets.qc
qcsrc/server/tturrets/include/turrets_early.qh
qcsrc/server/tturrets/system/system_misc.qc

index b83db07c77914baccd455a7144ef3012e6c1a2ed..fed48da9b7cec5b794c29f367c7711cd4259a229 100644 (file)
@@ -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();
     }
     
index 3fd62cff35ea4d884321c8ae82e3778ec9858976..a8aed4553ad97a4257e03eda18dc23e0936ffe73 100644 (file)
@@ -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;
index 7b2875d7dc980d3dbc1b46163d3abcd278d76b6e..fc17121ebef02395632c084fa72cdb593ddf82ff 100644 (file)
@@ -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");