Пример #1
0
        public Entity CreateBullet(Entity owner, int level = 0)
        {
            var myvars         = vars.Bullet[level];
            var entity         = CreateEntity(AntEnum.Parse <EntityType>(myvars[0].ToString()));
            var clip           = new Clip(new Sprite(textureManager.Get(Images.Instance.GameTextures), cellSize, Layers.Bullet), new Vector2(level * 120, 138), 4);
            var position       = owner.Get <Position>();
            var bulletPosition = new Position(position.X, position.Y);
            var team           = General.EntityTypeEquals(EntityType.GreenTank, owner.Name) ? EntityType.RedTank : EntityType.GreenTank;
            var velocity       = Vector2.Zero;
            var speed          = myvars[1];

            var offset = new Vector2(level == 0 || level == 3 ? 0 : level == 1 || level == 4 ? 360 : 720, 0);

            switch (position.direction)
            {
            case Direction.Up: clip.SetFrame(0); velocity.Y = -speed; break;

            case Direction.Down: clip.SetFrame(2); velocity.Y = speed; break;

            case Direction.Left: clip.SetFrame(3); velocity.X = -speed; break;

            case Direction.Right: clip.SetFrame(1); velocity.X = speed; break;
            }

            return(entity
                   .Add(bulletPosition)
                   .Add(new Health(myvars[2]))
                   .Add(new Damage(myvars[2]))
                   .Add(new Motion(velocity))
                   .Add(new Collision(cellSize, 5, new[] { EntityType.Wall, EntityType.SteelWall, EntityType.Tree, EntityType.Bullet, team }))
                   .Add(new Bullet(owner))
                   .Add(new Display(clip, -3, -3))
                   .Add(new DeathOnTime(10000))
                   .Add(new ActionAfterDeath(() => CreateBuletExplosion(bulletPosition.position, offset))));
        }
Пример #2
0
        public override Display GetView()
        {
            var animManager = new AnimationManager();
            var frameSize   = new Vector2(30, 36);
            var sprite      = new Sprite(textureManager.Get(Images.Instance.GameTextures), frameSize, Layers.Tank);

            animManager
            .Add(StandUp, new Clip(sprite, new Vector2(240, 72)))
            .Add(StandDown, new Clip(sprite, new Vector2(0, 72)))
            .Add(StandLeft, new Clip(sprite, new Vector2(120, 72)))
            .Add(StandRight, new Clip(sprite, new Vector2(360, 72)))
            .Add(TurnLeftDown, new Clip(sprite, new Vector2(0, 72), 5, delay, true, true))
            .Add(TurnLeftUp, new Clip(sprite, new Vector2(120, 72), 5, delay, true))
            .Add(TurnRightDown, new Clip(sprite, new Vector2(360, 72), 5, delay, true))
            .Add(TurnRightUp, new Clip(sprite, new Vector2(240, 72), 5, delay, true, true))
            .Add(TurnUpLeft, new Clip(sprite, new Vector2(120, 72), 5, delay, true, true))
            .Add(TurnUpRight, new Clip(sprite, new Vector2(240, 72), 5, delay, true))
            .Add(TurnDownLeft, new Clip(sprite, new Vector2(0, 72), 5, delay, true))
            .Add(TurnDownRight, new Clip(sprite, new Vector2(360, 72), 5, delay, true, true))
            .Add(TurnUpDown, new Clip(sprite, new Vector2(240, 72), 9, delay, true))
            .Add(TurnDownUp, new Clip(sprite, new Vector2(0, 72), 9, delay, true))
            .Add(TurnLeftRight, new Clip(sprite, new Vector2(120, 72), 9, delay, true))
            .Add(TurnRightLeft, new Clip(sprite, new Vector2(360, 72), 9, delay, true))
            .Change(AntEnum.Parse <Animations>(((int)direction).ToString()));

            return(new Display(animManager, 0, -3));
        }
Пример #3
0
        public Entity CreateTank(float x, float y, int level = 0)
        {
            var entity   = CreateEntity(EntityType.RedTank);
            var position = new Position(x, y, AntEnum.Parse <Direction>(r.Next(1, 5).ToString()));
            var myvars   = vars.LightTank[level];
            var view     = new TankView(myvars[5], 0, position.direction);

            var listFsm   = new Dictionary <string, EntityStateMachine>();
            var moveFSM   = new EntityStateMachine(entity);
            var aiFSM     = new EntityStateMachine(entity);
            var motionFSM = new EntityStateMachine(entity);

            moveFSM.CreateState(States.Stand).Add <Stand>().WithInstance(new Stand());
            moveFSM.CreateState(States.Turn).Add <Turn>().WithInstance(new Turn());
            moveFSM.CreateState(States.Walk).Add <Walk>().WithInstance(new Walk());
            moveFSM.ChangeState(States.Stand);

            aiFSM.CreateState(States.Idle).Add <Idle>().WithInstance(new Idle(7));
            aiFSM.CreateState(States.Pursuit).Add <Pursuit>().WithInstance(new Pursuit());
            aiFSM.CreateState(States.Attack).Add <Attack>().WithInstance(new Attack());
            aiFSM.ChangeState(States.Idle);

            var addSpeed = Mathf.FromPercent(0.5f, myvars[0]);

            motionFSM.CreateState(States.Fast).Add <Controls>()
            .WithInstance(new Controls(new Vector2(myvars[0] + addSpeed)));
            motionFSM.CreateState(States.Slow).Add <Controls>()
            .WithInstance(new Controls(new Vector2(myvars[0] - addSpeed)));
            motionFSM.CreateState(States.Normal).Add <Controls>()
            .WithInstance(new Controls(new Vector2(myvars[0])));
            motionFSM.ChangeState(States.Normal);

            listFsm.Add("MoveFSM", moveFSM);
            listFsm.Add("AiFSM", aiFSM);
            listFsm.Add("MotionFSM", motionFSM);

            entity
            .Add(position)
            .Add(view.GetView())
            .Add(new Health(myvars[2], myvars[4]))
            .Add(new Damage(100))
            .Add(new Tank())
            .Add(new FSM(listFsm))
            .Add(new AI(360, 210, new[] { EntityType.GreenTank }))
            .Add(new Gun(myvars[1], myvars[3]))
            .Add(new Collision(cellSize, 15))
            .Add(new Motion(Vector2.Zero, r.Next(CellType.Segment, 10000)))
            .Add(new ActionAfterDeath(() =>
            {
                gameField.ClearCell(position.prevCell);
                CreateEnemyExplosion(position.position);
                CreateQuake();
            }));

            CreateRedOverlay(entity);
            CreateGreenHealthBar(entity);

            return(entity);
        }
Пример #4
0
        public Entity CreateTower(float x, float y, int level = 0)
        {
            var entity   = CreateEntity(EntityType.RedTank);
            var listFsm  = new Dictionary <string, EntityStateMachine>();
            var moveFSM  = new EntityStateMachine(entity);
            var aiFSM    = new EntityStateMachine(entity);
            var position = new Position(x, y, AntEnum.Parse <Direction>(r.Next(1, 5).ToString()));
            var myvars   = vars.Tower[level];
            var view     = new TowerView(myvars[5], position.direction);

            moveFSM.CreateState(States.Stand).Add <Stand>().WithInstance(new Stand());
            moveFSM.CreateState(States.Turn).Add <Turn>().WithInstance(new Turn());
            moveFSM.ChangeState(States.Stand);

            aiFSM.CreateState(States.Idle).Add <Idle>().WithInstance(new Idle(10));
            aiFSM.CreateState(States.Attack).Add <Attack>().WithInstance(new Attack());
            aiFSM.ChangeState(States.Idle);

            listFsm.Add("MoveFSM", moveFSM);
            listFsm.Add("AiFSM", aiFSM);

            entity
            .Add(position)
            .Add(view.GetView())
            .Add(new Health(myvars[2], myvars[4]))
            .Add(new Damage(100))
            .Add(new Tank())
            .Add(new FSM(listFsm))
            .Add(new AI(210, 210, new[] { EntityType.GreenTank }))
            .Add(new Gun(myvars[1], myvars[3]))
            .Add(new Collision(cellSize, 15))
            .Add(new Motion(Vector2.Zero, r.Next(CellType.Segment, 10000)))
            .Add(new ActionAfterDeath(() =>
            {
                gameField.ClearCell(position.position.Divide(cellSize.X));
                CreateEnemyExplosion(position.position);
                CreateQuake();
            }));

            CreateRedOverlay(entity);
            CreateGreenHealthBar(entity);
            AddCellToMap(x, y, CellType.Tower);

            return(entity);
        }