Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
teleport.qc File Reference
#include "teleport.qh"
Include dependency graph for teleport.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

 spawnfunc (target_teleporter)
 spawnfunc (trigger_teleport)
void target_teleport_use (entity this, entity actor, entity trigger)
void target_teleporter_checktarget (entity this)
bool Teleport_Active (entity this, entity player)
void Teleport_Touch (entity this, entity toucher)
void trigger_teleport_link (entity this)
float trigger_teleport_send (entity this, entity to, float sf)
void trigger_teleport_use (entity this, entity actor, entity trigger)

Function Documentation

◆ spawnfunc() [1/2]

spawnfunc ( target_teleporter )

Definition at line 188 of file teleport.qc.

189{
191}
const int INITPRIO_FINDTARGET
Definition constants.qh:96
void target_teleporter_checktarget(entity this)
Definition teleport.qc:143
void InitializeEntity(entity e, void(entity this) func, int order)
Definition world.qc:2209

References InitializeEntity(), INITPRIO_FINDTARGET, and target_teleporter_checktarget().

◆ spawnfunc() [2/2]

spawnfunc ( trigger_teleport )

Definition at line 120 of file teleport.qc.

121{
122 this.angles = '0 0 0';
123
124 this.active = ACTIVE_ACTIVE;
127
128 if(this.noise != "")
129 FOREACH_WORD(this.noise, true, precache_sound(it));
130
131 // this must be called to spawn the teleport waypoints for bots
133
134 if (!this.target || this.target == "")
135 {
136 objerror (this, "Teleporter with no target");
137 return;
138 }
139
140 IL_PUSH(g_teleporters, this);
141}
#define use
int active
Definition defs.qh:34
const int ACTIVE_ACTIVE
Definition defs.qh:37
ent angles
Definition ent_cs.qc:121
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
#define FOREACH_WORD(words, cond, body)
Definition iter.qh:33
#define EXACTTRIGGER_INIT
Definition common.qh:116
string precache_sound(string sample)
#define objerror
Definition pre.qh:8
string noise
Definition subs.qh:83
void teleport_findtarget(entity this)
void trigger_teleport_use(entity this, entity actor, entity trigger)
Definition teleport.qc:5
IntrusiveList g_teleporters
string target
Definition triggers.qh:55

References active, ACTIVE_ACTIVE, angles, EXACTTRIGGER_INIT, FOREACH_WORD, g_teleporters, IL_PUSH(), InitializeEntity(), INITPRIO_FINDTARGET, noise, objerror, precache_sound(), target, teleport_findtarget(), trigger_teleport_use(), and use.

◆ target_teleport_use()

void target_teleport_use ( entity this,
entity actor,
entity trigger )

Definition at line 76 of file teleport.qc.

77{
78 entity player = actor;
79
80 if(!Teleport_Active(this, player))
81 return;
82
83 if(IS_PLAYER(player))
85
86 entity e = Simple_TeleportPlayer(this, player);
87
88 string s = this.target; this.target = string_null;
89 SUB_UseTargets(this, player, player); // TODO: should we be using toucher for trigger too?
90 if (!this.target)
91 {
92 this.target = s;
93 }
94
95 if(e != this) // only activate the target teleporter if target is different
96 SUB_UseTargets(e, player, player);
97}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define IS_PLAYER(s)
Definition player.qh:243
void SUB_UseTargets(entity this, entity actor, entity trigger)
Definition triggers.qc:344
string string_null
Definition nil.qh:9
void RemoveGrapplingHooks(entity pl)
Definition hook.qc:30
bool Teleport_Active(entity this, entity player)
Definition teleport.qc:15
entity Simple_TeleportPlayer(entity teleporter, entity player)

References entity(), IS_PLAYER, RemoveGrapplingHooks(), Simple_TeleportPlayer(), string_null, SUB_UseTargets(), target, and Teleport_Active().

Referenced by target_teleporter_checktarget().

◆ target_teleporter_checktarget()

void target_teleporter_checktarget ( entity this)

Definition at line 143 of file teleport.qc.

144{
145 // target_teleporter is used in many strange ways
146 // we must attempt to figure out which way it is being used for in this instance
147
148 if(!this.target || this.target == "")
149 {
150 // this target_teleporter has no target
151 // so it must be either a destination for a teleporter or a teleporter itself
152 bool is_teleporter_target = false;
153 // NOTE: target2, target3, target4 unsupported, this may not be necessary as DeFrag maps have no such targets
155 {
156 if(it.classname == "trigger_teleport" || it.classname == "target_teleporter")
157 {
158 is_teleporter_target = true;
159 break; // no need to keep looping once a valid target is found
160 }
161 });
162
163 if(is_teleporter_target)
164 {
165 // there were teleporters found targeting this, so it must be a destination!
166 spawnfunc_info_teleport_destination(this);
167 return;
168 }
169
170 // set this entity up to be a teleporter, since it can be activated as one
171 this.enemy = this;
172 this.mangle = this.angles;
173 this.angles = '0 0 0';
174 }
175
176 // seeing as this entity isn't targeted by a teleporter, it must be a teleporter itself
177
178 this.active = ACTIVE_ACTIVE;
180
181 if(this.noise && this.noise != "")
182 FOREACH_WORD(this.noise, true, precache_sound(it));
183
184 if(this.target && this.target != "") // no need to find a target on this entity, as it does not have one and .enemy is already set as required
186}
#define FOREACH_ENTITY_STRING(fld, match, body)
Definition iter.qh:184
vector mangle
Definition subs.qh:51
entity enemy
Definition sv_ctf.qh:153
void target_teleport_use(entity this, entity actor, entity trigger)
Definition teleport.qc:76
string targetname
Definition triggers.qh:56

References active, ACTIVE_ACTIVE, angles, enemy, entity(), FOREACH_ENTITY_STRING, FOREACH_WORD, mangle, noise, precache_sound(), target, target_teleport_use(), targetname, teleport_findtarget(), and use.

Referenced by spawnfunc().

◆ Teleport_Active()

bool Teleport_Active ( entity this,
entity player )

Definition at line 15 of file teleport.qc.

16{
17 if (this.active != ACTIVE_ACTIVE)
18 return false;
19
20#ifdef SVQC
21 if (!player.teleportable)
22 return false;
23
24 if(player.vehicle)
25 if(!player.vehicle.teleportable)
26 return false;
27
28 if(IS_TURRET(player))
29 return false;
30#elif defined(CSQC)
31 if(!IS_PLAYER(player))
32 return false;
33#endif
34
35 if(IS_DEAD(player))
36 return false;
37
38 if(this.team)
39 if(((this.spawnflags & INVERT_TEAMS) == 0) == (DIFF_TEAM(this, player)))
40 return false;
41
42 // no need to call IS_OBSERVER(), observers never call use/touch functions which means this is never an observer
43 if(this.classname == "trigger_teleport" && (this.spawnflags & TELEPORT_OBSERVERS_ONLY))
44 return false;
45
46 return true;
47}
int team
Definition main.qh:188
int spawnflags
Definition ammo.qh:15
#define IS_DEAD(s)
Definition player.qh:245
string classname
const int INVERT_TEAMS
Definition defs.qh:10
#define DIFF_TEAM(a, b)
Definition teams.qh:242
#define TELEPORT_OBSERVERS_ONLY
Definition teleport.qh:7
#define IS_TURRET(v)
Definition utils.qh:23

References active, ACTIVE_ACTIVE, classname, DIFF_TEAM, entity(), INVERT_TEAMS, IS_DEAD, IS_PLAYER, IS_TURRET, spawnflags, team, and TELEPORT_OBSERVERS_ONLY.

Referenced by target_teleport_use(), and Teleport_Touch().

◆ Teleport_Touch()

void Teleport_Touch ( entity this,
entity toucher )

Definition at line 49 of file teleport.qc.

50{
51 entity player = toucher;
52
53 if(!Teleport_Active(this, player))
54 return;
55
56 EXACTTRIGGER_TOUCH(this, player);
57
58#ifdef SVQC
59 if(IS_PLAYER(player))
61#endif
62
63 entity e;
64 e = Simple_TeleportPlayer(this, player);
65
66#ifdef SVQC
67 string s = this.target; this.target = string_null;
68 SUB_UseTargets(this, player, player); // TODO: should we be using toucher for trigger too?
69 if (!this.target) this.target = s;
70
71 SUB_UseTargets(e, player, player);
72#endif
73}
#define EXACTTRIGGER_TOUCH(e, t)
Definition common.qh:115
entity entity toucher
Definition self.qh:72

References entity(), EXACTTRIGGER_TOUCH, IS_PLAYER, RemoveGrapplingHooks(), Simple_TeleportPlayer(), string_null, SUB_UseTargets(), target, Teleport_Active(), and toucher.

Referenced by teleport_findtarget().

◆ trigger_teleport_link()

void trigger_teleport_link ( entity this)

Definition at line 115 of file teleport.qc.

116{
117 //trigger_link(this, trigger_teleport_send);
118}

References entity().

Referenced by teleport_findtarget().

◆ trigger_teleport_send()

float trigger_teleport_send ( entity this,
entity to,
float sf )

Definition at line 101 of file teleport.qc.

102{
103 WriteHeader(MSG_ENTITY, ENT_CLIENT_TRIGGER_TELEPORT);
104
106 WriteInt24_t(MSG_ENTITY, this.spawnflags);
109
110 trigger_common_write(this, true);
111
112 return true;
113}
float speed
Definition dynlight.qc:9
const int MSG_ENTITY
Definition net.qh:115
#define WriteHeader(to, id)
Definition net.qh:221
void WriteCoord(float data, float dest, float desto)
void WriteByte(float data, float dest, float desto)
void trigger_common_write(entity this, bool withtarget)
Definition triggers.qc:110

References active, entity(), MSG_ENTITY, spawnflags, speed, team, trigger_common_write(), WriteByte(), WriteCoord(), and WriteHeader.

◆ trigger_teleport_use()

void trigger_teleport_use ( entity this,
entity actor,
entity trigger )

Definition at line 5 of file teleport.qc.

6{
7 if(teamplay)
8 this.team = actor.team;
9#ifdef SVQC
11#endif
12}
const int SF_TRIGGER_UPDATE
Definition defs.qh:23
int SendFlags
Definition net.qh:118
bool teamplay
Definition teams.qh:59

References entity(), SendFlags, SF_TRIGGER_UPDATE, team, and teamplay.

Referenced by spawnfunc().