Exemplo n.º 1
0
        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);
        }