25 |
#include "display.hh" |
#include "display.hh" |
26 |
#include "player.hh" |
#include "player.hh" |
27 |
#include "sound.hh" |
#include "sound.hh" |
28 |
#include "px/math.hh" |
#include "px/px.hh" |
|
#include "px/tools.hh" |
|
|
#include "px/array2.hh" |
|
29 |
#include "px/dict.hh" |
#include "px/dict.hh" |
30 |
#include "lua.hh" |
#include "lua.hh" |
31 |
#include "options.hh" |
#include "options.hh" |
145 |
if (a->is_flying() || a->is_dead() ) |
if (a->is_flying() || a->is_dead() ) |
146 |
return V3(); |
return V3(); |
147 |
|
|
|
double damping=options::MouseDamping; |
|
148 |
if (a->int_attrib("mouseforce")) |
if (a->int_attrib("mouseforce")) |
149 |
return force*exp(-time*damping); |
return force*exp(-time*options::MouseDamping); |
150 |
else |
else |
151 |
return V3(); |
return V3(); |
152 |
} |
} |
155 |
double damping=options::MouseDamping; |
double damping=options::MouseDamping; |
156 |
force *= exp(-dtime*damping); |
force *= exp(-dtime*damping); |
157 |
|
|
158 |
if (length(force) < 0.01) |
// if (length(force) < 0.01) |
159 |
force = V3(); |
// force = V3(); |
160 |
} |
} |
161 |
private: |
private: |
162 |
void limit_force() { |
void limit_force() {} |
|
if (length(force) > maxforce) |
|
|
force *= maxforce/length(force); |
|
|
} |
|
163 |
|
|
164 |
double maxforce; // maximum force possible |
double maxforce; // maximum force possible |
165 |
V3 force; |
V3 force; |
274 |
{ |
{ |
275 |
if (Floor *floor = GetFloor(p)) |
if (Floor *floor = GetFloor(p)) |
276 |
{ |
{ |
277 |
f += mouseforce->get_force(a,x,v, time) * floor->mousefactor(); |
// Mouse force |
278 |
|
V3 mousef = mouseforce->get_force(a,x,v, time); |
279 |
|
mousef *= floor->mousefactor(); |
280 |
|
f += mousef; |
281 |
|
|
282 |
|
// Friction |
283 |
double vv=length(v); |
double vv=length(v); |
284 |
if (vv > 0.01) |
if (vv > 0) { |
285 |
f -= v/vv * options::FrictionFactor*floor->friction(); |
V3 frictionf = v * options::FrictionFactor*floor->friction(); |
286 |
else |
frictionf /= vv; |
287 |
f -= v * options::FrictionFactor*(floor->friction()); |
frictionf *= pow(vv, 0.8); |
288 |
|
f -= frictionf; |
289 |
|
} |
290 |
f += floor->get_force(a); |
f += floor->get_force(a); |
291 |
} |
} |
292 |
|
|