]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/Main.qc
Create spawn event entity handler, more work on spawning effects
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / Main.qc
index ecc2000d7ccae32447fa4e78e75460a26e8f1f5a..e480d0ef132cda38ee8ec42c2499fae3369cc94b 100644 (file)
@@ -156,7 +156,8 @@ void CSQC_Init(void)
        CALL_ACCUMULATED_FUNCTION(RegisterGametypes);
        CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
        CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
-       
+       CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels);
+
        WaypointSprite_Load();
 
        // precaches
@@ -210,7 +211,6 @@ void CSQC_Init(void)
 
        hud_skin_path = strzone(strcat("gfx/hud/", autocvar_hud_skin));
        hud_configure_prev = -1;
-       tab_panel = -1;
 
        draw_currentSkin = strzone(strcat("gfx/menu/", cvar_string("menu_skin")));
 }
@@ -696,6 +696,89 @@ void Ent_ReadAccuracy(void)
        }
 }
 
+void Spawn_Draw(void)
+{
+       pointparticles(self.cnt, self.origin, '0 0 2', bound(0, frametime, 0.1));
+}
+
+void Ent_ReadSpawnPoint(float is_new) // entity for spawnpoint
+{
+       float teamnum = ReadByte();
+       self.origin_x = ReadShort();
+       self.origin_y = ReadShort();
+       self.origin_z = ReadShort();
+
+       if(is_new)
+       {
+               switch(teamnum)
+               {
+                       default: self.cnt = particleeffectnum("EF_STARDUST"); break;
+               }
+               
+               //self.colormod = '200 0 0'; //colormapPaletteColor(teamnum - 1, FALSE);
+
+               //setsize(self, PL_MIN, PL_MAX);
+
+               //droptofloor();
+
+               //self.mdl = "models/domination/dom_unclaimed.md3";
+               //precache_model(self.mdl);
+               //setmodel(self, self.mdl);
+               self.drawmask = MASK_NORMAL;
+               self.movetype = MOVETYPE_NOCLIP;
+               self.draw = Spawn_Draw;
+               
+       }
+
+       print(sprintf("Ent_ReadSpawnPoint(is_new = %d); origin = %s, team = %d (%s)\n", is_new, vtos(self.origin), teamnum, "foobar"));
+}
+
+void Ent_ReadSpawnEvent(float is_new)
+{
+       // If entnum is 0, ONLY do the local spawn actions
+       // this way the server can disable the sending of
+       // spawn origin or such to clients if wanted.
+       float entnum = ReadByte();
+       
+       if(entnum)
+       {
+               self.origin_x = ReadShort();
+               self.origin_y = ReadShort();
+               self.origin_z = ReadShort();
+
+               if(is_new)
+               {
+                       float teamnum = GetPlayerColor(entnum - 1);
+                       //if(autocvar_cl_spawn_event_sound)
+                       {
+                               sound(self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTN_NORM);
+                       }
+                       //if(autocvar_cl_spawn_event_particles)
+                       {
+                               switch(teamnum)
+                               {
+                                       default: pointparticles(particleeffectnum("red_cap"), self.origin, '0 0 0', 1); break;
+                               }
+                       }
+               }
+       }
+       
+       // local spawn actions
+       if(is_new && (!entnum || (entnum == player_localentnum)))
+       {
+               zoomin_effect = 1;
+               current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
+
+               if(autocvar_cl_unpress_zoom_on_spawn)
+               {
+                       localcmd("-zoom\n");
+                       button_zoom = FALSE;
+               }
+       }
+       
+       print(sprintf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d (%s), localentnum = %d\n", is_new, vtos(self.origin), entnum, player_localentnum, "foobar"));
+}
+
 // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
 // The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
 void Ent_RadarLink();
@@ -781,7 +864,10 @@ void CSQC_Ent_Update(float bIsNewEntity)
                case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break;
                case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break;  
                case ENT_CLIENT_BUMBLE_RAYGUN: bumble_raygun_read(bIsNewEntity); break;
+               case ENT_CLIENT_SPAWNPOINT: Ent_ReadSpawnPoint(bIsNewEntity); break;
+               case ENT_CLIENT_SPAWNEVENT: Ent_ReadSpawnEvent(bIsNewEntity); break;
                case ENT_CLIENT_NOTIFICATION: Read_Notification(bIsNewEntity); break;
+
                default:
                        //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
                        error(sprintf(_("Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"), self.enttype, num_for_edict(self), self.classname));
@@ -1101,18 +1187,6 @@ void Net_ReadRace()
        }
 }
 
-void Net_ReadSpawn()
-{
-       zoomin_effect = 1;
-       current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
-
-       if(autocvar_cl_unpress_zoom_on_spawn)
-       {
-               localcmd("-zoom\n");
-               button_zoom = FALSE;
-       }
-}
-
 void Net_TeamNagger()
 {
        teamnagger = 1;
@@ -1182,10 +1256,6 @@ float CSQC_Parse_TempEntity()
                        Net_ReadRace();
                        bHandled = true;
                        break;
-               case TE_CSQC_SPAWN:
-                       Net_ReadSpawn();
-                       bHandled = true;
-                       break;
                case TE_CSQC_ZCURVEPARTICLES:
                        Net_ReadZCurveParticles();
                        bHandled = true;