1 /**
2 * @file
3 */
4
5 /*
6 Copyright (C) 2002-2013 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 "e_event_entappear.h"
28 #include "../../../../../common/grid.h"
29
CL_EntAppearTime(const struct eventRegister_s * self,dbuffer * msg,eventTiming_t * eventTiming)30 int CL_EntAppearTime (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 + 400;
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
43 /**
44 * @brief Let an entity appear - like an item on the ground that just got visible
45 * @sa EV_ENT_APPEAR
46 * @sa CL_EntPerish
47 * @sa CL_AddEdict
48 */
CL_EntAppear(const eventRegister_t * self,dbuffer * msg)49 void CL_EntAppear (const eventRegister_t* self, dbuffer* msg)
50 {
51 int entnum;
52 entity_type_t type;
53 pos3_t pos;
54
55 NET_ReadFormat(msg, self->formatString, &entnum, &type, &pos);
56
57 /* check if the ent is already visible */
58 le_t* le = LE_Get(entnum);
59 if (!le) {
60 le = LE_Add(entnum);
61 } else {
62 Com_DPrintf(DEBUG_CLIENT, "CL_EntAppear: Entity appearing already visible... overwriting the old one\n");
63 le->inuse = true;
64 }
65
66 le->type = type;
67
68 /* the default is invisible - another event will follow which spawns not
69 * only the le, but also the particle. The visibility is set there, too */
70 if (le->type == ET_PARTICLE)
71 LE_SetInvisible(le);
72
73 VectorCopy(pos, le->pos);
74 Grid_PosToVec(cl.mapData->routing, le->fieldSize, le->pos, le->origin);
75 }
76