Пример #1
0
    public void undo()
    {
        Debug.Log("undo");
        Vector3 def = new Vector3(0, 0, 0);
        int     i;
        bool    done = false;

        for (i = 0; i < maxActions && !done; i++)
        {
            if (prevMove[i] == def)
            {
                i--;
                done = true;
            }
        }
        if (!done)
        {
            i = maxActions - 1;
        }
        if (i >= 0)
        {
            if ((grid.objects[(int)Mathf.Floor(prevMove[i].x), (int)Mathf.Round(prevMove[i].y / 0.75f)].GetComponent(typeof(tileData)) as tileData).tank != null)
            {
                Vector3  pos  = this.transform.position;
                tileData tile = grid.objects[(int)Mathf.Floor(pos.x), (int)Mathf.Round(pos.y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                tile.tank = null;
                tile      = grid.objects[(int)Mathf.Floor(prevMove[i].x), (int)Mathf.Round(prevMove[i].y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                tile.tank = this;
                this.transform.position = prevMove[i];
            }
        }
    }
Пример #2
0
    IEnumerator enemySpawn()
    {
        int        num = UnityEngine.Random.Range(2, (int)Mathf.Floor(difficulty) + 1);
        GameObject temp;

        for (int i = 0; i < num; i++)
        {
            float    y    = UnityEngine.Random.Range(0, rows);
            float    x    = (float)UnityEngine.Random.Range(columns * 2 / 3 - 1, columns - 1);
            tileData tile = objects[(int)x, (int)y].GetComponent(typeof(tileData)) as tileData;
            if (y % 2 == 1)
            {
                x += 0.5f;
            }
            y = y * 0.75f;
            while (tile.enemy != null || tile.isWater || tile.blocked || tile.city || tile.tank != null)
            {
            }
            temp = Instantiate(enemyFabs[UnityEngine.Random.Range(0, enemyFabs.GetLength(0))], new Vector3(12, y, -0.1f), Quaternion.identity) as GameObject;
            float elapsedTime = 0.0f;
            while (elapsedTime < 0.5f)
            {
                temp.transform.position = Vector3.Lerp(new Vector3(12, y, -0.1f), new Vector3(x, y, -0.1f), elapsedTime / 0.5f);
                elapsedTime            += Time.deltaTime;
                yield return(new WaitForEndOfFrame());
            }
            temp.transform.position = new Vector3(x, y, -0.1f);
            temp.transform.SetParent(enemyContainer);
            tile.enemy = temp.GetComponent(typeof(Enemy)) as Enemy;
        }
        waiting = false;
    }
Пример #3
0
 void OnMouseDown()
 {
     GameObject[] tanks = GameObject.FindGameObjectsWithTag("Moving");
     foreach (GameObject tank in tanks)
     {
         Tank         t    = (tank.GetComponent(typeof(Tank))) as Tank;
         BoardManager grid = (BoardManager)FindObjectOfType(typeof(BoardManager));
         Vector3      def  = new Vector3(0, 0, 0);
         bool         done = false;
         for (int i = 0; i < t.maxActions && !done; i++)
         {
             if (grid.prevMove[i] == def)
             {
                 grid.prevMove[i] = t.transform.position;
                 grid.prevTank[i] = t.id;
                 done             = true;
             }
         }
         Vector3    pos  = t.transform.position;
         GameObject cur  = grid.objects[(int)Mathf.Floor(pos.x), (int)Mathf.Round(pos.y / 0.75f)];
         tileData   tile = cur.GetComponent(typeof(tileData)) as tileData;
         tile.tank            = null;
         t.transform.position = this.transform.position;
         cur       = grid.objects[(int)Mathf.Floor(this.transform.position.x), (int)Mathf.Round(this.transform.position.y / 0.75f)];
         tile      = cur.GetComponent(typeof(tileData)) as tileData;
         tile.tank = t;
         t.hideMoveableTiles();
         t.actions--;
     }
 }
Пример #4
0
    public IEnumerator attack()
    {
        BoardManager grid = (BoardManager)FindObjectOfType(typeof(BoardManager));
        Vector3      def  = new Vector3(0, 0, 0);

        if (tileToHitDiff != def)
        {
            Vector3 target = new Vector3(this.transform.position.x + tileToHitDiff.x, this.transform.position.y + tileToHitDiff.y, 0.0f);
            if (target.x >= 0 && target.x < grid.getCols() && target.y >= 0 && target.y < grid.getRows())
            {
                GameObject hit  = grid.objects[(int)Mathf.Floor(target.x), (int)Mathf.Round(target.y / 0.75f)];
                tileData   tile = hit.GetComponent(typeof(tileData)) as tileData;
                if (tile.city)
                {
                    grid.damageCity(dmg);
                }
                else if (tile.enemy != null)
                {
                    tile.enemy.damage(dmg);
                }
                else if (tile.tank != null)
                {
                    tile.tank.damage(dmg);
                }
            }
            //Play audio
            Destroy(tileToHit);
            yield return(new WaitForSeconds(0.5f));
        }
        waiting = false;
    }
Пример #5
0
 // Functions
 // = = = = = = = = = = = = = = = = = = = = >
 private void BuildNewMap()
 {
     for (int x = 0; x < mapTileWide; x++)
     {
         for (int y = 0; y < mapTileHigh; y++)
         {
             Tiles [x, y]            = new tileData(x, y);
             Tiles [x, y].GroundType = "Space";
             Tiles [x, y].ObjectType = "None";
         }
     }
 }
Пример #6
0
    void FillAllTiles()
    {
        bounds = tilemap.cellBounds;
        TileBase[] tileBounds = tilemap.GetTilesBlock(bounds);


        for (int x = 0; x < bounds.size.x; x++)
        {
            for (int y = 0; y < bounds.size.y; y++)
            {
                TileBase tile = tileBounds[x + y * bounds.size.x];
                if (tile != null)
                {
                    tileData tileData = new tileData();

                    tileData.tile = tile;
                    tileData.posX = x + bounds.x;
                    tileData.posY = y + bounds.y;
                    allTiles.Add(tileData);
                }
            }
        }
    }
Пример #7
0
    TileDirection CalculateNearby(tileData tile)
    {
        TileDirection direction = TileDirection.SOLO;
        List <int>    values    = new List <int>();

        if (tilemap.GetTile(new Vector3Int(tile.posX, tile.posY + 1, 0)) == null)
        {
            values.Add(1);
        }
        if (tilemap.GetTile(new Vector3Int(tile.posX + 1, tile.posY, 0)) == null)
        {
            values.Add(2);
        }
        if (tilemap.GetTile(new Vector3Int(tile.posX, tile.posY - 1, 0)) == null)
        {
            values.Add(3);
        }
        if (tilemap.GetTile(new Vector3Int(tile.posX - 1, tile.posY, 0)) == null)
        {
            values.Add(4);
        }

        if (values.Count == 1)
        {
            if (values.Contains(1))
            {
                direction = TileDirection.UP;
            }
            else if (values.Contains(2))
            {
                direction = TileDirection.RIGHT;
            }
            else if (values.Contains(3))
            {
                direction = TileDirection.DOWN;
            }
            else if (values.Contains(4))
            {
                direction = TileDirection.LEFT;
            }
        }
        else if (values.Count == 2)
        {
            if (values.Contains(1) && values.Contains(2))
            {
                direction = TileDirection.URC;
            }
            else if (values.Contains(2) && values.Contains(3))
            {
                direction = TileDirection.LRC;
            }
            else if (values.Contains(3) && values.Contains(4))
            {
                direction = TileDirection.LLC;
            }
            else if (values.Contains(4) && values.Contains(1))
            {
                direction = TileDirection.ULC;
            }
            else if (values.Contains(1) && values.Contains(3))
            {
                direction = TileDirection.TWOS;
            }
            else if (values.Contains(2) && values.Contains(4))
            {
                direction = TileDirection.TWOU;
            }
        }
        else if (values.Count == 3)
        {
            if (values.Contains(1) && values.Contains(2) && values.Contains(4))
            {
                direction = TileDirection.THREEUP;
            }
            else if (values.Contains(1) && values.Contains(2) && values.Contains(3))
            {
                direction = TileDirection.THREERIGHT;
            }
            else if (values.Contains(2) && values.Contains(3) && values.Contains(4))
            {
                direction = TileDirection.THREEDOWN;
            }
            else if (values.Contains(3) && values.Contains(4) && values.Contains(1))
            {
                direction = TileDirection.THREELEFT;
            }
        }
        else if (values.Count == 4)
        {
            direction = TileDirection.FULL;
        }
        return(direction);
    }
Пример #8
0
    public IEnumerator fire(Vector3 pos, Vector3 target)
    {
        BoardManager grid = (BoardManager)FindObjectOfType(typeof(BoardManager));
        tileData     tile;

        tile = grid.objects[(int)Mathf.Floor(target.x), (int)Mathf.Round(target.y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
        if (tile.enemy != null)
        {
            tile.enemy.damage(damage);
            if ((int)Mathf.Round(target.y / 0.75f) > (int)Mathf.Round(pos.y / 0.75f))
            {
                if (target.x > pos.x)
                {
                    if ((int)Mathf.Floor(target.x + 0.5f) < grid.getCols() && (int)Mathf.Round((target.y + 0.75f) / 0.75f) >= 0)
                    {
                        tileData temp = grid.objects[(int)Mathf.Floor(target.x + 0.5f), (int)Mathf.Round((target.y + 0.75f) / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                        if (temp.blocked)
                        {
                            tile.enemy.damage(1);
                        }
                        else if (temp.city)
                        {
                            tile.enemy.damage(1);
                            grid.damageCity(1);
                        }
                        else if (temp.tank != null)
                        {
                            tile.enemy.damage(1);
                            temp.tank.damage(1);
                        }
                        else if (temp.enemy != null)
                        {
                            tile.enemy.damage(1);
                            temp.enemy.damage(1);
                        }
                        else if (temp.isWater)
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                en.transform.position = temp.transform.position;
                                yield return(new WaitForSeconds(0.1f));

                                Destroy(e);
                                tile.enemy = null;
                            }
                        }
                        else if (tile.isNull)
                        {
                        }
                        else
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                float elapsedTime = 0.0f;
                                while (elapsedTime < 0.5f)
                                {
                                    en.transform.position = Vector3.Lerp(tile.transform.position, temp.transform.position, elapsedTime / 0.5f);
                                    elapsedTime          += Time.deltaTime;
                                    yield return(new WaitForEndOfFrame());
                                }
                                en.transform.position = temp.transform.position;
                                temp.enemy            = tile.enemy;
                                tile.enemy            = null;
                                en.moveAttack(new Vector3(0.5f, 0.75f, 0.0f));
                            }
                        }
                    }
                }
                else
                {
                    if ((int)Mathf.Floor(target.x - 0.5f) < grid.getCols() && (int)Mathf.Round((target.y + 0.75f) / 0.75f) >= 0)
                    {
                        tileData temp = grid.objects[(int)Mathf.Floor(target.x - 0.5f), (int)Mathf.Round((target.y + 0.75f) / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                        if (temp.blocked)
                        {
                            tile.enemy.damage(1);
                        }
                        else if (temp.city)
                        {
                            tile.enemy.damage(1);
                            grid.damageCity(1);
                        }
                        else if (temp.tank != null)
                        {
                            tile.enemy.damage(1);
                            temp.tank.damage(1);
                        }
                        else if (temp.enemy != null)
                        {
                            tile.enemy.damage(1);
                            temp.enemy.damage(1);
                        }
                        else if (temp.isWater)
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                en.transform.position = temp.transform.position;
                                yield return(new WaitForSeconds(0.1f));

                                Destroy(e);
                                tile.enemy = null;
                            }
                        }
                        else if (tile.isNull)
                        {
                        }
                        else
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                float elapsedTime = 0.0f;
                                while (elapsedTime < 0.5f)
                                {
                                    en.transform.position = Vector3.Lerp(tile.transform.position, temp.transform.position, elapsedTime / 0.5f);
                                    elapsedTime          += Time.deltaTime;
                                    yield return(new WaitForEndOfFrame());
                                }
                                en.transform.position = temp.transform.position;
                                temp.enemy            = tile.enemy;
                                tile.enemy            = null;
                                en.moveAttack(new Vector3(-0.5f, 0.75f, 0.0f));
                            }
                        }
                    }
                }
            }
            else if ((int)Mathf.Round(target.y / 0.75f) < (int)Mathf.Round(pos.y / 0.75f))
            {
                if (target.x > pos.x)
                {
                    if ((int)Mathf.Floor(target.x + 0.5f) < grid.getCols() && (int)Mathf.Round((target.y - 0.75f) / 0.75f) >= 0)
                    {
                        tileData temp = grid.objects[(int)Mathf.Floor(target.x + 0.5f), (int)Mathf.Round((target.y - 0.75f) / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                        if (temp.blocked)
                        {
                            tile.enemy.damage(1);
                        }
                        else if (temp.city)
                        {
                            tile.enemy.damage(1);
                            grid.damageCity(1);
                        }
                        else if (temp.tank != null)
                        {
                            tile.enemy.damage(1);
                            temp.tank.damage(1);
                        }
                        else if (temp.enemy != null)
                        {
                            tile.enemy.damage(1);
                            temp.enemy.damage(1);
                        }
                        else if (temp.isWater)
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                en.transform.position = temp.transform.position;
                                yield return(new WaitForSeconds(0.1f));

                                Destroy(e);
                                tile.enemy = null;
                            }
                        }
                        else if (tile.isNull)
                        {
                        }
                        else
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                float elapsedTime = 0.0f;
                                while (elapsedTime < 0.5f)
                                {
                                    en.transform.position = Vector3.Lerp(tile.transform.position, temp.transform.position, elapsedTime / 0.5f);
                                    elapsedTime          += Time.deltaTime;
                                    yield return(new WaitForEndOfFrame());
                                }
                                en.transform.position = temp.transform.position;
                                temp.enemy            = tile.enemy;
                                tile.enemy            = null;
                                en.moveAttack(new Vector3(0.5f, -0.75f, 0.0f));
                            }
                        }
                    }
                }
                else
                {
                    if ((int)Mathf.Floor(target.x - 0.5f) < grid.getCols() && (int)Mathf.Round((target.y - 0.75f) / 0.75f) >= 0)
                    {
                        tileData temp = grid.objects[(int)Mathf.Floor(target.x - 0.5f), (int)Mathf.Round((target.y - 0.75f) / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                        if (temp.blocked)
                        {
                            tile.enemy.damage(1);
                        }
                        else if (temp.city)
                        {
                            tile.enemy.damage(1);
                            grid.damageCity(1);
                        }
                        else if (temp.tank != null)
                        {
                            tile.enemy.damage(1);
                            temp.tank.damage(1);
                        }
                        else if (temp.enemy != null)
                        {
                            tile.enemy.damage(1);
                            temp.enemy.damage(1);
                        }
                        else if (temp.isWater)
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                en.transform.position = temp.transform.position;
                                yield return(new WaitForSeconds(0.1f));

                                Destroy(e);
                                tile.enemy = null;
                            }
                        }
                        else if (tile.isNull)
                        {
                        }
                        else
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                float elapsedTime = 0.0f;
                                while (elapsedTime < 0.5f)
                                {
                                    en.transform.position = Vector3.Lerp(tile.transform.position, temp.transform.position, elapsedTime / 0.5f);
                                    elapsedTime          += Time.deltaTime;
                                    yield return(new WaitForEndOfFrame());
                                }
                                en.transform.position = temp.transform.position;
                                temp.enemy            = tile.enemy;
                                tile.enemy            = null;
                                en.moveAttack(new Vector3(-0.5f, -0.75f, 0.0f));
                            }
                        }
                    }
                }
            }
            else
            {
                if (target.x > pos.x)
                {
                    if ((int)Mathf.Floor(target.x + 1.0f) < grid.getCols())
                    {
                        tileData temp = grid.objects[(int)Mathf.Floor(target.x + 1.0f), (int)Mathf.Round(target.y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                        if (temp.blocked)
                        {
                            tile.enemy.damage(1);
                        }
                        else if (temp.city)
                        {
                            tile.enemy.damage(1);
                            grid.damageCity(1);
                        }
                        else if (temp.tank != null)
                        {
                            tile.enemy.damage(1);
                            temp.tank.damage(1);
                        }
                        else if (temp.enemy != null)
                        {
                            tile.enemy.damage(1);
                            temp.enemy.damage(1);
                        }
                        else if (temp.isWater)
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                en.transform.position = temp.transform.position;
                                yield return(new WaitForSeconds(0.1f));

                                Destroy(e);
                                tile.enemy = null;
                            }
                        }
                        else if (tile.isNull)
                        {
                        }
                        else
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                float elapsedTime = 0.0f;
                                while (elapsedTime < 0.5f)
                                {
                                    en.transform.position = Vector3.Lerp(tile.transform.position, temp.transform.position, elapsedTime / 0.5f);
                                    elapsedTime          += Time.deltaTime;
                                    yield return(new WaitForEndOfFrame());
                                }
                                en.transform.position = temp.transform.position;
                                temp.enemy            = tile.enemy;
                                tile.enemy            = null;
                                en.moveAttack(new Vector3(1.0f, 0.0f, 0.0f));
                            }
                        }
                    }
                }
                else
                {
                    if ((int)Mathf.Floor(target.x - 1.0f) >= 0)
                    {
                        tileData temp = grid.objects[(int)Mathf.Floor(target.x - 1.0f), (int)Mathf.Round(target.y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
                        if (temp.blocked)
                        {
                            tile.enemy.damage(1);
                        }
                        else if (temp.city)
                        {
                            tile.enemy.damage(1);
                            grid.damageCity(1);
                        }
                        else if (temp.tank != null)
                        {
                            tile.enemy.damage(1);
                            temp.tank.damage(1);
                        }
                        else if (temp.enemy != null)
                        {
                            tile.enemy.damage(1);
                            temp.enemy.damage(1);
                        }
                        else if (temp.isWater)
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                en.transform.position = temp.transform.position;
                                yield return(new WaitForSeconds(0.1f));

                                Destroy(e);
                                tile.enemy = null;
                            }
                        }
                        else if (tile.isNull)
                        {
                        }
                        else
                        {
                            GameObject e  = tile.enemy.getGameObject();
                            enemyBear  en = e.GetComponent(typeof(enemyBear)) as enemyBear;
                            if (en != null)
                            {
                                float elapsedTime = 0.0f;
                                while (elapsedTime < 0.5f)
                                {
                                    en.transform.position = Vector3.Lerp(tile.transform.position, temp.transform.position, elapsedTime / 0.5f);
                                    elapsedTime          += Time.deltaTime;
                                    yield return(new WaitForEndOfFrame());
                                }
                                en.transform.position = temp.transform.position;
                                temp.enemy            = tile.enemy;
                                tile.enemy            = null;
                                en.moveAttack(new Vector3(-1.0f, 0.0f, 0.0f));
                            }
                        }
                    }
                }
            }
        }
    }
Пример #9
0
    public IEnumerator move()
    {
        BoardManager grid = (BoardManager)FindObjectOfType(typeof(BoardManager));

        Queue <GameObject>[] queues = new Queue <GameObject> [movement + 1];
        GameObject           cur;
        tileData             tile;
        bool    targetFound      = false;
        Vector3 originalPosition = this.transform.position;
        Vector3 finalPosition    = new Vector3(0.0f, 0.0f, 0.0f);

        for (int i = 0; i < movement + 1; i++)
        {
            queues[i] = new Queue <GameObject>();
        }
        if (Mathf.Floor(this.transform.position.x + 1) < grid.getCols() && Mathf.Round(this.transform.position.y / 0.75f) < grid.getRows())
        {
            queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x + 1), (int)Mathf.Round(this.transform.position.y / 0.75f)]);
        }
        if (Mathf.Floor(this.transform.position.x - 1) >= 0 && Mathf.Round(this.transform.position.y / 0.75f) < grid.getRows())
        {
            queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x - 1), (int)Mathf.Round(this.transform.position.y / 0.75f)]);
        }
        if (Mathf.Floor(this.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(this.transform.position.y / 0.75f + 1) < grid.getRows())
        {
            queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x + 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f + 1)]);
        }
        if (Mathf.Floor(this.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(this.transform.position.y / 0.75f - 1) >= 0)
        {
            queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x + 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f - 1)]);
        }
        if (Mathf.Floor(this.transform.position.x - 0.5f) >= 0 && Mathf.Round(this.transform.position.y / 0.75f + 1) < grid.getRows())
        {
            queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x - 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f + 1)]);
        }
        if (Mathf.Floor(this.transform.position.x - 0.5f) >= 0 && Mathf.Round(this.transform.position.y / 0.75f - 1) >= 0)
        {
            queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x - 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f - 1)]);
        }
        for (int i = 0; i < movement && !targetFound; i++)
        {
            while (queues[i].Count != 0 && !targetFound)
            {
                cur  = queues[i].Dequeue();
                tile = cur.GetComponent(typeof(tileData)) as tileData;
                if (tile.city)
                {
                    targetFound   = true;
                    tileToHitDiff = new Vector3(cur.transform.position.x, cur.transform.position.y, cur.transform.position.z);
                }
                else if ((tile.tank == null) && !tile.blocked && !tile.isNull && (tile.enemy == null) && !tile.isWater)
                {
                    GameObject temp;
                    bool       found;
                    if (Mathf.Floor(cur.transform.position.x + 1) < grid.getCols() && Mathf.Round(cur.transform.position.y / 0.75f) < grid.getRows())
                    {
                        temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x + 1), (int)Mathf.Round(cur.transform.position.y / 0.75f)];
                        found = false;
                        for (int j = 0; j < movement && !found; j++)
                        {
                            if (queues[j].Contains(temp))
                            {
                                found = true;
                            }
                        }
                        if (!found)
                        {
                            queues[i + 1].Enqueue(temp);
                        }
                    }
                    if (Mathf.Floor(cur.transform.position.x - 1) >= 0 && Mathf.Round(cur.transform.position.y / 0.75f) < grid.getRows())
                    {
                        temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x - 1), (int)Mathf.Round(cur.transform.position.y / 0.75f)];
                        found = false;
                        for (int j = 0; j < movement && !found; j++)
                        {
                            if (queues[j].Contains(temp))
                            {
                                found = true;
                            }
                        }
                        if (!found)
                        {
                            queues[i + 1].Enqueue(temp);
                        }
                    }
                    if (Mathf.Floor(cur.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(cur.transform.position.y / 0.75f + 1) < grid.getRows())
                    {
                        temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x + 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f + 1)];
                        found = false;
                        for (int j = 0; j < movement && !found; j++)
                        {
                            if (queues[j].Contains(temp))
                            {
                                found = true;
                            }
                        }
                        if (!found)
                        {
                            queues[i + 1].Enqueue(temp);
                        }
                    }
                    if (Mathf.Floor(cur.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(cur.transform.position.y / 0.75f - 1) >= 0)
                    {
                        temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x + 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f - 1)];
                        found = false;
                        for (int j = 0; j < movement && !found; j++)
                        {
                            if (queues[j].Contains(temp))
                            {
                                found = true;
                            }
                        }
                        if (!found)
                        {
                            queues[i + 1].Enqueue(temp);
                        }
                    }
                    if (Mathf.Floor(cur.transform.position.x - 0.5f) >= 0 && Mathf.Round(cur.transform.position.y / 0.75f + 1) < grid.getRows())
                    {
                        temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x - 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f + 1)];
                        found = false;
                        for (int j = 0; j < movement && !found; j++)
                        {
                            if (queues[j].Contains(temp))
                            {
                                found = true;
                            }
                        }
                        if (!found)
                        {
                            queues[i + 1].Enqueue(temp);
                        }
                    }
                    if (Mathf.Floor(cur.transform.position.x - 0.5f) >= 0 && Mathf.Round(cur.transform.position.y / 0.75f - 1) >= 0)
                    {
                        temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x - 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f - 1)];
                        found = false;
                        for (int j = 0; j < movement && !found; j++)
                        {
                            if (queues[j].Contains(temp))
                            {
                                found = true;
                            }
                        }
                        if (!found)
                        {
                            queues[i + 1].Enqueue(temp);
                        }
                    }
                }
                //inside loop
            }
        }
        while (queues[movement].Count != 0 && !targetFound)
        {
            cur  = queues[movement].Dequeue();
            tile = cur.GetComponent(typeof(tileData)) as tileData;
            if (tile.city)
            {
                targetFound   = true;
                tileToHitDiff = new Vector3(cur.transform.position.x, cur.transform.position.y, cur.transform.position.z);
            }
        }
        if (!targetFound)
        {
            if (Mathf.Floor(this.transform.position.x + 1) < grid.getCols() && Mathf.Round(this.transform.position.y / 0.75f) < grid.getRows())
            {
                queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x + 1), (int)Mathf.Round(this.transform.position.y / 0.75f)]);
            }
            if (Mathf.Floor(this.transform.position.x - 1) >= 0 && Mathf.Round(this.transform.position.y / 0.75f) < grid.getRows())
            {
                queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x - 1), (int)Mathf.Round(this.transform.position.y / 0.75f)]);
            }
            if (Mathf.Floor(this.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(this.transform.position.y / 0.75f + 1) < grid.getRows())
            {
                queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x + 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f + 1)]);
            }
            if (Mathf.Floor(this.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(this.transform.position.y / 0.75f - 1) >= 0)
            {
                queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x + 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f - 1)]);
            }
            if (Mathf.Floor(this.transform.position.x - 0.5f) >= 0 && Mathf.Round(this.transform.position.y / 0.75f + 1) < grid.getRows())
            {
                queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x - 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f + 1)]);
            }
            if (Mathf.Floor(this.transform.position.x - 0.5f) >= 0 && Mathf.Round(this.transform.position.y / 0.75f - 1) >= 0)
            {
                queues[0].Enqueue(grid.objects[(int)Mathf.Floor(this.transform.position.x - 0.5f), (int)Mathf.Round(this.transform.position.y / 0.75f - 1)]);
            }
            for (int i = 0; i < movement && !targetFound; i++)
            {
                while (queues[i].Count != 0 && !targetFound)
                {
                    cur  = queues[i].Dequeue();
                    tile = cur.GetComponent(typeof(tileData)) as tileData;
                    if (tile.tank != null)
                    {
                        targetFound   = true;
                        tileToHitDiff = new Vector3(cur.transform.position.x, cur.transform.position.y, cur.transform.position.z);
                    }
                    else if ((tile.tank == null) && !tile.blocked && !tile.isNull && (tile.enemy == null) && !tile.isWater)
                    {
                        GameObject temp;
                        bool       found;
                        if (Mathf.Floor(cur.transform.position.x + 1) < grid.getCols() && Mathf.Round(cur.transform.position.y / 0.75f) < grid.getRows())
                        {
                            temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x + 1), (int)Mathf.Round(cur.transform.position.y / 0.75f)];
                            found = false;
                            for (int j = 0; j < movement && !found; j++)
                            {
                                if (queues[j].Contains(temp))
                                {
                                    found = true;
                                }
                            }
                            if (!found)
                            {
                                queues[i + 1].Enqueue(temp);
                            }
                        }
                        if (Mathf.Floor(cur.transform.position.x - 1) >= 0 && Mathf.Round(cur.transform.position.y / 0.75f) < grid.getRows())
                        {
                            temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x - 1), (int)Mathf.Round(cur.transform.position.y / 0.75f)];
                            found = false;
                            for (int j = 0; j < movement && !found; j++)
                            {
                                if (queues[j].Contains(temp))
                                {
                                    found = true;
                                }
                            }
                            if (!found)
                            {
                                queues[i + 1].Enqueue(temp);
                            }
                        }
                        if (Mathf.Floor(cur.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(cur.transform.position.y / 0.75f + 1) < grid.getRows())
                        {
                            temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x + 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f + 1)];
                            found = false;
                            for (int j = 0; j < movement && !found; j++)
                            {
                                if (queues[j].Contains(temp))
                                {
                                    found = true;
                                }
                            }
                            if (!found)
                            {
                                queues[i + 1].Enqueue(temp);
                            }
                        }
                        if (Mathf.Floor(cur.transform.position.x + 0.5f) < grid.getCols() && Mathf.Round(cur.transform.position.y / 0.75f - 1) >= 0)
                        {
                            temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x + 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f - 1)];
                            found = false;
                            for (int j = 0; j < movement && !found; j++)
                            {
                                if (queues[j].Contains(temp))
                                {
                                    found = true;
                                }
                            }
                            if (!found)
                            {
                                queues[i + 1].Enqueue(temp);
                            }
                        }
                        if (Mathf.Floor(cur.transform.position.x - 0.5f) >= 0 && Mathf.Round(cur.transform.position.y / 0.75f + 1) < grid.getRows())
                        {
                            temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x - 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f + 1)];
                            found = false;
                            for (int j = 0; j < movement && !found; j++)
                            {
                                if (queues[j].Contains(temp))
                                {
                                    found = true;
                                }
                            }
                            if (!found)
                            {
                                queues[i + 1].Enqueue(temp);
                            }
                        }
                        if (Mathf.Floor(cur.transform.position.x - 0.5f) >= 0 && Mathf.Round(cur.transform.position.y / 0.75f - 1) >= 0)
                        {
                            temp  = grid.objects[(int)Mathf.Floor(cur.transform.position.x - 0.5f), (int)Mathf.Round(cur.transform.position.y / 0.75f - 1)];
                            found = false;
                            for (int j = 0; j < movement && !found; j++)
                            {
                                if (queues[j].Contains(temp))
                                {
                                    found = true;
                                }
                            }
                            if (!found)
                            {
                                queues[i + 1].Enqueue(temp);
                            }
                        }
                    }
                }
            }
            while (queues[movement].Count != 0 && !targetFound)
            {
                cur  = queues[movement].Dequeue();
                tile = cur.GetComponent(typeof(tileData)) as tileData;
                if (tile.tank != null)
                {
                    targetFound   = true;
                    tileToHitDiff = new Vector3(cur.transform.position.x, cur.transform.position.y, cur.transform.position.z);
                }
            }
        }
        if (!targetFound)
        {
            int   posY = (int)Mathf.Round(this.transform.position.y / 0.75f);
            float x    = 0.0f;
            int   y    = 0;
            for (int i = 0; i < grid.getRows(); i++)
            {
                if (grid.cityRows[i])
                {
                    if (Mathf.Abs(posY - y) > Mathf.Abs(posY - i))
                    {
                        y = i;
                    }
                }
            }
            if (y % 2 == 1)
            {
                x = x + 0.5f;
            }
            float dirX;
            if ((int)Mathf.Floor(this.transform.position.x) > (int)Mathf.Floor(x))
            {
                dirX = -1.0f;
            }
            else
            {
                dirX = 1.0f;
            }
            for (int i = 0; i < movement; i++)
            {
                float   my  = 0.0f;
                float   mx  = 0.0f;
                Vector3 pos = this.transform.position;
                Debug.Log(y);
                if ((int)Mathf.Round(pos.y / 0.75f) > y)
                {
                    my = -0.75f;
                    if (dirX > 0.0f)
                    {
                        mx = 0.5f;
                    }
                    else
                    {
                        mx = -0.5f;
                    }
                }
                else if ((int)Mathf.Round(pos.y / 0.75f) < y)
                {
                    my = 0.75f;
                    if (dirX > 0.0f)
                    {
                        mx = 0.5f;
                    }
                    else
                    {
                        mx = -0.5f;
                    }
                }
                else
                {
                    if (dirX > 0.0f)
                    {
                        mx = 1.0f;
                    }
                    else
                    {
                        mx = -1.0f;
                    }
                }
                Vector3    moveTo = new Vector3(this.transform.position.x + mx, this.transform.position.y + my, this.transform.position.z);
                GameObject temp   = grid.objects[(int)Mathf.Floor(moveTo.x), (int)Mathf.Round(moveTo.y / 0.75f)];
                tile = temp.GetComponent(typeof(tileData)) as tileData;
                int iter = 0;
                while ((tile.enemy != null || tile.blocked || tile.isNull || tile.city || tile.tank != null || tile.isWater) && iter < 6)
                {
                    if (mx > 0.0f)
                    {
                        if (my > 0.0f)
                        {
                            mx     = 1.0f;
                            my     = 0.0f;
                            moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                        }
                        else if ((int)my == 0)
                        {
                            mx     = 0.5f;
                            my     = -0.75f;
                            moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                        }
                        else
                        {
                            mx     = -0.5f;
                            my     = 0.75f;
                            moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                        }
                    }
                    else
                    {
                        if (my > 0.0f)
                        {
                            mx     = -1.0f;
                            my     = 0.0f;
                            moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                        }
                        else if ((int)my == 0)
                        {
                            mx     = -0.5f;
                            my     = -0.75f;
                            moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                        }
                        else
                        {
                            mx     = 0.5f;
                            my     = 0.75f;
                            moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                        }
                    }
                    iter++;
                    if ((int)Mathf.Floor(moveTo.x) >= 0 && (int)Mathf.Floor(moveTo.x) < grid.getCols() && (int)Mathf.Round(moveTo.y / 0.75f) >= 0 && (int)Mathf.Round(moveTo.y / 0.75f) < grid.getRows())
                    {
                        temp = grid.objects[(int)Mathf.Floor(moveTo.x), (int)Mathf.Round(moveTo.y / 0.75f)];
                        tile = temp.GetComponent(typeof(tileData)) as tileData;
                    }
                }
                if (iter == 6)
                {
                    moveTo = new Vector3(pos.x, pos.y, pos.z);
                }
                isRunning = true;
                StartCoroutine(moveTile(moveTo));
                while (isRunning)
                {
                    Debug.Log(isRunning);
                    yield return(new WaitForEndOfFrame());
                }
                finalPosition = moveTo;
            }
        }
        else
        {
            Vector3 moveTo;
            cur = grid.objects[(int)Mathf.Floor(this.transform.position.x), (int)Mathf.Round(this.transform.position.y / 0.75f)];
            bool    done = false;
            Vector3 pos  = new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z);
            float   mx;
            float   my;
            while (!done)
            {
                if ((int)Mathf.Round(tileToHitDiff.y / 0.75f) > (int)Mathf.Round(this.transform.position.y / 0.75f))
                {
                    if ((int)Mathf.Floor(this.transform.position.x) < (int)Mathf.Floor(tileToHitDiff.x))
                    {
                        moveTo = new Vector3(pos.x + 0.5f, pos.y + 0.75f, pos.z);
                        mx     = 0.5f;
                        my     = 0.75f;
                    }
                    else
                    {
                        moveTo = new Vector3(pos.x - 0.5f, pos.y + 0.75f, pos.z);
                        mx     = -0.5f;
                        my     = 0.75f;
                    }
                }
                else if ((int)Mathf.Round(tileToHitDiff.y / 0.75f) < (int)Mathf.Round(this.transform.position.y / 0.75f))
                {
                    if ((int)Mathf.Floor(this.transform.position.x) < (int)Mathf.Floor(tileToHitDiff.x))
                    {
                        moveTo = new Vector3(pos.x + 0.5f, pos.y - 0.75f, pos.z);
                        mx     = 0.5f;
                        my     = -0.75f;
                    }
                    else
                    {
                        moveTo = new Vector3(pos.x - 0.5f, pos.y - 0.75f, pos.z);
                        mx     = -0.5f;
                        my     = -0.75f;
                    }
                }
                else
                {
                    if ((int)Mathf.Floor(tileToHitDiff.x) < (int)Mathf.Floor(this.transform.position.x))
                    {
                        moveTo = new Vector3(pos.x - 1.0f, pos.y, pos.z);
                        mx     = -1.0f;
                        my     = 0.0f;
                    }
                    else
                    {
                        moveTo = new Vector3(pos.x + 1.0f, pos.y, pos.z);
                        mx     = 1.0f;
                        my     = 0.0f;
                    }
                }
                if ((int)Mathf.Floor(moveTo.x) == (int)Mathf.Floor(tileToHitDiff.x) && (int)Mathf.Round(moveTo.y / 0.75f) == (int)Mathf.Round(tileToHitDiff.y / 0.75f))
                {
                    done          = true;
                    finalPosition = this.transform.position;
                }
                if (!done)
                {
                    GameObject temp = grid.objects[(int)Mathf.Floor(moveTo.x), (int)Mathf.Round(moveTo.y / 0.75f)];
                    tile = temp.GetComponent(typeof(tileData)) as tileData;
                    while (tile.blocked || tile.isNull || tile.city || tile.tank != null || tile.enemy != null || tile.isWater)
                    {
                        if (mx > 0.0f)
                        {
                            if (my > 0.0f)
                            {
                                mx     = 1.0f;
                                my     = 0.0f;
                                moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                            }
                            else if ((int)my == 0)
                            {
                                mx     = 0.5f;
                                my     = -0.75f;
                                moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                            }
                            else
                            {
                                mx     = -0.5f;
                                my     = 0.75f;
                                moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                            }
                        }
                        else
                        {
                            if (my > 0.0f)
                            {
                                mx     = -1.0f;
                                my     = 0.0f;
                                moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                            }
                            else if ((int)my == 0)
                            {
                                mx     = -0.5f;
                                my     = -0.75f;
                                moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                            }
                            else
                            {
                                mx     = 0.5f;
                                my     = 0.75f;
                                moveTo = new Vector3(pos.x + mx, pos.y + my, pos.z);
                            }
                        }
                        temp = grid.objects[(int)Mathf.Floor(moveTo.x), (int)Mathf.Round(moveTo.y / 0.75f)];
                        tile = temp.GetComponent(typeof(tileData)) as tileData;
                    }
                    isRunning = true;
                    StartCoroutine(moveTile(moveTo));
                    while (isRunning)
                    {
                        yield return(new WaitForEndOfFrame());
                    }
                    finalPosition = moveTo;
                    pos           = this.transform.position;
                }
            }
            tileToHitDiff.x = tileToHitDiff.x - this.transform.position.x;
            tileToHitDiff.y = tileToHitDiff.y - this.transform.position.y;
            tileToHit       = Instantiate(hitTile, new Vector3(this.transform.position.x + tileToHitDiff.x, this.transform.position.y + tileToHitDiff.y, this.transform.position.z), Quaternion.identity);
            tileToHit.transform.SetParent(this.transform);
        }
        cur        = grid.objects[(int)Mathf.Floor(originalPosition.x), (int)Mathf.Round(originalPosition.y / 0.75f)];
        tile       = cur.GetComponent(typeof(tileData)) as tileData;
        tile.enemy = null;
        cur        = grid.objects[(int)Mathf.Floor(finalPosition.x), (int)Mathf.Round(finalPosition.y / 0.75f)];
        tile       = cur.GetComponent(typeof(tileData)) as tileData;
        tile.enemy = this;
        this.tile  = tile;
        waiting    = false;
    }
Пример #10
0
 private Rectangle getBoundingBox(tileData tempData)
 {
     Rectangle destRect = new Rectangle();
     switch (gravity)
     {
         case Direction.right:
             if (playerMode.direction)//flip
             {
                 destRect.X = (int)(playerLoc[0]) + tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) - tempData.origin[1];
                 destRect.Width = -1 * tempData.srcRect.Width;
                 destRect.Height = tempData.srcRect.Height;
             }
             else//normal
             {
                 destRect.X = (int)(playerLoc[0]) - tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) - tempData.origin[1];
                 destRect.Width = tempData.srcRect.Width;
                 destRect.Height = tempData.srcRect.Height;
             }
             break;
         case Direction.left:
             if (playerMode.direction)//flip
             {
                 destRect.X = (int)(playerLoc[0]) + tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) + tempData.origin[1];
                 destRect.Width = -1 * tempData.srcRect.Width;
                 destRect.Height = -1 * tempData.srcRect.Height;
             }
             else//normal
             {
                 destRect.X = (int)(playerLoc[0]) - tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) + tempData.origin[1];
                 destRect.Width = tempData.srcRect.Width;
                 destRect.Height =  -1 * tempData.srcRect.Height;
             }
             break;
         case Direction.down:
             if (playerMode.direction)//flip
             {
                 destRect.X = (int)(playerLoc[0]) + tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) - tempData.origin[1];
                 destRect.Width = -1 *tempData.srcRect.Height;
                 destRect.Height = -1 *tempData.srcRect.Width;
                 destRect.X = destRect.X + (tempData.origin[1] - tempData.origin[0]);
                 destRect.Y = destRect.Y + tempData.origin[0] + tempData.origin[1];
             }
             else//normal
             {
                 destRect.X = (int)(playerLoc[0]) - tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) - tempData.origin[1];
                 destRect.Width = -1 *tempData.srcRect.Height;
                 destRect.Height = tempData.srcRect.Width;
                 destRect.Y = destRect.Y + (tempData.origin[1] - tempData.origin[0]);
                 destRect.X = destRect.X + (tempData.origin[0] + tempData.origin[1]);
             }
             break;
         case Direction.up:
             if (playerMode.direction)//flip
             {
                 destRect.X = (int)(playerLoc[0]) + tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) - tempData.origin[1];
                 destRect.Width = tempData.srcRect.Height;
                 destRect.Height = tempData.srcRect.Width;
                 destRect.Y = destRect.Y + (tempData.origin[1] - tempData.origin[0]);
                 destRect.X = destRect.X - (tempData.origin[0] + tempData.origin[1]);
             }
             else//normal
             {
                 destRect.X = (int)(playerLoc[0]) - tempData.origin[0];
                 destRect.Y = (int)(playerLoc[1]) - tempData.origin[1];
                 destRect.Width = tempData.srcRect.Height;
                 destRect.Height = -1 * tempData.srcRect.Width;
                 destRect.X = destRect.X - (tempData.origin[1] - tempData.origin[0]);
                 destRect.Y = destRect.Y + tempData.origin[0] + tempData.origin[1];
             }
             break;
     }
     return destRect;
 }
Пример #11
0
        private void initAnimSet(String path)
        {
            anim = new List<List<tileData>>();
            ditherAnim = new List<List<tileData>>();

            String animPath = Path.Combine(path, "playerTiles.key");
            String ditherPath = Path.Combine(path, "DitherTiles.key");
            for (int i = 0; i < (int)animMode.STORAGE_SIZE; i++)
            {
                anim.Add(new List<tileData>());
                ditherAnim.Add(new List<tileData>());
            }

            int index;
            tileData tempData;
            StreamReader reader = new StreamReader(animPath);
            String line;
            String tempString;
            line = reader.ReadLine();
            while (line != null)
            {
                //assume all frames are written in order, from 0 up
                index = 0;
                tempData = new tileData();
                tempData.origin = new int[2];
                tempData.srcRect = new Rectangle();
                tempString = MapParser.getString(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.frameNo = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.X = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.Y = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.Width = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.Height = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.origin[0] = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.origin[1] = MapParser.getInt(line, index);

                switch (tempString)
                {
                    case "stand":
                        tempData.animType = animMode.stand;
                        anim[(int)animMode.stand].Add(tempData);
                        break;
                    case "run":
                        tempData.animType = animMode.run;
                        anim[(int)animMode.run].Add(tempData);
                        break;
                    case "win":
                        tempData.animType = animMode.win;
                        anim[(int)animMode.win].Add(tempData);
                        break;
                    case "drop":
                        tempData.animType = animMode.drop;
                        anim[(int)animMode.drop].Add(tempData);
                        break;
                    case "jump":
                        tempData.animType = animMode.jump;
                        anim[(int)animMode.jump].Add(tempData);
                        break;
                    case "die":
                        tempData.animType = animMode.die;
                        anim[(int)animMode.die].Add(tempData);
                        break;
                }

                line = reader.ReadLine();
            }
            //I'm lazy:
            reader = new StreamReader(ditherPath);
            line = reader.ReadLine();
            while (line != null)
            {
                //assume all frames are written in order, from 0 up
                index = 0;
                tempData = new tileData();
                tempData.origin = new int[2];
                tempData.srcRect = new Rectangle();
                tempString = MapParser.getString(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.frameNo = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.X = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.Y = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.Width = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.srcRect.Height = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.origin[0] = MapParser.getInt(line, index);
                index = MapParser.strSearch(line, " ", index);
                tempData.origin[1] = MapParser.getInt(line, index);

                switch (tempString)
                {
                    case "stand":
                        tempData.animType = animMode.stand;
                        ditherAnim[(int)animMode.stand].Add(tempData);
                        break;
                    case "run":
                        tempData.animType = animMode.run;
                        ditherAnim[(int)animMode.run].Add(tempData);
                        break;
                    case "win":
                        tempData.animType = animMode.win;
                        ditherAnim[(int)animMode.win].Add(tempData);
                        break;
                    case "drop":
                        tempData.animType = animMode.drop;
                        ditherAnim[(int)animMode.drop].Add(tempData);
                        break;
                    case "jump":
                        tempData.animType = animMode.jump;
                        ditherAnim[(int)animMode.jump].Add(tempData);
                        break;
                    case "die":
                        tempData.animType = animMode.die;
                        ditherAnim[(int)animMode.die].Add(tempData);
                        break;
                }

                line = reader.ReadLine();
            }
        }
Пример #12
0
    IEnumerator testTankSpawn()
    {
        while (waiting)
        {
            yield return(new WaitForEndOfFrame());
        }
        GameObject[,] spawnable = new GameObject[2, rows];
        for (int x = 0; x < 2; x++)
        {
            for (int y = 0; y < rows; y++)
            {
                tileData t = objects[x, y].GetComponent(typeof(tileData)) as tileData;
                if (!t.city && !t.isWater && !t.isNull && !t.blocked)
                {
                    if (y % 2 == 1)
                    {
                        spawnable[x, y] = Instantiate(spawn, new Vector3(x + 0.5f, y - (y * .25f), -0.1f), Quaternion.identity) as GameObject;
                    }
                    else if (!(y % 2 == 1 && x == 1))
                    {
                        spawnable[x, y] = Instantiate(spawn, new Vector3(x, y - (y * .25f), -0.1f), Quaternion.identity) as GameObject;
                    }
                }
            }
        }
        Vector3 def = new Vector3(0.0f, 0.0f, 0.0f);

        while (spawnPos[0] == def || spawnPos[1] == def || spawnPos[2] == def)
        {
            yield return(new WaitForEndOfFrame());
        }
        for (int x = 0; x < 2; x++)
        {
            for (int y = 0; y < rows; y++)
            {
                Destroy(spawnable[x, y]);
            }
        }
        Vector3[] startPos = new Vector3[3];
        for (int i = 0; i < 3; i++)
        {
            startPos[i] = new Vector3(spawnPos[i].x - 5.0f, spawnPos[i].y, spawnPos[i].z);
            if (metadata.Tanks[i] != null)
            {
                tanks[i] = Instantiate(metadata.Tanks[i], startPos[i], Quaternion.identity) as GameObject;
                Tank temp = tanks[i].GetComponent(typeof(Tank)) as Tank;
                temp.init();
                temp.weap1 = (metadata.Tanks[i].GetComponent(typeof(Tank)) as Tank).weap1;
                temp.weap2 = (metadata.Tanks[i].GetComponent(typeof(Tank)) as Tank).weap2;
                temp.id    = i;
            }
            else
            {
                tanks[i] = Instantiate(tank, startPos[i], Quaternion.identity) as GameObject;
                Tank temp = tanks[i].GetComponent(typeof(Tank)) as Tank;
                temp.init();
                temp.weap1 = new normalShot();
                temp.id    = i;
            }
        }
        difficulty = metadata.Difficulty;
        float elapsedTime = 0.0f;

        while (elapsedTime < 0.5f)
        {
            tanks[0].transform.position = Vector3.Lerp(startPos[0], spawnPos[0], (elapsedTime / 0.5f));
            tanks[1].transform.position = Vector3.Lerp(startPos[1], spawnPos[1], (elapsedTime / 0.5f));
            tanks[2].transform.position = Vector3.Lerp(startPos[2], spawnPos[2], (elapsedTime / 0.5f));
            elapsedTime += Time.deltaTime;
            yield return(new WaitForEndOfFrame());
        }
        tanks[0].transform.position = spawnPos[0];
        tanks[1].transform.position = spawnPos[1];
        tanks[2].transform.position = spawnPos[2];
        tileData tile;

        tile      = objects[(int)Mathf.Floor(spawnPos[0].x), (int)Mathf.Round(spawnPos[0].y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
        tile.tank = tanks[0].GetComponent(typeof(Tank)) as Tank;
        tile      = objects[(int)Mathf.Floor(spawnPos[1].x), (int)Mathf.Round(spawnPos[1].y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
        tile.tank = tanks[1].GetComponent(typeof(Tank)) as Tank;
        tile      = objects[(int)Mathf.Floor(spawnPos[2].x), (int)Mathf.Round(spawnPos[2].y / 0.75f)].GetComponent(typeof(tileData)) as tileData;
        tile.tank = tanks[2].GetComponent(typeof(Tank)) as Tank;
        int num = 0;

        for (int i = 0; i < tanks.Length; i++)
        {
            Tank t = tanks[i].GetComponent(typeof(Tank)) as Tank;
            t.id = i;
            num += t.maxActions;
        }
        prevMove = new Vector3[num];
        prevTank = new int[num];
        spawned  = true;
    }
Пример #13
0
    private void UpdateFloorTile()
    {
        // Makes sure that all colliders are on the same tile, and if they are, sets that tile as the current floor tile.
        List <Collider2D> tilesCollidedNorthEast = new List <Collider2D>();
        List <Collider2D> tilesCollidedNorthWest = new List <Collider2D>();
        List <Collider2D> tilesCollidedSouthEast = new List <Collider2D>();
        List <Collider2D> tilesCollidedSouthWest = new List <Collider2D>();
        List <Collider2D> objectsCollidedWith    = new List <Collider2D>();
        ContactFilter2D   noFilter = new ContactFilter2D();

        noFilter.NoFilter();

        northEastCollider.OverlapCollider(noFilter, tilesCollidedNorthEast);
        northWestCollider.OverlapCollider(noFilter, tilesCollidedNorthWest);
        southEastCollider.OverlapCollider(noFilter, tilesCollidedSouthEast);
        southWestCollider.OverlapCollider(noFilter, tilesCollidedSouthWest);


        // Gets all the tiles in one list
        for (int i = 0; i < tilesCollidedNorthEast.Count; i++)
        {
            objectsCollidedWith.Add(tilesCollidedNorthEast[i]);
        }
        for (int i = 0; i < tilesCollidedNorthWest.Count; i++)
        {
            objectsCollidedWith.Add(tilesCollidedNorthWest[i]);
        }
        for (int i = 0; i < tilesCollidedSouthEast.Count; i++)
        {
            objectsCollidedWith.Add(tilesCollidedSouthEast[i]);
        }
        for (int i = 0; i < tilesCollidedSouthWest.Count; i++)
        {
            objectsCollidedWith.Add(tilesCollidedSouthWest[i]);
        }

        List <tileData> referenceData = new List <tileData>();

        if (objectsCollidedWith.Count > 0)
        {
            for (int i = 0; i < objectsCollidedWith.Count; i++)
            {
                if (objectsCollidedWith[i].gameObject.tag == "Floor" && objectsCollidedWith[i] != CurrentFloorTile)
                {
                    bool referenceRecorded = false;
                    for (int j = 0; j < referenceData.Count; j++)
                    {
                        if (objectsCollidedWith[i].gameObject == referenceData[j].tile)
                        {
                            // we've looked at this tile before
                            referenceData[j].references++;
                            referenceRecorded = true;

                            if (referenceData[j].references == 4)
                            {
                                if (CurrentFloorTile != null)
                                {
                                    if (CurrentFloorTile != objectsCollidedWith[i].gameObject)
                                    {
                                        if (PreviousFloorTile != null)
                                        {
                                            if (objectsCollidedWith[i].gameObject != PreviousFloorTile)
                                            {
                                                PreviousFloorTile = CurrentFloorTile;
                                                CurrentFloorTile  = objectsCollidedWith[i].gameObject;
                                            }
                                        }
                                        else
                                        {
                                            PreviousFloorTile = CurrentFloorTile;
                                            CurrentFloorTile  = objectsCollidedWith[i].gameObject;
                                        }
                                    }
                                }
                                else
                                {
                                    CurrentFloorTile = objectsCollidedWith[i].gameObject;
                                }
                            }
                            break;
                        }
                    }
                    if (!referenceRecorded)
                    {
                        tileData data = new tileData();
                        data.tile       = objectsCollidedWith[i].gameObject;
                        data.references = 1;
                        referenceData.Add(data);
                    }
                }
            }
        }
    }