UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
e_event_actorreactionfireaddtarget.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_actor.h"
28 #include "../../../cl_hud.h"
29 #include "../../../../ui/ui_main.h"
31 
32 static void CL_GetReactionFireHead (const le_t* le, const char** model, int* skin, bool* robot)
33 {
34  /* hack for robots, they don't have a head */
35  if (le->teamDef->robot) {
36  *model = le->model1->name;
37  *skin = le->bodySkin;
38  } else {
39  *model = le->model2->name;
40  *skin = le->headSkin;
41  }
42  *robot = le->teamDef->robot;
43 }
44 
46 {
47  int targetEntNum;
48  int unused;
49  int step;
50 
51  NET_ReadFormat(msg, self->formatString, &unused, &targetEntNum, &unused, &step);
52 
53  const le_t* target = LE_Get(targetEntNum);
54  if (!target)
55  LE_NotFoundError(targetEntNum);
56  if (step >= MAX_ROUTE)
57  return eventTiming->nextTime;
58  const int stepTime = CL_GetStepTime(eventTiming, target, step);
59  if (eventTiming->shootTime > stepTime)
60  return eventTiming->impactTime;
61  return stepTime;
62 }
63 
71 {
72  int shooterEntNum;
73  int targetEntNum;
74  // if these TUs have arrived at 0, the reaction fire can be triggered
75  int tusUntilTriggered;
76  int unused;
77 
78  NET_ReadFormat(msg, self->formatString, &shooterEntNum, &targetEntNum, &tusUntilTriggered, &unused);
79 
80  const le_t* shooter = LE_Get(shooterEntNum);
81  if (!shooter)
82  LE_NotFoundError(shooterEntNum);
83 
84  const le_t* target = LE_Get(targetEntNum);
85  if (!target)
86  LE_NotFoundError(targetEntNum);
87 
88  const char* shooterModel;
89  int shooterSkin;
90  bool shooterRobot;
91  CL_GetReactionFireHead(shooter, &shooterModel, &shooterSkin, &shooterRobot);
92  const fireDef_t* shooterFiredef = CL_ActorGetReactionFireFireDef(shooter);
93  const float distance = VectorDist(shooter->origin, target->origin);
94  const bool outOfRange = shooterFiredef->range < distance;
95 
96  UI_ExecuteConfunc("reactionfire_addtarget %i %i \"%s\" %i %i %i %i \"%s\"", shooterEntNum, target->entnum, shooterModel,
97  shooterSkin, shooterRobot, tusUntilTriggered, outOfRange, _(shooterFiredef->name));
98 
99  LE_CenterView(target);
100 }
void CL_ActorReactionFireAddTarget(const eventRegister_t *self, dbuffer *msg)
Network event function for reaction fire target handling. Responsible for updating the HUD with the i...
teamDef_t * teamDef
this is a fire definition for our weapons/ammo
Definition: inv_shared.h:110
int entnum
void LE_CenterView(const le_t *le)
Center the camera on the local entity's origin.
bool robot
Definition: chr_shared.h:322
#define _(String)
Definition: cl_shared.h:43
#define VectorDist(a, b)
Definition: vector.h:69
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
vec3_t origin
int shootTime
Definition: e_main.h:32
CL_ParseEvent timers and vars.
Definition: e_main.h:30
le_t * LE_Get(int entnum)
Searches all local entities for the one with the searched entnum.
#define MAX_ROUTE
Definition: defines.h:84
model_t * model1
char name[MAX_QPATH]
Definition: r_model.h:44
model_t * model2
Struct that defines one particular event with all its callbacks and data.
Definition: e_main.h:42
int CL_GetStepTime(const eventTiming_t *eventTiming, const le_t *le, int step)
Calculates the time when the given step was executed in the event chain.
Definition: e_main.cpp:177
unsigned int bodySkin
a local entity
int CL_ActorReactionFireAddTargetTime(const eventRegister_t *self, dbuffer *msg, eventTiming_t *eventTiming)
float range
Definition: inv_shared.h:152
static void CL_GetReactionFireHead(const le_t *le, const char **model, int *skin, bool *robot)
int impactTime
Definition: e_main.h:33
const char * name
Definition: inv_shared.h:111
unsigned int headSkin
int nextTime
Definition: e_main.h:31
const fireDef_t * CL_ActorGetReactionFireFireDef(const le_t *shooter)
Definition: cl_actor.cpp:171
void UI_ExecuteConfunc(const char *fmt,...)
Executes confunc - just to identify those confuncs in the code - in this frame.
Definition: ui_main.cpp:110
#define LE_NotFoundError(entnum)