]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/movelib.qc
do less audio spam for triggers that don't even respond to players
[divverent/nexuiz.git] / data / qcsrc / server / movelib.qc
1 /**\r
2     Simulate drag\r
3     self.velocity = movelib_vdrag(self.velocity,0.02,0.5);\r
4 **/\r
5 vector movelib_dragvec(float drag, float exp)\r
6 {\r
7     float lspeed,ldrag;\r
8 \r
9     lspeed = vlen(self.velocity);\r
10     ldrag = lspeed * drag;\r
11     ldrag = ldrag * (drag * exp);\r
12     ldrag = 1 - (ldrag / lspeed);\r
13 \r
14     return self.velocity * ldrag;\r
15 }\r
16 \r
17 /**\r
18     Simulate drag\r
19     self.velocity = movelib_vdrag(somespeed,0.01,0.7);\r
20 **/\r
21 float movelib_dragflt(float fspeed,float drag,float exp)\r
22 {\r
23     float ldrag;\r
24 \r
25     ldrag = fspeed * drag;\r
26     ldrag = ldrag * ldrag * exp;\r
27     ldrag = 1 - (ldrag / fspeed);\r
28 \r
29     return ldrag;\r
30 }\r
31 \r
32 /**\r
33     Do a inertia simulation based on velocity.\r
34     Basicaly, this allows you to simulate objects loss steering with speed.\r
35     self.velocity = movelib_inertia_fromspeed(self.velocity,newvel,1000,0.1,0.9);\r
36 **/\r
37 vector movelib_inertmove_byspeed(vector vel_new, float vel_max,float newmin,float oldmax)\r
38 {\r
39     float influense;\r
40 \r
41     influense = vlen(self.velocity) * (1 / vel_max);\r
42 \r
43     influense = bound(newmin,influense,oldmax);\r
44 \r
45     return (vel_new * (1 - influense)) + (self.velocity * influense);\r
46 }\r
47 \r
48 vector movelib_inertmove(vector new_vel,float new_bias)\r
49 {\r
50     return new_vel * new_bias + self.velocity * (1-new_bias);\r
51 }\r
52 \r
53 .float  movelib_lastupdate;\r
54 void movelib_move(vector force,float max_velocity,float drag,float mass,float breakforce)\r
55 {\r
56     float deltatime;\r
57     float acceleration;\r
58     //float mspeed;\r
59 \r
60     deltatime = time - self.movelib_lastupdate;\r
61     if (deltatime > 0.15) deltatime = 0;\r
62     self.movelib_lastupdate = time;\r
63     if(!deltatime) return;\r
64 \r
65     //mspeed = vlen(self.velocity);\r
66 \r
67     if(mass)\r
68         acceleration = vlen(force) / mass;\r
69     else\r
70         acceleration = vlen(force);\r
71 \r
72     if(self.flags & FL_ONGROUND)\r
73     {\r
74         if(breakforce)\r
75         {\r
76             breakforce = 1 - ((breakforce / mass) * deltatime);\r
77             self.velocity = self.velocity * breakforce;\r
78         }\r
79 \r
80         self.velocity = self.velocity + force * (acceleration * deltatime);\r
81     }\r
82 \r
83     self.velocity = self.velocity + '0 0 -1' * sv_gravity * deltatime;\r
84 \r
85     if(drag)\r
86         self.velocity = movelib_dragvec(drag, 1);\r
87 \r
88     if(max_velocity)\r
89     if(vlen(self.velocity) > max_velocity)\r
90         self.velocity = normalize(self.velocity) * max_velocity;\r
91 }\r
92 \r
93 void movelib_move_simple(vector newdir,float velo,float turnrate)\r
94 {\r
95     vector olddir;\r
96 \r
97     olddir = normalize(self.velocity);\r
98 \r
99     self.velocity = normalize(olddir + newdir * turnrate) * velo;\r
100 }\r
101 \r
102 /*\r
103 vector movelib_accelerate(float force)\r
104 {\r
105     vector vel;\r
106     vel = self.velocity;\r
107     vel = normalize(vel) * (vlen(vel) + force);\r
108     self.velocity = self.velocity  + vel;\r
109 }\r
110 \r
111 \r
112 vector movelib_decelerate(float force,float mass)\r
113 {\r
114     vector vel;\r
115     float decel;\r
116 \r
117     if(mass)\r
118         decel = force / mass;\r
119     else\r
120         decel = force;\r
121 \r
122     vel = self.velocity;\r
123     vel = normalize(vel) * max((vlen(vel) - decel),0);\r
124     self.velocity = self.velocity - vel;\r
125 \r
126     if(vlen(self.velocity) < 5) self.velocity = '0 0 0';\r
127 }\r
128 */\r
129 vector movelib_velocity_transfer(entity source,entity destination)\r
130 {\r
131     return '0 0 0';\r
132 }\r