#include "subs.qh"
+
void SUB_NullThink(entity this) { }
void SUB_CalcMoveDone(entity this);
==================
SUB_SetFade
-Fade 'ent' out when time >= 'when'
+Fade ent out when time >= vanish_time
==================
*/
-void SUB_SetFade (entity ent, float when, float fading_time)
+void SUB_SetFade(entity ent, float vanish_time, float fading_time)
{
+ if (fading_time <= 0)
+ fading_time = 0.01;
ent.fade_rate = 1/fading_time;
setthink(ent, SUB_SetFade_Think);
- ent.nextthink = when;
+ ent.nextthink = vanish_time;
}
/*
this.think1 (this);
}
+void SUB_CalcMovePause(entity this)
+{
+ this.move_controller.animstate_starttime += frametime;
+ this.move_controller.animstate_endtime += frametime;
+}
+
.float platmovetype_turn;
void SUB_CalcMove_controller_think (entity this)
{
// 2 * control * t - 2 * control * t * t + destin * t * t
// 2 * control * t + (destin - 2 * control) * t * t
- setorigin(controller, org);
+ //setorigin(controller, org); // don't link to the world
+ controller.origin = org;
control -= org;
destin -= org;
// 2 * control * t - 2 * control * t * t + destin * t * t
// 2 * control * t + (destin - 2 * control) * t * t
- setorigin(controller, org);
+ //setorigin(controller, org); // don't link to the world
+ controller.origin = org;
destin -= org;
controller.destvec = destin; // end point
{
delete(this.move_controller);
}
- controller = new(SUB_CalcMove_controller);
+ controller = new_pure(SUB_CalcMove_controller);
controller.owner = this;
this.move_controller = controller;
controller.platmovetype = this.platmovetype;
// Very short animations don't really show off the effect
// of controlled animation, so let's just use linear movement.
// Alternatively entities can choose to specify non-controlled movement.
- // The only currently implemented alternative movement is linear (value 1)
+ // The only currently implemented alternative movement is linear (value 1)
if (traveltime < 0.15 || (this.platmovetype_start == 1 && this.platmovetype_end == 1)) // is this correct?
{
this.velocity = delta * (1/traveltime); // QuakeC doesn't allow vector/float division
e.mins_y = -e.maxs.x;
}
if(e.scale)
- setsize(e, e.mins * e.scale, e.maxs * e.scale);
+ setsize(e, RoundPerfectVector(e.mins * e.scale), RoundPerfectVector(e.maxs * e.scale));
else
setsize(e, e.mins, e.maxs);
}
-void SetBrushEntityModel(entity this)
+void SetBrushEntityModel(entity this, bool with_lod)
{
- if(this.model != "")
- {
- precache_model(this.model);
+ if(this.model != "")
+ {
+ precache_model(this.model);
if(this.mins != '0 0 0' || this.maxs != '0 0 0')
{
vector mi = this.mins;
}
else
_setmodel(this, this.model); // no precision needed
- InitializeEntity(this, LODmodel_attach, INITPRIO_FINDTARGET);
- }
- setorigin(this, this.origin);
- ApplyMinMaxScaleAngles(this);
-}
+ if(with_lod)
+ InitializeEntity(this, LODmodel_attach, INITPRIO_FINDTARGET);
-void SetBrushEntityModelNoLOD(entity this)
-{
- if(this.model != "")
- {
- precache_model(this.model);
- if(this.mins != '0 0 0' || this.maxs != '0 0 0')
- {
- vector mi = this.mins;
- vector ma = this.maxs;
- _setmodel(this, this.model); // no precision needed
- setsize(this, mi, ma);
- }
- else
- _setmodel(this, this.model); // no precision needed
- }
+ if(endsWith(this.model, ".obj")) // WORKAROUND: darkplaces currently rotates .obj models on entities incorrectly, we need to add 180 degrees to the Y axis
+ this.angles_y = anglemods(this.angles_y - 180);
+ }
setorigin(this, this.origin);
ApplyMinMaxScaleAngles(this);
}
// to mean no restrictions, so use a yaw of 360 instead.
SetMovedir(this);
this.solid = SOLID_TRIGGER;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, false);
set_movetype(this, MOVETYPE_NONE);
this.modelindex = 0;
this.model = "";
// to mean no restrictions, so use a yaw of 360 instead.
SetMovedir(this);
this.solid = SOLID_BSP;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, false);
set_movetype(this, MOVETYPE_NONE); // why was this PUSH? -div0
// this.modelindex = 0;
this.model = "";
// trigger angles are used for one-way touches. An angle of 0 is assumed
// to mean no restrictions, so use a yaw of 360 instead.
this.solid = SOLID_BSP;
- SetBrushEntityModel(this);
+ SetBrushEntityModel(this, true);
set_movetype(this, MOVETYPE_PUSH);
if(this.modelindex == 0)
{