IEnumerator RunSequence()
    {
        mCanvas.SetActive(false);
        mCanvas.SetActive(false);
        while (CheckMoving())
        {
            yield return(null);
        }
        mCanvas.SetActive(true);
        mInMotion = false;
        mCamera.StartGameplayCamera();
        GameObject.Find("Enemies").GetComponent <EnemyController>().BuildMovement();

        // Fix hitboxes for player clicks
        foreach (GameObject FriendlyUnit in mFriendlyUnits)
        {
            if (FriendlyUnit != null)
            {
                FriendlyUnit.GetComponent <BoxCollider2D>().size  = new Vector2(.95f, .95f);
                FriendlyUnit.GetComponent <Movement>().mMoveCount = 0;
            }
        }

        foreach (GameObject EnemyUnit in mEnemyUnits)
        {
            if (EnemyUnit != null)
            {
                EnemyUnit.GetComponent <BoxCollider2D>().size  = new Vector2(.95f, .95f);
                EnemyUnit.GetComponent <Movement>().mMoveCount = 0;
            }
        }
    }
Пример #2
0
    public override void UseAbility()
    {
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 1000))
        {
            var        hitLocation = hit.point;
            GameObject particle    = Instantiate(particlePrefab, hitLocation + Vector3.up, Quaternion.Euler(-90, 0, 0));
            AudioManager.Instance.PlayFreeze();
            Destroy(particle, freezeDuration);

            var cast = Physics.OverlapSphere(hitLocation, 5);
            foreach (var item in cast)
            {
                EnemyUnit enemyUnit = item.GetComponent <EnemyUnit>();
                if (enemyUnit != null)
                {
                    enemyUnit.Freeze(freezeDuration);
                }
                FriendlyUnit friendlyUnit = item.GetComponent <FriendlyUnit>();
                if (friendlyUnit != null)
                {
                    friendlyUnit.Freeze(freezeDuration);
                }
            }
        }
    }
Пример #3
0
 private void SetUnitOnTile(FriendlyUnit unit)
 {
     if (IsEmpty)
     {
         UnitOnTile = unit;
     }
 }
Пример #4
0
 public void GenerateUnit(bool isEnemy, Vector2 position, string name)
 {
     if (isEnemy)
     {
         EnemyUnit enemy = new EnemyUnit(_contentManager, _graphicsDevice, position, UnitsInformation[name])
         {
             Name = name,
             ID   = _unitsGenerated
         };
         enemy.Finish += EnemyFinish;
         enemy.IsDead += EnemyDead;
         EnemyUnits.Add(enemy);
     }
     else
     {
         FriendlyUnit friendly = new FriendlyUnit(_contentManager, _graphicsDevice, position, UnitsInformation[name])
         {
             Name = name,
             ID   = _unitsGenerated
         };
         friendly.Finish += FriendlyFinish;
         friendly.IsDead += FriendlyDead;
         FriendlyUnits.Add(friendly);
     }
     _unitsGenerated++;
 }
Пример #5
0
    public void Explosion()
    {
        PlaySFX(_clipShellExplosion);
        //get all the tanks caught in the explosion
        Collider[] allCollider = Physics.OverlapSphere(transform.position, _explosionRadius, _explosionMask);

        //destroy the shell
        GameObject shellExplosion = Instantiate(_shellExplosion, transform.position, transform.rotation);

        Destroy(gameObject);
        Destroy(shellExplosion, 1);

        //loop through the collider to apply force and damage
        foreach (Collider collider in allCollider)
        {
            Rigidbody trbody = collider.GetComponent <Rigidbody>();
            if (trbody == null)
            {
                continue;
            }

            if (collider.GetComponent <FriendlyUnit>() != null)
            {
                FriendlyUnit fu = collider.GetComponent <FriendlyUnit>();
                fu.Death();
            }

            if (collider.GetComponent <EnemyUnit>() != null)
            {
                EnemyUnit eu = collider.GetComponent <EnemyUnit>();
                eu.Death();
            }
        }
    }
Пример #6
0
        public void Update(GameTime gameTime)
        {
            EnemyUnits.FirstOrDefault()?.Update(gameTime, null, FriendlyUnits.FirstOrDefault());
            for (int i = 1; i < EnemyUnits.Count; i++)
            {
                EnemyUnits[i].Update(gameTime, EnemyUnits[i - 1], FriendlyUnits.FirstOrDefault());
            }

            FriendlyUnits.FirstOrDefault()?.Update(gameTime, EnemyUnits.FirstOrDefault(), null);
            for (int i = 1; i < FriendlyUnits.Count; i++)
            {
                FriendlyUnits[i].Update(gameTime, EnemyUnits.FirstOrDefault(), FriendlyUnits[i - 1]);
            }

            if (_enemyToRemove != null)
            {
                EnemyUnits.Remove(_enemyToRemove);
                _enemyToRemove = null;
            }
            if (_friendlyToRemove != null)
            {
                FriendlyUnits.Remove(_friendlyToRemove);
                _friendlyToRemove = null;
            }
        }
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        var data = new FriendlyUnit {
            health = health
        };

        dstManager.AddComponentData(entity, data);
    }
Пример #8
0
 private void PurchaseUnit(FriendlyUnit unit)
 {
     if (HasEnoughGoldToPurchase(unit.Cost))
     {
         Gold            -= unit.Cost;
         Stats.GoldSpent += unit.Cost;
         InGameHUD.Instance.UpdateGoldText( );
     }
 }
Пример #9
0
 private void OnTriggerExit2D(Collider2D other)
 {
     if (other.tag == "Friendly" && !IsDead)
     {
         UnitToAttack = null;
         StopCoroutine("AttackWithDelay");
         StopAttackAnim( );
         StartCoroutine(MoveForward( ));
     }
 }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Tab))
        {
            DescriptionBar.SetActive(!DescriptionBar.activeInHierarchy);
            InfoBar.SetActive(!InfoBar.activeInHierarchy);
        }


        // When played is pressed, set everything into motion
        if (Input.GetKeyDown("space") &&
            !mActionSelector.GetComponent <ActionSelector>().mPlanningAction&&
            !CheckMoving() &&
            !mInMotion &&
            !mDialogueController.DialogueGoing)
        {
            mInMotion = true;

            // Need to loop through all units and start their motions
            foreach (GameObject FriendlyUnit in mFriendlyUnits)
            {
                if (FriendlyUnit == null)
                {
                    continue;
                }
                Movement FriendlyUnitMovement = FriendlyUnit.GetComponent <Movement>();
                FriendlyUnit.GetComponent <CharacterStats>().mTurnGoing = true;
                FriendlyUnitMovement.mInMotion = true;
                FriendlyUnitMovement.StartMovement();
                FriendlyUnit.GetComponent <BoxCollider2D>().size = new Vector2(.4f, .4f);
            }

            foreach (GameObject EnemyUnit in mEnemyUnits)
            {
                if (EnemyUnit == null)
                {
                    continue;
                }
                Movement EnemyUnitMovement = EnemyUnit.GetComponent <Movement>();
                EnemyUnit.GetComponent <CharacterStats>().mTurnGoing = true;
                EnemyUnitMovement.mInMotion = true;
                EnemyUnitMovement.StartMovement();
                EnemyUnit.GetComponent <BoxCollider2D>().size = new Vector2(.4f, .4f);
            }

            StartCoroutine(RunSequence());
        }

        // Bring up the retry menu
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            QuitMenu.SetActive(!QuitMenu.activeInHierarchy);
        }
    }
Пример #11
0
    private void Start( )
    {
        PriceText.text = UnitPrefab.Cost.ToString( );

        UnitObject = Instantiate(UnitPrefab, Camera.main.ScreenToWorldPoint(transform.position), Quaternion.identity) as FriendlyUnit;
        UnitObject.transform.position = new Vector3(UnitObject.transform.position.x, UnitObject.transform.position.y, 0f);

        StartingPosition = Camera.main.ScreenToWorldPoint(transform.position);

        UnitObject.GetComponent <BoxCollider2D>( ).enabled = false;
        UnitObject.gameObject.SetActive(false);
    }
Пример #12
0
    private void SpawnUnit(FriendlyUnit unit)
    {
        if (unit == null)
        {
            return;
        }

        UnitOnTile = Instantiate(unit, UnitSpawn.transform.position, Quaternion.identity) as FriendlyUnit;
        UnitOnTile.GetComponent <BoxCollider2D>( ).enabled = true;
        UnitOnTile.Init( );

        IsEmpty = false;
        ActiveTile.gameObject.SetActive(false);

        GameManager.OnUnitPurchased.Invoke(unit);
    }
    // Puts all units to sleep when a battle occurs
    public void SleepAll()
    {
        foreach (GameObject FriendlyUnit in mFriendlyUnits)
        {
            if (FriendlyUnit != null)
            {
                FriendlyUnit.GetComponent <Movement>().mPause = true;
            }
        }

        foreach (GameObject EnemyUnit in mEnemyUnits)
        {
            if (EnemyUnit != null)
            {
                EnemyUnit.GetComponent <Movement>().mPause = true;
            }
        }
    }
    public void NotifyAction()
    {
        foreach (GameObject FriendlyUnit in mFriendlyUnits)
        {
            if (FriendlyUnit != null)
            {
                FriendlyUnit.GetComponent <CharacterStats>().ActionActivate();
            }
        }

        foreach (GameObject EnemyUnit in mEnemyUnits)
        {
            if (EnemyUnit != null)
            {
                EnemyUnit.GetComponent <CharacterStats>().ActionActivate();
            }
        }
    }
    // Puts all units to sleep when a battle occurs
    public void WakeAll()
    {
        foreach (GameObject FriendlyUnit in mFriendlyUnits)
        {
            if (FriendlyUnit != null)
            {
                FriendlyUnit.GetComponent <Movement>().mPause = false;
            }
        }

        foreach (GameObject EnemyUnit in mEnemyUnits)
        {
            if (EnemyUnit != null)
            {
                EnemyUnit.GetComponent <Movement>().mPause = false;
            }
        }
        mCamera.StartZoomOut();
    }
Пример #16
0
 private void OnTriggerEnter2D(Collider2D other)
 {
     if (other.tag == "Friendly" && Vector2.Distance(transform.position, other.transform.position) <= 5f)
     {
         if (other.GetComponent <FriendlyUnit>( ) != null)
         {
             MoveState = E_MOVE_STATE.ATTACK;
             Anim.SetFloat("Speed", 0f);
             UnitToAttack = other.GetComponent <FriendlyUnit>( );
             StartCoroutine("AttackWithDelay");
         }
     }
     else if (other.tag == "Castle")
     {
         Castle castle = other.transform.parent.GetComponent <Castle>( );
         if (castle != null)
         {
             MoveState = E_MOVE_STATE.ATTACK;
             Anim.SetFloat("Speed", 0f);
             CastleToAttack = castle;
             StartCoroutine("AttackWithDelay");
         }
     }
 }
Пример #17
0
 private void FriendlyFinish(object sender, EventArgs e)
 {
     _friendlyToRemove = (FriendlyUnit)sender;
     FriendlyFinished.Invoke(_friendlyToRemove.Dammage, new EventArgs());
 }
Пример #18
0
 private void FriendlyDead(object sender, EventArgs e)
 {
     _friendlyToRemove = (FriendlyUnit)sender;
 }
Пример #19
0
 private void Start()
 {
     friendlyUnit         = GetComponent <FriendlyUnit>();
     friendlyUnit.OnKill += HandleOnKill;
 }