public override void Logic() { mouse.PlaneDistance = mouse.Perspective.Position.Z; hud.Logic(); if (Weapon != null) { Weapon.Logic(); } if (!IsAlive) { return; } if (shadow != null && !dashCooldown.IsDone) { if (!IsDashing) { dashCooldown.Logic(); } if (dashCooldown.IsDone && IsLocalPlayer) { Map.AddEffect(new EffectRing(shadow.CurrentPosition, 1.2f, 0.5f, Color, Map)); } } dodgeCooldown.Logic(); oldInput = input; input = new PlayerInput(inputData); if (oldInput == null) { oldInput = input; } if (!input.Equals(oldInput) && IsLocalPlayer) { if (IsDodgeing || IsDashing) { SendInputPure(); } else { SendInput(); } } if (gravityIgnore > 0 && !input.Equals(oldInput)) { gravityIgnore = 0; } gravityIgnore -= Game.delta; dodgeIntervalTimer -= Game.delta; if (dashTarget == null && dodgeTarget == null) { Input(); if (!WallStickable && WallTouch == 0) { WallStickable = true; } if (wallStick > 0) { if (WallTouch == 0 || IsOnGround) { wallStick = 0; WallStickable = true; } wallStick -= Game.delta; } if (!canDoublejump && IsOnGround) { canDoublejump = true; } base.Logic(); if (shadow == null && (IsOnGround || WallTouch != 0)) { CreateShadow(); } if (shadow != null) { shadow.Logic(); } } else if (dashTarget != null) { DashStep(); } else if (dodgeTarget != null) { DodgeStep(); if (shadow != null) { shadow.Logic(); } } }