private void OnCollisionEnter(Collision collision)
    {
        Particles.Instance.CommenceShellExplosion(transform);
        bool fireAmmo = BulletService.Instance.fireAmmoBool;

        if (collision.gameObject.tag.Equals("Enemy"))
        {
            Particles.Instance.CommenceTankExplosion(collision.transform);
            EnemyView enemy = collision.gameObject.GetComponent <EnemyView>();
            enemy.ModifyHealth(-damage);
        }
        if (collision.gameObject.tag.Equals("Player"))
        {
            Particles.Instance.CommenceTankExplosion(collision.transform);
            TankView player = collision.gameObject.GetComponent <TankView>();
            player.ModifyHealth(-damage);
        }
        if (collision.gameObject.tag.Equals("Environment"))
        {
            if (fireAmmo)
            {
                Destroy(collision.gameObject);
            }
            Destroy(gameObject);
        }
        gameObject.SetActive(false);
    }
 public TankMainWeapon(WeaponView view, IWeaponHolder weaponHolder, TankView tankView)
 {
     this.view = weaponFactory.Create("MainWeapon");
     view.Transform.position = tankView.TurretSpawnPoint.position;
     this.weaponHolder       = weaponHolder;
     weaponHolder.AddWeapon(this);
 }
示例#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);
        }
 public override void OnEnterState()
 {
     base.OnEnterState();
     targetPlayer = TankService.Instance.GetCurrentPlayer();
     SetNavmeshAgent();
     enemyView.SetTankColor(changedColor);
     //InvokeRepeating("Fire", 1f, enemyView.GetFireRate());
 }
示例#5
0
    public void ReplaceTankView(TankView newValue)
    {
        var index     = GameComponentsLookup.TankView;
        var component = CreateComponent <TankViewComponent>(index);

        component.value = newValue;
        ReplaceComponent(index, component);
    }
示例#6
0
 public override void OnEnterState()
 {
     base.OnEnterState();
     enemyView.SetTankColor(changedColor);
     target       = TankService.Instance.GetCurrentPlayer();
     newDirection = target.transform.position - transform.position;
     InvokeRepeating("Fire", 1f, enemyView.GetFireRate());
 }
示例#7
0
 public TankController(TankModel tankModel, TankView tankPrefab)
 {
     TankView  = GameObject.Instantiate <TankView>(tankPrefab);
     TankModel = tankModel;
     TankView.InitTankController(this);
     //Debug.Log("Tank Type"+TankType.);
     //TankView.Speed = tankModel.Speed;
     //TankView.Health = tankModel.Health;
     //TankView.Type = tankModel.Type;
 }
    public TankController(TankModel tankModel, TankView tankPrefab)
    {
        TankModel = tankModel;

        //    GameObject go = GameObject.Instantiate(tankPrefab);
        //    TankView = go.GetComponent<TankView>();

        TankView = GameObject.Instantiate <TankView>(tankPrefab);
        Debug.Log("Tank view controller created", TankView);
    }
示例#9
0
    public TankController(TankModel model, TankView prefab)
    {
        tankModel = model;
        tankView  = GameObject.Instantiate <TankView>(prefab);

        //X location where new tank is spawned
        Debug.Log("Tank type -" + model.tankType);
        tankView.Init(this);
        //tankView.SetTankPos(4);
    }
示例#10
0
    IEnumerator RapidAmmoTime(TankView tankView, float timePeriod)
    {
        rapidAmmoBool = false;
        float delay = tankView.shootDelay;

        tankView.shootDelay = 0;
        yield return(new WaitForSeconds(timePeriod));

        tankView.shootDelay = delay;
        rapidAmmoBool       = true;
    }
示例#11
0
        private void CameraInit(TankView tankView)
        {
            CameraController.Ctx camCtx = new CameraController.Ctx
            {
                target       = tankView.gameObject,
                cameraOffset = new Vector3(0, 15, -20),
                dampTime     = _config.cameraDampTime,
            };
            CameraController cameraController = cam.AddComponent <CameraController>() as CameraController;

            cameraController.SetCtx(camCtx);
        }
 private void GetPLayerAudioSource()
 {
     player = TankService.Instance.GetCurrentPlayer();
     if (player != null)
     {
         playerSource = player.GetComponent <AudioSource>();
     }
     else
     {
         Debug.Log("player is null");
     }
 }
示例#13
0
    IEnumerator RapidFireAmmoTime(TankView tankView, float timePeriod)
    {
        rapidAmmoBool = false;
        float delay = tankView.shootDelay;

        tankView.shootDelay = 0;
        BulletService.Instance.fireAmmoBool = true;
        yield return(new WaitForSeconds(timePeriod));

        BulletService.Instance.fireAmmoBool = false;
        tankView.shootDelay = delay;
        rapidAmmoBool       = true;
    }
 private void GetPLayer()
 {
     player = TankService.Instance.GetCurrentPlayer();
     if (player != null)
     {
         player        = TankService.Instance.GetCurrentPlayer();
         posDifference = player.transform.position - transform.position;
     }
     else
     {
         Debug.Log("player is null");
     }
 }
示例#15
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.CompareTag("Player"))
     {
         if (other.gameObject.GetComponent <TankView>() != null)
         {
             UIManager.Instance.HealthMode();
             TankView tankView = other.gameObject.GetComponent <TankView>();
             tankView.ModifyHealth(+incrementHealthAmt);
             gameObject.SetActive(false);
         }
     }
 }
示例#16
0
 private void FixedUpdate()
 {
     if (player == null)
     {
         player = FindObjectOfType <TankView>();
     }
     else
     {
         MainCamera.transform.LookAt(player.transform);
         TPPCam.m_Follow = player.transform;
         TPPCam.m_LookAt = player.transform;
     }
 }
        public TankController(TankModel tankModel, TankView tankPrefab)
        //public TanController(TankModel tankModel, GameObject tankPrefab)
        {
            TankModel = tankModel;

            //GameObject go = GameObject.Instantiate(tankPrefab);
            //TankView = go.GetComponent<TankView>();

            TankView = GameObject.Instantiate <TankView>(tankPrefab);
            TankView.SetController(this);
            TankModel.SetTankController(this);
            TankView.SetSpeed(TankModel.Speed);
            TankView.SetTurn(TankModel.Turn);
            TankView.Sethealth(TankModel.Health);
        }
示例#18
0
        private void CreateTanks()
        {
            List <FieldObject> freeCells =
                field.Grounds.Where(g => g.Position.X != Kolobok.Position.X &&
                                    g.Position.Y != Kolobok.Position.Y)
                .ToList();

            for (int i = 0; i < field.CountEnemies; i++)
            {
                FieldObject freeCell = freeCells[random.Next(freeCells.Count)];
                field.Tanks.Add(new Tank(freeCell.Position.X, freeCell.Position.Y, FieldObjectType.Tank));
                freeCells.Remove(freeCell);
            }
            tankView = new TankView(field.Tanks);
        }
示例#19
0
        public ITank CreateTank(bool forPlayer, GameMode mode, List<GameItemType> playerItems)
        {
            ITank newTank = CreateTank(forPlayer, mode);
            TankView tankView = (newTank as TankController).View;

            IUnitSkinDecorator skinDecorator = new TankSkinDecorator(_decorationCatalog, tankView);
            IUnitSkinDecorator helmetDecorator = new TankHelmetDecorator(_unitHelmetCatalog, tankView);

            foreach (var itemType in playerItems)
            {
                skinDecorator.ApplySkinItem(itemType);
                helmetDecorator.ApplySkinItem(itemType);
            }

            return newTank;
        }
示例#20
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.CompareTag("Player"))
     {
         if (other.gameObject.GetComponent <TankView>() != null)
         {
             UIManager.Instance.RampageMode();
             TankView tankView = other.gameObject.GetComponent <TankView>();
             if (rapidAmmoBool)
             {
                 StartCoroutine(RapidFireAmmoTime(tankView, rampageTime));
             }
             gameObject.SetActive(false);
         }
     }
 }
示例#21
0
        private void CreateTank(int percent)
        {
            if (_objects.Tanks.Count < 3 && rnd.Next(100) <= percent)
            {
                int x    = rnd.Next(_view.MapWidth - 30);
                int y    = rnd.Next(_view.MapHeight - 30);
                var tank = new TankView(x, y, (ushort)rnd.Next(4), 30, 30);

                // Если он на свободном месте генерируется
                if (_objects.Walls.Find(wall => ObjectCollision(wall, tank)) == null &&
                    ObjectCollision(_objects.Player, tank) == false &&
                    _objects.Water.Find(water => ObjectCollision(water, tank)) == null &&
                    _objects.Tanks.Find(tnk => tnk != tank ? ObjectCollision(tnk, tank) : false) == null)
                {
                    _objects.Tanks.Add(tank);
                }
            }
        }
示例#22
0
        private void TankInit()
        {
            TankView view = Instantiate(tankView, new Vector3(0, 1, 0), Quaternion.identity);

            TankView.Ctx tankViewCtx = new TankView.Ctx
            {
                tankForwardSpeed = _config.tankForwardSpeed,
                tankBackSpeed    = _config.tankBackSpeed,
                tankRotateSpeed  = _config.tankRotateSpeed,
            };
            view.SetCtx(tankViewCtx);
            Tank.Ctx tankCtx = new Tank.Ctx
            {
                tankView        = view,
                horizontalAngle = _config.horizontalAngle,
                reloadTime      = _config.reloadTime,
                signHit         = _signPosition.SignPositon,
                verticalAngle   = _config.verticalAngle,
            };
            _tank = new Tank(tankCtx);
            ControlInit(view, _tank, _tank.GetGun());
            CameraInit(view);
        }
示例#23
0
        private void ControlInit(TankView tankView, Tank tank, Gun gun)
        {
            KeyboardController control = tankView.gameObject.AddComponent <KeyboardController>() as KeyboardController;

            control.SetControl(tank, gun);
        }
示例#24
0
 private void Form1_Load(object sender, EventArgs e)
 {
     _tankView = new TankView(_areaView.TankNumber);
     _wallView = new WallView(_areaView.AreaSize.Height, _areaView.AreaSize.Width);
     tankPoint = TankStart(1);
 }
示例#25
0
 public void OnBulletCollideEvent(TankView T1, TankView T2)
 {
     OnBulletCollide?.Invoke(T1, T2);
 }
示例#26
0
 public TankController(TankModel tankModel, TankView tankPrefab)
 {
     TankModel = tankModel;
     TankView  = GameObject.Instantiate <TankView>(tankPrefab);
     Debug.Log("tankview created", TankView);
 }
示例#27
0
 public void followPlayerCamera()
 {
     tankView = TankService.Instance.tankLists[0].TankView;
 }
示例#28
0
    //[SerializeField]
    //protected Color color;

    private void Awake()
    {
        tankView = GetComponent <TankView>();
    }
示例#29
0
 public TankSkinDecorator(IUnitsSkinCatalog decorator, TankView tankView)
 {
     _decorator = decorator;
     _tankView = tankView;
 }
示例#30
0
 public void followPlayerAchievement()
 {
     this.tankview = TankService.Instance.tankLists[0].TankView;
 }