Ejemplo n.º 1
0
    protected float ComputeVectorCrossProduct(TDTile start, TDTile goal, TDTile current)
    {
        TGMap tgm = GameObject.Find("TileMap").GetComponent <TGMap>();

        if (tgm == null || !tgm.computeVectorCrossProduct)
        {
            return(0.0f);
        }

        float dx1 = current.GetX() - goal.GetX();
        float dy1 = current.GetY() - goal.GetY();
        float dx2 = start.GetX() - goal.GetX();
        float dy2 = start.GetY() - goal.GetY();

        return(System.Math.Abs(dx1 * dy2 - dx2 * dy1) * 0.001f);
    }
Ejemplo n.º 2
0
        Vector3 GetNextDestination()
        {
            TDStep  step          = _firetruck.PopPathStep();
            TDStep  afterStep     = _firetruck.PeekPathStep();
            Vector3 nextPosition  = new Vector3();
            Vector3 afterPosition = new Vector3();

            if (step != null)
            {
                TDTile nextTile  = step.tile;
                TDTile afterTile = null;

                if (afterStep != null)
                {
                    afterTile        = afterStep.tile;
                    afterPosition    = map.GetPositionForTile(afterTile.GetX(), afterTile.GetY());
                    afterPosition.x += 0.5f;
                    afterPosition.z -= 0.5f;
                }

                nextPosition    = map.GetPositionForTile(nextTile.GetX(), nextTile.GetY());
                nextPosition.x += 0.5f;
                nextPosition.z -= 0.5f;

                //If nextPosition is to the right then trucks drive in the lower
                //of the horizontal lanes
                if (nextPosition.x > transform.position.x ||
                    (afterStep != null && afterPosition.x > transform.position.x))
                {
                    nextPosition.z -= 0.25f;
                    //If it's to the left then trucks drive in the upper lane
                }
                else if (nextPosition.x < transform.position.x ||
                         (afterStep != null && afterPosition.x < transform.position.x))
                {
                    nextPosition.z += 0.25f;
                }

                //If nextPosition is up the trucks drive in the right lane
                if (nextPosition.z > transform.position.z ||
                    (afterStep != null && afterPosition.z > transform.position.z))
                {
                    nextPosition.x += 0.25f;
                    //If it's down then trucks drive in the left lane
                }
                else if (nextPosition.z < transform.position.z ||
                         (afterStep != null && afterPosition.z < transform.position.z))
                {
                    nextPosition.x -= 0.25f;
                }
            }

            return(nextPosition);
        }
Ejemplo n.º 3
0
        private void ApproachTargetFlame()
        {
            if (targetFlame != null)
            {
                TDTile currentTile = map.GetTileForWorldPosition(transform.position);
                TDTile flameTile   = map.GetTileForWorldPosition(targetFlame.transform.position);

                if (currentTile.IsOtherAdjacent(flameTile))
                {
                    destination = currentTile.FindPointAdjacentToTileWithBuffer(flameTile, FIRE_BUFFER, transform.position);
                }
                else
                {
                    EGDispatcher.Instance.SendTruckToTile(this, flameTile.GetX(), flameTile.GetY());
                }
            }
        }
Ejemplo n.º 4
0
        void StartTileOnFire(TDTile tile)
        {
            GameObject flame = (GameObject)Instantiate(flamePrefab);

            Vector3 flamePos = _map.GetPositionForTile(tile.GetX(), tile.GetY());

            flamePos.x += 0.5f;
            flamePos.z -= 0.5f;

            flame.transform.position = flamePos;

            EGFlame egFlame = flame.GetComponent <EGFlame>();

            egFlame.SetTile(tile);
            egFlame.SetMap(_map);
            egFlame.SetSpreadPrefab(flamePrefab);

            tile.OnFire = true;
        }
Ejemplo n.º 5
0
        void UpdateSpread()
        {
            float delta = Time.deltaTime;

            Vector3 scale = transform.root.localScale;

            if (scale.x >= maxSize || tile.durability <= 0)
            {
                timeSinceSpreadAttempt += delta;

                if (timeSinceSpreadAttempt >= spreadInterval)
                {
                    int rand = Random.Range(0, spreadChance);
                    if (rand % spreadChance == 0)
                    {
                        List <TDTile> houses = map.Map.FindAdjacentFlammableTiles(tile);

                        if (houses.Count > 0)
                        {
                            rand = Random.Range(0, houses.Count);
                            TDTile tileToIgnite = houses[rand];
                            if (!tileToIgnite.OnFire && tile.durability > 0)
                            {
                                GameObject flame = (GameObject)Instantiate(spreadPrefab);

                                Vector3 flamePos = map.GetPositionForTile(tileToIgnite.GetX(), tileToIgnite.GetY());
                                flamePos.x += 0.5f;
                                flamePos.z -= 0.5f;

                                flame.transform.position = flamePos;

                                EGFlame egFlame = flame.GetComponent <EGFlame>();
                                egFlame.SetTile(tileToIgnite);
                                egFlame.SetMap(map);
                                egFlame.SetSpreadPrefab(spreadPrefab);

                                PopUpUIManager.Instance.ShowFireSpreadNPCMessage();

                                tileToIgnite.OnFire = true;
                            }
                        }

                        timeSinceSpreadAttempt = 0;
                    }
                }
            }
        }
Ejemplo n.º 6
0
    protected float Heuristic(TDTile a, TDTile b)
    {
        float heuristic = System.Math.Abs(a.GetX() - b.GetX()) + System.Math.Abs(a.GetY() - b.GetY());

        return(heuristic);
    }