UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
e_event_particleappear.cpp
Go to the documentation of this file.
1 
5 /*
6 Copyright (C) 2002-2020 UFO: Alien Invasion.
7 
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 
17 See the GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 
23 */
24 
25 #include "../../../../client.h"
26 #include "../../../cl_localentity.h"
27 #include "../../../cl_particle.h"
28 #include "e_event_particleappear.h"
29 
30 int CL_ParticleAppearTime (const struct eventRegister_s* self, dbuffer* msg, eventTiming_t* eventTiming)
31 {
32  if (eventTiming->parsedShot) {
33  if (eventTiming->parsedDeath) { /* drop items after death (caused by impact) */
34  return eventTiming->impactTime + 1400;
35  } else if (eventTiming->impactTime > cl.time) { /* item thrown on the ground */
36  return eventTiming->impactTime + 75;
37  }
38  }
39 
40  return eventTiming->nextTime;
41 }
42 
50 void CL_ParticleAppear (const eventRegister_t* self, dbuffer* msg)
51 {
52  char particle[MAX_VAR];
53  int entnum, levelflags;
54  vec3_t origin;
55 
56  /* read data */
57  NET_ReadFormat(msg, self->formatString, &entnum, &levelflags, origin, particle, sizeof(particle));
58 
59  le_t* le = LE_Get(entnum);
60  if (!le)
61  LE_NotFoundError(entnum);
62 
63  /* particles don't have a model to add to the scene - we mark them as invisible and
64  * only render the particle */
65  LE_SetInvisible(le);
66  le->levelflags = levelflags;
67  le->particleID = Mem_PoolStrDup(particle, cl_genericPool, 0);
68  le->ptl = CL_ParticleSpawn(le->particleID, le->levelflags, origin);
69  if (!le->ptl)
70  Com_Printf("Could not spawn particle: '%s'\n", le->particleID);
71 }
int CL_ParticleAppearTime(const struct eventRegister_s *self, dbuffer *msg, eventTiming_t *eventTiming)
void CL_ParticleAppear(const eventRegister_t *self, dbuffer *msg)
Let a particle appear for the client.
ptl_t * CL_ParticleSpawn(const char *name, int levelFlags, const vec3_t s, const vec3_t v, const vec3_t a)
Spawn a new particle to the map.
voidpf uLong int origin
Definition: ioapi.h:45
void NET_ReadFormat(dbuffer *buf, const char *format,...)
The user-friendly version of NET_ReadFormat that reads variable arguments from a buffer according to ...
Definition: netpack.cpp:533
void Com_Printf(const char *const fmt,...)
Definition: common.cpp:386
bool parsedShot
Definition: e_main.h:36
memPool_t * cl_genericPool
Definition: cl_main.cpp:86
CL_ParseEvent timers and vars.
Definition: e_main.h:30
#define MAX_VAR
Definition: shared.h:36
le_t * LE_Get(int entnum)
Searches all local entities for the one with the searched entnum.
clientBattleScape_t cl
ptl_t * ptl
Struct that defines one particular event with all its callbacks and data.
Definition: e_main.h:42
#define LE_SetInvisible(le)
a local entity
bool parsedDeath
Definition: e_main.h:35
int impactTime
Definition: e_main.h:33
vec_t vec3_t[3]
Definition: ufotypes.h:39
const char * particleID
int levelflags
#define Mem_PoolStrDup(in, pool, tagNum)
Definition: mem.h:50
int nextTime
Definition: e_main.h:31
#define LE_NotFoundError(entnum)