From: TimePath Date: Thu, 23 Jun 2016 22:55:40 +0000 (+1000) Subject: Move PM_fly to ecs X-Git-Tag: xonotic-v0.8.2~766 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=3263d9a51f2a95a7f2b8401d0fd9def1ab0a0127;p=xonotic%2Fxonotic-data.pk3dir.git Move PM_fly to ecs --- diff --git a/qcsrc/common/physics/player.qc b/qcsrc/common/physics/player.qc index 5925ada7b..38c6fed9e 100644 --- a/qcsrc/common/physics/player.qc +++ b/qcsrc/common/physics/player.qc @@ -816,27 +816,6 @@ void PM_check_blocked(entity this) #endif } -void PM_fly(entity this, float maxspd_mod) -{ - // noclipping or flying - UNSET_ONGROUND(this); - - this.velocity = this.velocity * (1 - PHYS_INPUT_TIMELENGTH * PHYS_FRICTION(this)); - makevectors(this.v_angle); - //wishvel = v_forward * this.movement.x + v_right * this.movement.y + v_up * this.movement.z; - vector wishvel = v_forward * this.movement.x - + v_right * this.movement.y - + '0 0 1' * this.movement.z; - // acceleration - vector wishdir = normalize(wishvel); - float wishspeed = min(vlen(wishvel), PHYS_MAXSPEED(this) * maxspd_mod); -#ifdef SVQC - if(time >= PHYS_TELEPORT_TIME(this)) -#endif - PM_Accelerate(this, wishdir, wishspeed, wishspeed, PHYS_ACCELERATE(this) * maxspd_mod, 1, 0, 0, 0); - PM_ClientMovement_Move(this); -} - void PM_swim(entity this, float maxspd_mod) { // swimming diff --git a/qcsrc/ecs/components/physics.qh b/qcsrc/ecs/components/physics.qh index 502657e4b..7457cb29c 100644 --- a/qcsrc/ecs/components/physics.qh +++ b/qcsrc/ecs/components/physics.qh @@ -4,4 +4,7 @@ COMPONENT(phys); .vector com_phys_pos, com_phys_pos_prev; .vector com_phys_ang, com_phys_ang_prev; .vector com_phys_vel; +.float com_phys_vel_max; .vector com_phys_acc; +.float com_phys_acc_rate; +.float com_phys_friction; diff --git a/qcsrc/ecs/systems/physics.qc b/qcsrc/ecs/systems/physics.qc index 3457198c5..27b3689c9 100644 --- a/qcsrc/ecs/systems/physics.qc +++ b/qcsrc/ecs/systems/physics.qc @@ -3,13 +3,14 @@ .int disableclientprediction; +void sys_phys_simulate(entity this, float dt); + void sys_phys_update(entity this, float dt) { sys_in_update(this, dt); sys_phys_fix(this, dt); - if (sys_phys_override(this)) return; - sys_phys_monitor(this); + if (sys_phys_override(this)) { return; } sys_phys_monitor(this); int buttons_prev = this.buttons_old; this.buttons_old = PHYS_INPUT_BUTTON_MASK(this); @@ -21,8 +22,7 @@ void sys_phys_update(entity this, float dt) sys_phys_pregame_hold(this); if (IS_SVQC) { - if (PHYS_MOVETYPE(this) == MOVETYPE_NONE) return; - + if (PHYS_MOVETYPE(this) == MOVETYPE_NONE) { return; } // when we get here, disableclientprediction cannot be 2 this.disableclientprediction = 0; } @@ -33,11 +33,10 @@ void sys_phys_update(entity this, float dt) PM_check_blocked(this); - float maxspeed_mod = (!this.in_swamp) ? 1 : this.swamp_slowdown; // cvar("g_balance_swamp_moverate"); + float maxspeed_mod = (!this.in_swamp) ? 1 : this.swamp_slowdown; // cvar("g_balance_swamp_moverate"); // conveyors: first fix velocity - if (this.conveyor.state) this.velocity -= this.conveyor.movedir; - + if (this.conveyor.state) { this.velocity -= this.conveyor.movedir; } MUTATOR_CALLHOOK(PlayerPhysics, this); if (!IS_PLAYER(this)) { @@ -59,8 +58,7 @@ void sys_phys_update(entity this, float dt) goto end; } - if (IS_SVQC && !PHYS_FIXANGLE(this)) this.angles = '0 1 0' * this.v_angle.y; - + if (IS_SVQC && !PHYS_FIXANGLE(this)) { this.angles = '0 1 0' * this.v_angle.y; } if (IS_PLAYER(this)) { if (IS_ONGROUND(this)) { PM_check_hitground(this); @@ -88,7 +86,10 @@ void sys_phys_update(entity this, float dt) || PHYS_MOVETYPE(this) == MOVETYPE_FLY || PHYS_MOVETYPE(this) == MOVETYPE_FLY_WORLDONLY || MUTATOR_CALLHOOK(IsFlying, this)) { - PM_fly(this, maxspeed_mod); + this.com_phys_friction = PHYS_FRICTION(this); + this.com_phys_vel_max = PHYS_MAXSPEED(this) * maxspeed_mod; + this.com_phys_acc_rate = PHYS_ACCELERATE(this) * maxspeed_mod; + sys_phys_simulate(this, dt); } else if (this.waterlevel >= WATERLEVEL_SWIMMING) { PM_swim(this, maxspeed_mod); } else if (time < this.ladder_time) { @@ -102,12 +103,30 @@ void sys_phys_update(entity this, float dt) } LABEL(end) - if (IS_ONGROUND(this)) this.lastground = time; - + if (IS_ONGROUND(this)) { this.lastground = time; } // conveyors: then break velocity again - if (this.conveyor.state) this.velocity += this.conveyor.movedir; - + if (this.conveyor.state) { this.velocity += this.conveyor.movedir; } this.lastflags = this.flags; this.lastclassname = this.classname; } + +void sys_phys_simulate(entity this, float dt) +{ + // noclipping or flying + UNSET_ONGROUND(this); + + this.velocity = this.velocity * (1 - dt * this.com_phys_friction); + makevectors(this.v_angle); + // wishvel = v_forward * this.movement.x + v_right * this.movement.y + v_up * this.movement.z; + vector wishvel = v_forward * this.movement.x + + v_right * this.movement.y + + '0 0 1' * this.movement.z; + // acceleration + vector wishdir = normalize(wishvel); + float wishspeed = min(vlen(wishvel), this.com_phys_vel_max); + if (IS_CSQC || time >= PHYS_TELEPORT_TIME(this)) { + PM_Accelerate(this, wishdir, wishspeed, wishspeed, this.com_phys_acc_rate, 1, 0, 0, 0); + } + PM_ClientMovement_Move(this); +} diff --git a/qcsrc/uncrustify.cfg b/qcsrc/uncrustify.cfg index 692cb06ee..b59872722 100644 --- a/qcsrc/uncrustify.cfg +++ b/qcsrc/uncrustify.cfg @@ -1570,27 +1570,27 @@ nl_between_annotation = ignore # ignore/add/remove/force # # Add or remove braces on single-line 'do' statement -mod_full_brace_do = add # ignore/add/remove/force +mod_full_brace_do = force # ignore/add/remove/force # Add or remove braces on single-line 'for' statement # NOTE: is 3 worse than ignore -mod_full_brace_for = remove # ignore/add/remove/force +mod_full_brace_for = force # ignore/add/remove/force # Add or remove braces on single-line function definitions. (Pawn) mod_full_brace_function = ignore # ignore/add/remove/force #ignore # Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'. -mod_full_brace_if = add # ignore/add/remove/force +mod_full_brace_if = force # ignore/add/remove/force # Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if. # If any must be braced, they are all braced. If all can be unbraced, then the braces are removed. -mod_full_brace_if_chain = true # false/true #force +mod_full_brace_if_chain = false # false/true #force # Don't remove braces around statements that span N newlines mod_full_brace_nl = 2 # number #force # Add or remove braces on single-line 'while' statement -mod_full_brace_while = remove # ignore/add/remove/force +mod_full_brace_while = force # ignore/add/remove/force # Add or remove braces on single-line 'using ()' statement # WARNING: Code doesn't seem to use this feature - delete from the config?