Пример #1
0
        IEnumerator MoveObject(CharacterBattleController characterBattleController, Tile currentTile, float speed,
                               int index)
        {
            map.OccupyTile(characterBattleController.gameObject, currentTile);

            Vector3 destination = map.GetCoordByTileIndexes(currentTile.x, currentTile.z, currentTile.y);
            float   step        = speed * Time.deltaTime;

            while ((characterBattleController.gameObject.transform.position - destination).magnitude <= 0.005f)
            {
                characterBattleController.gameObject.transform.position =
                    Vector3.MoveTowards(characterBattleController.gameObject.transform.position, destination, step) +
                    new Vector3(0, 0.7f, 0);
                yield return(null);
            }

            characterBattleController.gameObject.transform.position = destination + new Vector3(0, 0.7f, 0);

            //Debug.Log(map.FindTile(currentTile.x, currentTile.z, currentTile.y).occupied);



            //Debug.Log(map.FindTile(currentTile.x, currentTile.z, currentTile.y).occupied + " " + map.FindTile(currentTile.x, currentTile.z, currentTile.y).characterOnTile.name);

            Tile tile = characterBattleController.characterDataComponent.position;

            Debug.Log(characterBattleController.characterDataComponent.nameData + " is on tile: " + tile.x + ", " + tile.z + ", " + tile.y);

            //Debug.Log(battleManager.map == map);

            list[index] = true;
        }
Пример #2
0
        private void Update()
        {
            if (active)
            {
                if (!initiated)
                {
                    for (int i = 0; i < characters.Count; i++)
                    {
                        list.Add(false);

                        CharacterBattleController character = characters[i];

                        Tile currentTile;
                        currentTile = map.GetTileByVectorPoint(character.gameObject.transform.position);

                        Queue <Tile> queue    = new Queue <Tile>();
                        List <Tile>  adjTiles = new List <Tile>();

                        while (currentTile.occupied)
                        {
                            adjTiles =
                                MapUtils.GetAdjTilesWithOccCheck(map, currentTile.x, currentTile.z, currentTile.y);

                            foreach (Tile adjTile in adjTiles)
                            {
                                queue.Enqueue(adjTile);
                            }

                            currentTile = queue.Dequeue();
                        }

                        StartCoroutine(MoveObject(character, currentTile, 0.5f, i));

                        initiated = true;
                    }
                }
                else
                {
                    bool ready = true;
                    foreach (bool b in list)
                    {
                        ready = ready & b;
                    }

                    if (ready)
                    {
                        EndEvent(out battleManager.busy);
                        Destroy(this);
                    }
                }
            }
        }