Exemplo n.º 1
0
        public override void Touch(LevelObject obj)
        {
            if (mBroken)
            {
                return;
            }

            Character character = obj as Character;

            if (character == null)
            {
                return;
            }

            if (character.VelocityY < 0)
            {
                if (character.DisplacementY - 16 < DisplacementY)
                {
                    return;
                }
                character.VelocityY = -character.VelocityY;
                VelocityY           = -384;
                if (mRoutineSecondary != 0)
                {
                    return;
                }
                mRoutineSecondary = 4;
            }
            else
            {
                // if sidekick, return

                if (character.Anim != CharacterAnimation.Roll)
                {
                    return;
                }

                character.VelocityY = -character.VelocityY;
                if (mRoutine != 4)
                {
                    mRoutine = 4;
                    mBraker  = character;
                }
            }
        }
Exemplo n.º 2
0
        public void Restart()
        {
            mObjects = new LevelObjectManager();
            mSounds.Clear();

            mPlayerBoundary  = new Microsoft.Xna.Framework.Rectangle(16, 0, 11264 - 16, 1024);
            mVisibleBoundary = new Microsoft.Xna.Framework.Rectangle(0, 0, 10976, 1024);

            mObjects.Clear();
            foreach (LevelObjectDefinition def in mObjectDefinitions)
            {
                LevelObject obj = LevelObject.Create(mGame, this, def);
                if (obj != null)
                {
                    mObjects.Add(obj);
                }
            }
        }
Exemplo n.º 3
0
        public override void Interact(LevelObject obj)
        {
            Character character = obj as Character;

            if (character == null)
            {
                return;
            }

            // Check if in the air
            if ((character.Status & CharacterState.Airborne) == 0)
            {
                // Check if still on object
                int d0 = character.DisplacementX - DisplacementX + character.RadiusX + RadiusX;
                if (d0 >= 0 && d0 < (character.RadiusX + RadiusX) * 2)
                {
                    UpdateCharacter(character);
                    return;
                }
            }

            UnlandCharacter(character);
        }
Exemplo n.º 4
0
 public virtual void Interact(LevelObject obj)
 {
 }
Exemplo n.º 5
0
 public virtual void Touch(LevelObject obj)
 {
 }
Exemplo n.º 6
0
        public override void Touch(LevelObject obj)
        {
            Character character = obj as Character;

            if (character == null)
            {
                return;
            }

            // Is character is not invincible
            if ((character.StatusSecondary & 2) == 0)
            {
                if (character.Anim != CharacterAnimation.Spindash)
                {
                    if (character.Anim != CharacterAnimation.Roll)
                    {
                        character.Hurt(this);
                        return;
                    }
                }
            }

            int[] ChainPoints = new int[] { 100, 200, 500, 1000 };
            int   points      = ChainPoints[Math.Min(character.Player.ChainBonusCounter, 3)];

            if (character.Player.ChainBonusCounter >= 16)
            {
                points = 10000;
            }

            character.Player.AddPoints(points);
            character.Player.ChainBonusCounter++;

            // Add animal
            Animal animalObject = new Animal(Game, Level);

            animalObject.DisplacementX = DisplacementX;
            animalObject.DisplacementY = DisplacementY;
            Level.Objects.Add(animalObject);

            // Add explosion object
            Explosion explosionObject = new Explosion(Game, Level);

            explosionObject.DisplacementX = DisplacementX;
            explosionObject.DisplacementY = DisplacementY;
            Level.Objects.Add(explosionObject);

            // This object is now finished
            Finished = true;

            // Character hit enemy from below
            if (character.VelocityY < 0)
            {
                character.VelocityY += 256;
                return;
            }

            // Character is below enemy but falling down
            if (character.DisplacementY >= DisplacementY)
            {
                character.VelocityY -= 256;
                return;
            }

            // Rebound the character 1 : 1
            character.VelocityY = -character.VelocityY;
        }