UFO: Alien Invasion
Loading...
Searching...
No Matches
e_event_actorreactionfireaddtarget.cpp
Go to the documentation of this file.
1
4
5/*
6Copyright (C) 2002-2025 UFO: Alien Invasion.
7
8This program is free software; you can redistribute it and/or
9modify it under the terms of the GNU General Public License
10as published by the Free Software Foundation; either version 2
11of the License, or (at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16
17See the GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
21Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23*/
24
25#include "../../../../client.h"
27#include "../../../cl_actor.h"
28#include "../../../cl_hud.h"
31
32static 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}
const fireDef_t * CL_ActorGetReactionFireFireDef(const le_t *shooter)
Definition cl_actor.cpp:171
HUD related routines.
void LE_CenterView(const le_t *le)
Center the camera on the local entity's origin.
le_t * LE_Get(int entnum)
Searches all local entities for the one with the searched entnum.
#define LE_NotFoundError(entnum)
#define _(String)
Definition cl_shared.h:44
Primary header for client.
#define MAX_ROUTE
Definition defines.h:84
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...
static void CL_GetReactionFireHead(const le_t *le, const char **model, int *skin, bool *robot)
int CL_ActorReactionFireAddTargetTime(const eventRegister_t *self, dbuffer *msg, eventTiming_t *eventTiming)
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
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
Struct that defines one particular event with all its callbacks and data.
Definition e_main.h:42
const char * formatString
The format string that is used to write and parse this event.
Definition e_main.h:54
CL_ParseEvent timers and vars.
Definition e_main.h:30
int shootTime
Definition e_main.h:32
int nextTime
Definition e_main.h:31
int impactTime
Definition e_main.h:33
this is a fire definition for our weapons/ammo
Definition inv_shared.h:110
const char * name
Definition inv_shared.h:111
float range
Definition inv_shared.h:152
a local entity
vec3_t origin
model_t * model1
unsigned int headSkin
teamDef_t * teamDef
int entnum
model_t * model2
unsigned int bodySkin
char name[MAX_QPATH]
Definition r_model.h:44
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 VectorDist(a, b)
Definition vector.h:69