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