Beispiel #1
0
        public override void Initialize()
        {
            base.Initialize();

            m_spriteMap = Game.Content.Load<Texture2D>("Sprites\\skree");

            m_animGraph = new AnimGraph(this);
            m_animGraph.Initialize();

            Rectangle rotateAnimRect = new Rectangle(0, 0, 88, 30);
            AnimatedSprite rotateAnim = new AnimatedSprite(m_spriteMap, rotateAnimRect, 4, 10);
            rotateAnim.Initialize();
            rotateAnim.Scale = new Vector2(3f, 3f);

            Rectangle attackRect = new Rectangle(88, 0, 26, 26);
            AnimatedSprite attackAnim = new AnimatedSprite(m_spriteMap, attackRect, 1, 1);
            attackAnim.Initialize();
            attackAnim.Scale = new Vector2(3f, 3f);

            IAnimGraphNode rotateNode = m_animGraph.AddAnim(rotateAnim);
            IAnimGraphNode attackNode = m_animGraph.AddAnim(attackAnim);

            m_animGraph.AddTransition(rotateNode, MessageType.ActivateSkree, attackNode);
            m_animGraph.AddTransition(attackNode, MessageType.ActivateSkree, rotateNode);

            m_animGraph.SetCurrentNode(rotateNode);
        }
Beispiel #2
0
        public IAnimGraphNode AddAnim(AnimatedSprite anim)
        {
            AnimGraphNode node = new AnimGraphNode(this, anim);

            m_nodeList.Add(node);

            return node;
        }
Beispiel #3
0
        private Entity m_weaponOwner; /// owner of the weapon that fired this projectile

        #endregion Fields

        #region Constructors

        public Projectile(Weapon weapon, Entity weaponOwner, AnimatedSprite projectileAnim, AnimatedSprite explosionAnim)
            : base(IvyGame.Get())
        {
            Position = weapon.Position;
            Direction = weapon.Direction;

            m_weaponOwner = weaponOwner;

            Damage = 50;

            m_projectileAnim = projectileAnim.Copy() as AnimatedSprite;
            m_projectileAnim.OnAnimEnd += OnAnimEnd;

            m_explosionAnim = explosionAnim.Copy() as AnimatedSprite;
            m_explosionAnim.OnAnimEnd += OnAnimEnd;

            m_playingAnim = m_projectileAnim;

            Movable = true;
            Damagable = false;
        }
Beispiel #4
0
 public void AnimatedSpriteEnd(AnimatedSprite anim)
 {
     if ((m_graph.GetCurrentNode() == this) && (m_nextNodeOnAnimEnd != null))
     {
         m_graph.SetCurrentNode(m_nextNodeOnAnimEnd);
         m_nextNodeOnAnimEnd = m_defaultNextNodeOnAnimEnd;
     }
 }
Beispiel #5
0
            public AnimGraphNode(AnimGraph graph, AnimatedSprite anim)
            {
                m_graph = graph;
                Anim = anim;

                Anim.OnAnimEnd += AnimatedSpriteEnd;

                m_nextNodesOnMessage = new Dictionary<MessageType, AnimGraphNode>();
                m_altNextNodesOnAnimEnd = new Dictionary<MessageType, AnimGraphNode>();
            }
Beispiel #6
0
        public override void Initialize()
        {
            Movable = true;
            Damagable = true;

            m_animGraph = new AnimGraph(this);
            m_animGraph.Initialize();

            m_armCannon = new Weapon(this, new Point(10, 10), Direction);
            m_armCannon.Initialize();

            m_landEffect = Game.Content.Load<SoundEffect>("Audio\\samus_land");
            m_rollEffect = Game.Content.Load<SoundEffect>("Audio\\samus_jump_roll");
            m_rollInstance = m_rollEffect.CreateInstance();

            #region Anim Rects
            Rectangle samusTurnRect = new Rectangle(0, 156, 78, 47);
            Rectangle samusWaitRightRect = new Rectangle(0, 203, 140, 45);
            Rectangle samusWaitLeftRect = new Rectangle(0, 248, 140, 45);
            Rectangle samusRunRightRect = new Rectangle(0, 66, 460, 45);
            Rectangle samusRunLeftRect = new Rectangle(0, 111, 460, 45);
            Rectangle samusJumpRollRightRect = new Rectangle(0, 0, 280, 32);
            Rectangle samusJumpRollLeftRect = new Rectangle(0, 33, 280, 32);
            Rectangle samusJumpAscendRightRect = new Rectangle(0, 293, 56, 47);
            Rectangle samusJumpAscendLeftRect = new Rectangle(0, 340, 56, 47);
            Rectangle samusJumpDescendRightRect = new Rectangle(56, 293, 112, 47);
            Rectangle samusJumpDescendLeftRect = new Rectangle(56, 340, 112, 47);
            Rectangle samusJumpLandRightRect = new Rectangle(168, 293, 56, 47);
            Rectangle samusJumpLandLeftRect = new Rectangle(168, 340, 56, 47);
            #endregion

            Texture2D samusMap = Game.Content.Load<Texture2D>("Sprites\\samusMap");

            #region Animation Setup
            AnimatedSprite samusTurnLeftAnim = new AnimatedSprite(samusMap, samusTurnRect, 3, 24f);

            IAnimGraphNode samusTurnLeftNode = m_animGraph.AddAnim(samusTurnLeftAnim);
            samusTurnLeftNode.Anim.Initialize();
            samusTurnLeftNode.Anim.Loop = false;
            samusTurnLeftNode.Anim.Name = "SamusTurnLeft";

            AnimatedSprite samusTurnRightAnim = new AnimatedSprite(samusMap, samusTurnRect, 3, 24f);

            IAnimGraphNode samusTurnRightNode = m_animGraph.AddAnim(samusTurnRightAnim);
            samusTurnRightNode.Anim.Initialize();
            samusTurnRightNode.Anim.Loop = false;
            samusTurnRightNode.Anim.Reverse = true;
            samusTurnRightNode.Anim.Name = "SamusTurnRight";

            IAnimGraphNode samusWaitLeftNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusWaitLeftRect, 5, 6f));
            samusWaitLeftNode.Anim.Initialize();
            samusWaitLeftNode.Anim.Name = "SamusWaitLeft";

            IAnimGraphNode samusWaitRightNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusWaitRightRect, 5, 6f));
            samusWaitRightNode.Anim.Initialize();
            samusWaitRightNode.Anim.Name = "SamusWaitRight";

            IAnimGraphNode samusRunLeftNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusRunLeftRect, 10, 18f));
            samusRunLeftNode.Anim.Initialize();
            samusRunLeftNode.Anim.Name = "SamusRunLeft";

            IAnimGraphNode samusRunRightNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusRunRightRect, 10, 18f));
            samusRunRightNode.Anim.Initialize();
            samusRunRightNode.Anim.Name = "SamusRunRight";

            // Stand & Run code
            m_animGraph.AddTransition(samusWaitLeftNode, MessageType.MoveLeft, samusRunLeftNode);
            m_animGraph.AddTransition(samusRunLeftNode, MessageType.Stand, samusWaitLeftNode);

            m_animGraph.AddTransition(samusWaitRightNode, MessageType.MoveRight, samusRunRightNode);
            m_animGraph.AddTransition(samusRunRightNode, MessageType.Stand, samusWaitRightNode);

            // Turn Code

            // Turning Left to Right
            m_animGraph.AddTransition(samusWaitLeftNode, MessageType.MoveRight, samusTurnRightNode);
            m_animGraph.AddTransition(samusRunLeftNode, MessageType.MoveRight, samusTurnRightNode);
            m_animGraph.AddTransitionOnAnimEnd(samusTurnRightNode, samusRunRightNode);
            m_animGraph.AddTransitionOnAnimEnd(samusTurnRightNode, MessageType.Stand, samusWaitRightNode);
            m_animGraph.AddTransitionOnAnimEnd(samusTurnRightNode, MessageType.MoveRight, samusRunRightNode);

            // Turning Right to Left
            m_animGraph.AddTransition(samusWaitRightNode, MessageType.MoveLeft, samusTurnLeftNode);
            m_animGraph.AddTransition(samusRunRightNode, MessageType.MoveLeft, samusTurnLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusTurnLeftNode, samusRunLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusTurnLeftNode, MessageType.Stand, samusWaitLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusTurnLeftNode, MessageType.MoveLeft, samusRunLeftNode);

            // Change turn direction
            m_animGraph.AddTransition(samusTurnLeftNode, MessageType.MoveRight, samusTurnRightNode);
            m_animGraph.AddTransition(samusTurnRightNode, MessageType.MoveLeft, samusTurnLeftNode);

            IAnimGraphNode samusJumpRollLeftNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusJumpRollLeftRect, 8, 16f));
            samusJumpRollLeftNode.Anim.Initialize();

            IAnimGraphNode samusJumpRollRightNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusJumpRollRightRect, 8, 16f));
            samusJumpRollRightNode.Anim.Initialize();

            IAnimGraphNode samusJumpAscendLeftNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusJumpAscendLeftRect, 2, 16f));
            samusJumpAscendLeftNode.Anim.Initialize();
            samusJumpAscendLeftNode.Anim.Loop = false;

            IAnimGraphNode samusJumpAscendRightNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusJumpAscendRightRect, 2, 16f));
            samusJumpAscendRightNode.Anim.Initialize();
            samusJumpAscendRightNode.Anim.Loop = false;

            IAnimGraphNode samusJumpDescendLeftNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusJumpDescendLeftRect, 4, 16f));
            samusJumpDescendLeftNode.Anim.Initialize();
            samusJumpDescendLeftNode.Anim.Loop = false;

            IAnimGraphNode samusJumpDescendRightNode = m_animGraph.AddAnim(
                new AnimatedSprite(samusMap, samusJumpDescendRightRect, 4, 16f));
            samusJumpDescendRightNode.Anim.Initialize();
            samusJumpDescendRightNode.Anim.Loop = false;

            AnimatedSprite landLeftAnim = new AnimatedSprite(samusMap, samusJumpLandLeftRect, 2, 16f);

            IAnimGraphNode samusJumpRollLandLeftNode = m_animGraph.AddAnim(landLeftAnim);
            samusJumpRollLandLeftNode.Anim.Initialize();
            samusJumpRollLandLeftNode.Anim.Loop = false;

            IAnimGraphNode samusJumpDescendLandLeftNode = m_animGraph.AddAnim(landLeftAnim);
            samusJumpDescendLandLeftNode.Anim.Initialize();
            samusJumpDescendLandLeftNode.Anim.Loop = false;

            AnimatedSprite landRightAnim = new AnimatedSprite(samusMap, samusJumpLandRightRect, 2, 16f);

            IAnimGraphNode samusJumpRollLandRightNode = m_animGraph.AddAnim(landRightAnim);
            samusJumpRollLandRightNode.Anim.Initialize();
            samusJumpRollLandRightNode.Anim.Loop = false;

            IAnimGraphNode samusJumpDescendLandRightNode = m_animGraph.AddAnim(landRightAnim);
            samusJumpDescendLandRightNode.Anim.Initialize();
            samusJumpDescendLandRightNode.Anim.Loop = false;

            // Jump Ascend & Descend
            m_animGraph.AddTransition(samusRunLeftNode, MessageType.Jump, samusJumpRollLeftNode);
            m_animGraph.AddTransition(samusRunRightNode, MessageType.Jump, samusJumpRollRightNode);

            m_animGraph.AddTransition(samusWaitLeftNode, MessageType.Jump, samusJumpAscendLeftNode);
            m_animGraph.AddTransition(samusWaitRightNode, MessageType.Jump, samusJumpAscendRightNode);

            m_animGraph.AddTransition(samusJumpAscendLeftNode, MessageType.Fall, samusJumpDescendLeftNode);
            m_animGraph.AddTransition(samusJumpAscendRightNode, MessageType.Fall, samusJumpDescendRightNode);

            // Jump Turn
            m_animGraph.AddTransition(samusJumpRollLeftNode, MessageType.MoveRight, samusJumpRollRightNode);
            m_animGraph.AddTransition(samusJumpRollRightNode, MessageType.MoveLeft, samusJumpRollLeftNode);
            m_animGraph.AddTransition(samusJumpAscendLeftNode, MessageType.MoveRight, samusJumpAscendRightNode);
            m_animGraph.AddTransition(samusJumpAscendRightNode, MessageType.MoveLeft, samusJumpAscendLeftNode);
            m_animGraph.AddTransition(samusJumpDescendLeftNode, MessageType.MoveRight, samusJumpDescendRightNode);
            m_animGraph.AddTransition(samusJumpDescendRightNode, MessageType.MoveLeft, samusJumpDescendLeftNode);

            // Land
            m_animGraph.AddTransition(samusJumpRollLeftNode, MessageType.Land, samusJumpRollLandLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpRollLandLeftNode, samusRunLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpRollLandLeftNode, MessageType.Stand, samusWaitLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpRollLandLeftNode, MessageType.MoveLeft, samusRunLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpRollLandLeftNode, MessageType.MoveRight, samusTurnRightNode);

            m_animGraph.AddTransition(samusJumpDescendLeftNode, MessageType.Land, samusJumpDescendLandLeftNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpDescendLandLeftNode, samusWaitLeftNode);

            m_animGraph.AddTransition(samusJumpRollRightNode, MessageType.Land, samusJumpRollLandRightNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpRollLandRightNode, samusRunRightNode);

            m_animGraph.AddTransition(samusJumpDescendRightNode, MessageType.Land, samusJumpDescendLandRightNode);
            m_animGraph.AddTransitionOnAnimEnd(samusJumpDescendLandRightNode, samusWaitRightNode);

            m_animGraph.SetCurrentNode(samusWaitRightNode);
            #endregion

            base.Initialize();
        }
Beispiel #7
0
        public AnimatedSprite Copy()
        {
            AnimatedSprite clone = new AnimatedSprite(m_texture, m_animRect, m_frameCount, m_framesPerSecond);
            clone.Loop = Loop;
            clone.Reverse = Reverse;
            clone.Scale = new Vector2(Scale.X, Scale.Y);

            return clone;
        }
Beispiel #8
0
        /// <summary>
        /// Allows the game component to perform any initialization it needs to before starting
        /// to run.  This is where it can query for any required services and load content.
        /// </summary>
        public override void Initialize()
        {
            m_weaponMap = Game.Content.Load<Texture2D>("Sprites\\samusMap");
            m_fireEffect = Game.Content.Load<SoundEffect>("Audio\\weapon_fire");

            m_projectileAnim = new AnimatedSprite(m_weaponMap, m_projectileRect, 2, 10f);
            m_projectileAnim.Initialize();

            m_explosionAnim = new AnimatedSprite(m_weaponMap, m_explosionRect, 6, 18f);
            m_explosionAnim.Initialize();
            m_explosionAnim.Loop = false;

            base.Initialize();
        }
Beispiel #9
0
 public void OnAnimEnd(AnimatedSprite anim)
 {
     Alive = false;
 }
Beispiel #10
0
        private void Explode()
        {
            Collidable = false;
            m_projectileAnim.Stop();
            m_playingAnim = m_explosionAnim;
            m_playingAnim.Reset();
            m_playingAnim.Play();

            Direction = Vector2.Zero;
        }