Ejemplo n.º 1
0
        public override bool getCrashEvent(GameObject go, GameDirection cidirection)
        {
            if ((go is Enemy && go != this) || go is Mushroom)
                return true;

            if (cidirection == GameDirection.Top)
            {
                switch (turtleMode)
                {
                    case TurtleMode.Normal:
                        TurtleMode = TurtleMode.Small;
                        break;
                    case TurtleMode.Small:
                        TurtleMode = TurtleMode.SmallRunning;
                        break;
                    case TurtleMode.SmallRunning:
                        TurtleMode = TurtleMode.Small;
                        break;
                }
                startSmall = DateTime.Now;
                World.MGO.Move(MoveType.jumpTop, -1, false, GameInstruction.Nothing);

                return true;
            }
            else if (cidirection == GameDirection.Left || cidirection == GameDirection.Right)
            {
                if (turtleMode == TurtleMode.Small)
                {
                    turtleMode = TurtleMode.SmallRunning;
                    direction = cidirection == GameDirection.Left ? GameDirection.Right : GameDirection.Left;

                    return true;
                }
            }

            return false;
        }
Ejemplo n.º 2
0
        public override void Check(out Dictionary<string, float> newpos)
        {
            base.Check(out newpos);
            float newtop = newpos["top"];
            float newleft = newpos["left"];

            // falling?
            bool falling = GamePhysics.Falling(World.StickyElements, World.MovingElements, World.Enemies, newtop, newleft, this);

            if (falling)
                newtop += Globals.ObjFalling * GameAI.FrameFactor;

            if (turtleMode == TurtleMode.Small && (DateTime.Now - startSmall).Seconds >= 3)
            {
                TurtleMode = TurtleMode.Normal;
            }

            // direction
            if (!falling)
            {
                float move = 0;

                switch (turtleMode)
                {
                    case TurtleMode.Normal: move = Globals.Turtle.Normal * GameAI.FrameFactor; break;
                    case TurtleMode.Small: move = 0; break;
                    case TurtleMode.SmallRunning: move = Globals.Turtle.Fast * GameAI.FrameFactor; break;
                }

                if (direction == GameDirection.Right)
                    newleft += move;
                else
                    newleft -= move;
            }

            // check if direction is ok
            GamePhysics.CrashDetection(this, World.StickyElements, World.MovingElements, getEvent, ref newtop, ref newleft);
            Enemy crashedInEnemy = GamePhysics.CrashEnemy(this, World.Enemies, getEvent, ref newtop, ref newleft);

            bool removedEnemy = false;
            if (turtleMode == TurtleMode.SmallRunning && crashedInEnemy != null && crashedInEnemy.turtleCanRemove)
            {
                base.Remove(crashedInEnemy);
                removedEnemy = true;
            }

            // run in standing mgo?
            GameDirection _direction;
            if (GamePhysics.SingleCrashDetection(this, World.MGO, out _direction, ref newtop, ref newleft, true) && !getCrashEvent(this, _direction))
                World.MGO.getEvent(GameEvent.crashInEnemy, new Dictionary<GameEventArg, object>());

            if (newtop != 0)
                Top += newtop;
            if (newleft != 0)
                Left += newleft;

            if (!falling && (newleft == 0 || (crashedInEnemy != null && !removedEnemy)))
            {
                if (turtleMode == TurtleMode.Normal || turtleMode == TurtleMode.SmallRunning)
                    direction = direction == GameDirection.Left ? GameDirection.Right : GameDirection.Left;
            }

            // dead?
            if (Top > World.Settings.LevelHeight)
                base.Remove();
        }