public void Update(float _delta) { m_speed += m_acceleration*_delta; float tmpMaxSpeed; tmpMaxSpeed = maxSpeed; //collisions bumps = TryMove(m_speed*_delta); if (bumps.Contains(Bumped.Left)) { if (!onWallLeft) { HitWallLeft(); } onWallLeft = true; m_speed.X = 0; if (m_speed.Y < 0) { tmpMaxSpeed = wallSlideSpeed; } } else { onWallLeft = false; } if (bumps.Contains(Bumped.Right)) { if (!onWallRight) { HitWallRight(); } onWallRight = true; m_speed.X = 0; if (m_speed.Y < 0) { tmpMaxSpeed = wallSlideSpeed; } } else { onWallRight = false; } if (onWallLeft || onWallRight) { wallTimeCount -= _delta; } else { wallTimeCount = wallTime; } if (bumps.Contains(Bumped.Bottom)) { m_speed.Y = 0; if (!onFloor) { HitFloor(); } onFloor = true; } else { onFloor = false; } if (bumps.Contains(Bumped.Top)) { m_speed.Y = 0; } //PrintBumps(bumps); if (TryInjure()) { Die(); } if (Position.Y < -10) { Die(); } m_speed.Cap(tmpMaxSpeed); if (onFloor) { m_speed.Cap(new Vector2f(maxFloorSpeed, maxYSpeed)); } else { m_speed.Cap(new Vector2f(maxXSpeed, maxYSpeed)); } //physics if (doPhysics) { m_acceleration.Y = -gravity; if (onFloor) { m_acceleration.X = -m_speed.X * friction; groundTimeCount -= _delta; } else { m_acceleration.X = -m_speed.X * friction * airFrictionMultiplier; groundTimeCount = groundTime; } } //Console.WriteLine("gt " + groundTimeCount); // Console.WriteLine("speed : " + m_speed); // Console.WriteLine("acceleration : " + m_acceleration); // Console.WriteLine("position : " + m_position); //m_time += _delta; //log.WriteLine(String.Format("{0}, {1}, {2}, {3}",m_time, m_position.CSV(), m_speed.CSV(), m_acceleration.CSV())); Control(_delta, bumps); m_magnum.Update(_delta); }