Example #1
0
        public override void Process(Entity entity)
        {
            SpriteComponent sprite = entity.GetComponent <SpriteComponent>();

            if (sprite.Name == null)
            {
                sprite.Index   = 0;
                sprite.Texture = null;
                sprite.Speed   = new double[1] {
                    0
                };
                sprite.Anchor = Vector2.Zero;
                return;
            }

            if (sprite.Name == sprite.CurrentName)
            {
                return;
            }

            Texture2D  newTexture = entity.GetComponent <ContentManagerComponent>().ContentManager.Load <Texture2D>(sprite.Name);
            MetaSprite metaSprite = MetaSprite.MetaSpriteDict[sprite.Name];

            sprite.Index   = 0;
            sprite.Texture = newTexture;
            sprite.Speed   = metaSprite.Speed;
            sprite.Anchor  = metaSprite.Anchor;
        }
Example #2
0
        protected override void LoadContent()
        {
            base.LoadContent();
            this.spriteBatch = new SpriteBatch(this.GraphicsDevice);
            EntitySystem.BlackBoard.SetEntry <SpriteBatch>("SpriteBatch", this.spriteBatch);
            EntitySystem.BlackBoard.SetEntry <Map>("Map", Content.Load <Map>("Test"));
            MetaSprite.LoadContent(this.Content);

            // Link.
            Entity link = this.world.CreateEntity();

            link.AddComponent(new ContentManagerComponent(this.Content));
            link.AddComponent(new EventSenderComponent());
            link.AddComponent(new SpriteComponent());
            link.AddComponent(new PositionComponent(new Vector2(250, 100)));  // Default position.
            link.AddComponent(new SpeedComponent(Vector2.Zero));
            link.AddComponent(new GoalSpeedComponent(Vector2.Zero, Vector2.Zero));
            link.AddComponent(new AABBComponent(new Rectangle(8, 49, 16, 49)));  // AABB boundaries.
            link.AddComponent(new PlayerInputComponent());
            link.AddComponent(new InputIntentComponent());
            link.AddComponent(new BinaryDirectionComponent());
            link.AddComponent(new FSMComponent(
                                  new Dictionary <string, IComponent>()
            {
                // walkSpeed is a separate component because two states have to access it.
                { "walkSpeed", new LinkWalkSpeedStateComponent(60) },     // Max walking speed.
                { "onGround", new LinkOnGroundStateComponent(370, 270) }, // Running and walking acceleration/deceleration, jump force.
                { "idle", new LinkIdleStateComponent() },
                { "walk", new LinkWalkStateComponent() },
                { "run", new LinkRunStateComponent(150) },          // Max running speed.
                { "onAir", new LinkOnAirStateComponent(450, 630) }, // Max vertical speed and gravity.
            },
                                  new Dictionary <string, List <string> >()
            {
                { "idle", new List <string>()
                  {
                      "onGround", "idle"
                  } },
                { "walk", new List <string>()
                  {
                      "onGround", "walk", "walkSpeed"
                  } },
                { "run", new List <string>()
                  {
                      "onGround", "run"
                  } },
                { "onAir", new List <string>()
                  {
                      "onAir", "walkSpeed"
                  } }
            }, link, "idle"));

            // Map.
            Entity map = this.world.CreateEntity();

            map.AddComponent(new MapComponent(EntitySystem.BlackBoard.GetEntry <Map>("Map")));
        }