Exemplo n.º 1
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Defenders")
        {
            CasaController casaController = collision.gameObject.GetComponent <CasaController>();
            casaController.SetMorto();
            DestroyController destroyController = collision.gameObject.GetComponent <DestroyController>();
            destroyController.IsDestroyed = true;

            myGameController.EnemyMissileDestroyed();
            MissileExplode();
            if (collision.GetComponent <MissileLauncher>() != null)
            {
                myGameController.MissileLauncherHit();
                return;
            }
            myGameController.cityCounter--;
            Destroy(collision.gameObject);
        }
        else if (collision.tag == "Explosion")
        {
            myGameController.AddMissileDestroyedScore();
            MissileExplode();
            //Destroy(collision.gameObject);
        }
    }
Exemplo n.º 2
0
    protected static IEnumerator DoBehavior(TileState state)
    {
        Selector.SelectEnemy(state);
        int range     = GetInteractionRange(state.unit);
        var neighbors = state.position.Neighbors(maxDistance: range).Select(Board.ToState);

        state.alerted = false;
        switch (state.unit)
        {
        case UnitType.Bomb:
            yield return(DestroyController.Destroy(state));

            break;

        case UnitType.Fire:
            foreach (var neighborState in neighbors)
            {
                if (!neighborState.fireIncoming && neighborState.unit != UnitType.Fire && neighborState.unit != UnitType.Hole)
                {
                    yield return(DestroyController.Destroy(neighborState));

                    SFXController.PlayFire();
                    neighborState.fireIncoming = true;
                    if (!Generator.isRunning)
                    {
                        yield return(new WaitForSeconds(0.05f));
                    }
                }
            }
            break;

        case UnitType.Fang:
            yield return(new WaitForSeconds(0.7f));

            var enemies = neighbors.Where(x => x.Friendliness == Friendliness.Friendly)
                          .OrderBy(x => - x.moveOrder * 1000 + x.playOrder);
            if (enemies.Any())
            {
                var target = enemies.First();
                SFXController.PlayFire();
                if (target.unit != UnitType.Shield)
                {
                    yield return(DestroyController.Destroy(enemies.First()));
                }
                else
                {
                    yield return(DestroyController.Destroy(state));
                }
                // TODO: strike animation
                yield return(new WaitForSeconds(0.6f));
            }
            break;
        }
        Selector.DeselectEnemy(state);
        yield return(YieldFast.Get);
    }
Exemplo n.º 3
0
    // Start is called before the first frame update
    void Start()
    {
        myGameController = GameObject.FindObjectOfType <GameController>();


        cursorHotspot = new Vector2(cursorTexture.width / 2f, cursorTexture.height / 2f);
        Cursor.SetCursor(cursorTexture, cursorHotspot, CursorMode.Auto);

        this._destroyController1 = this.missileLauncherInstance.GetComponent <DestroyController>();
        this._destroyController2 = this.missileLauncherInstance2.GetComponent <DestroyController>();
        this._destroyController3 = this.missileLauncherInstance3.GetComponent <DestroyController>();
    }
Exemplo n.º 4
0
    public IEnumerator ExecuteMove(HexPosition target)
    {
        switch (unit)
        {
        case UnitType.Sword:
            SFXController.PlayMove();
            Board.Get[target].unit    = unit;
            Board.Get[target].alerted = false;
            unit    = UnitType.Empty;
            alerted = false;
            AlertNeighbors(target);

            var directions = ((HexDirection[])Enum.GetValues(typeof(HexDirection))).Where(x => {
                var neighbor = position.Neighbor(x);
                return(neighbor.Equals(target));
            });
            yield return(new WaitForSeconds(0.3f));

            if (directions.Any())
            {
                var stabTile = Board.Get[target.Neighbor(directions.Single())];
                if (stabTile.Friendliness != Friendliness.Neutral)
                {
                    SFXController.PlayFire();
                    yield return(DestroyController.Destroy(stabTile));

                    yield return(new WaitForSeconds(0.3f));
                }
            }
            break;

        case UnitType.Arrow:
            SFXController.PlayFire();
            yield return(new WaitForSeconds(0.3f));

            var direction = ((HexDirection[])Enum.GetValues(typeof(HexDirection)))
                            .Where(x => position.Neighbors(x).Contains(target))
                            .Single();
            var tile = Board.Get[position.Neighbor(direction)];
            while (tile.position.IsInBounds && tile.Friendliness == Friendliness.Neutral)
            {
                tile = Board.Get[tile.position.Neighbor(direction)];
            }
            if (tile.position.IsInBounds)
            {
                yield return(DestroyController.Destroy(tile));
            }
            yield return(new WaitForSeconds(0.5f));

            alerted = true;
            break;

        case UnitType.Shield:
            SFXController.PlayMove();
            Board.Get[target].unit    = unit;
            Board.Get[target].alerted = true;
            unit    = UnitType.Empty;
            alerted = false;
            AlertNeighbors(target);
            yield return(new WaitForSeconds(0.3f));

            break;
        }

        yield return(YieldFast.Get);
    }