]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/triggers/misc/teleport_dest.qc
Merge branch 'master' into Mario/overkill
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / triggers / misc / teleport_dest.qc
1 #include "teleport_dest.qh"
2 REGISTER_NET_LINKED(ENT_CLIENT_TELEPORT_DEST)
3
4 #ifdef SVQC
5
6 bool teleport_dest_send(entity this, entity to, int sf)
7 {
8         WriteHeader(MSG_ENTITY, ENT_CLIENT_TELEPORT_DEST);
9         WriteByte(MSG_ENTITY, sf);
10
11         if(sf & 1)
12         {
13                 WriteByte(MSG_ENTITY, this.cnt);
14                 WriteCoord(MSG_ENTITY, this.speed);
15                 WriteString(MSG_ENTITY, this.targetname);
16                 WriteCoord(MSG_ENTITY, this.origin_x);
17                 WriteCoord(MSG_ENTITY, this.origin_y);
18                 WriteCoord(MSG_ENTITY, this.origin_z);
19
20                 WriteAngle(MSG_ENTITY, this.mangle_x);
21                 WriteAngle(MSG_ENTITY, this.mangle_y);
22                 WriteAngle(MSG_ENTITY, this.mangle_z);
23         }
24
25         return true;
26 }
27
28 void teleport_dest_link(entity this)
29 {
30         Net_LinkEntity(this, false, 0, teleport_dest_send);
31         this.SendFlags |= 1; // update
32 }
33
34 spawnfunc(info_teleport_destination)
35 {
36         this.classname = "info_teleport_destination";
37
38         this.mangle = this.angles;
39         this.angles = '0 0 0';
40
41         //setorigin(this, this.origin + '0 0 27');      // To fix a mappers' habit as old as Quake
42         setorigin(this, this.origin);
43
44         IFTARGETED
45         {
46         }
47         else
48                 objerror (this, "^3Teleport destination without a targetname");
49
50         teleport_dest_link(this);
51 }
52
53 spawnfunc(misc_teleporter_dest)
54 {
55         spawnfunc_info_teleport_destination(this);
56 }
57
58 spawnfunc(target_teleporter)
59 {
60         spawnfunc_info_teleport_destination(this);
61 }
62
63 #elif defined(CSQC)
64
65 void teleport_dest_remove(entity this)
66 {
67         //if(this.classname)
68                 //strunzone(this.classname);
69         //this.classname = string_null;
70
71         if(this.targetname)
72                 strunzone(this.targetname);
73         this.targetname = string_null;
74 }
75
76 NET_HANDLE(ENT_CLIENT_TELEPORT_DEST, bool isnew)
77 {
78         int sf = ReadByte();
79
80         if(sf & 1)
81         {
82                 this.classname = "info_teleport_destination";
83                 this.cnt = ReadByte();
84                 this.speed = ReadCoord();
85                 this.targetname = strzone(ReadString());
86                 this.origin_x = ReadCoord();
87                 this.origin_y = ReadCoord();
88                 this.origin_z = ReadCoord();
89
90                 this.mangle_x = ReadAngle();
91                 this.mangle_y = ReadAngle();
92                 this.mangle_z = ReadAngle();
93
94                 setorigin(this, this.origin);
95
96                 this.drawmask = MASK_NORMAL;
97                 this.entremove = teleport_dest_remove;
98         }
99
100         return = true;
101 }
102
103 #endif