X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fmapobjects%2Fsubs.qc;h=5d25bf4b5e9a6001b176d9b509d01aed1256ca7e;hb=95f519076e501b981eb877dd921dee635b2fbd77;hp=9adccb4924e3721a91ae31c4c6a4d90ff458e442;hpb=e928607ec4292b2b548afad0304d5830792bc485;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/mapobjects/subs.qc b/qcsrc/common/mapobjects/subs.qc index 9adccb492..5d25bf4b5 100644 --- a/qcsrc/common/mapobjects/subs.qc +++ b/qcsrc/common/mapobjects/subs.qc @@ -1,4 +1,5 @@ #include "subs.qh" + void SUB_NullThink(entity this) { } void SUB_CalcMoveDone(entity this); @@ -70,14 +71,16 @@ void SUB_SetFade_Think (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; } /* @@ -99,6 +102,12 @@ void SUB_CalcMoveDone(entity this) 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) { @@ -166,7 +175,8 @@ void SUB_CalcMove_controller_setbezier (entity controller, vector org, vector co // 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; @@ -181,7 +191,8 @@ void SUB_CalcMove_controller_setlinear (entity controller, vector org, vector de // 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 @@ -229,7 +240,7 @@ void SUB_CalcMove_Bezier (entity this, vector tcontrol, vector tdest, float tspe { 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; @@ -287,7 +298,7 @@ void SUB_CalcMove (entity this, vector tdest, float tspeedtype, float tspeed, vo // 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 @@ -393,16 +404,16 @@ void ApplyMinMaxScaleAngles(entity e) 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, 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; @@ -417,7 +428,7 @@ void SetBrushEntityModel(entity this, bool with_lod) 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); }