예제 #1
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
            return;
        }

        if (BlockGameplayInputs && Input.GetKeyDown(KeyCode.Space))
        {
            SceneManager.LoadScene("Game");
            return;
        }

        Vector2 mousePosInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (Input.GetButtonDown("PlaceCampFire"))
        {
            if (BlockGameplayInputs)
            {
                return;
            }

            World      w            = World.Get();
            Vector2Int gridLocation = w.GetGridLocation(mousePosInWorld);
            //w.Tiles[gridLocation].SetIsInSnow(false);

            if (w.Tiles[gridLocation].TileType == World.Tile.Type.Grass)
            {
                GameObject fire       = w.GetClosestFire(mousePosInWorld);
                Fire       fireScript = fire.GetComponent <Fire>();
                Vector2Int closestFireGridLocation = w.GetGridLocation(fire.transform.position);
                float      distance    = World.GetManhattanDistance(gridLocation, closestFireGridLocation);
                float      maxDistance = fireScript.CurrentRadiusOfInfluence + w.GetNewFireRadius() * 1.5f;
                if (distance > maxDistance)
                {
                    Debug.Log(distance.ToString() + " max reach " + maxDistance.ToString() + "(" + fireScript.CurrentRadiusOfInfluence.ToString() + " + " + w.GetNewFireRadius().ToString() + ")");
                    w.DisplayText("We cannot reach that far.", 2);
                    return;
                }
                int cost = Mathf.FloorToInt(w.GenerationParameters.resources.expeditionWoodCostPerTile * distance);

                if (w.GlobalInventory.CurrentWood > cost)
                {
                    w.SetTileType(gridLocation, World.Tile.Type.ExpeditionSite);
                    JobDispatcher jobScript = fire.GetComponent <JobDispatcher>();
                    jobScript.QueueJob(gridLocation, JobDispatcher.Job.Type.Expedition);
                    w.GlobalInventory.RemoveWood(cost);
                }
                else
                {
                    w.DisplayText("Not enough wood.", 2);
                }
            }
            else if (w.Tiles[w.GetGridLocation(mousePosInWorld)].TileType == World.Tile.Type.Hearth)
            {
                if (w.GlobalInventory.CurrentWood >= w.GenerationParameters.resources.hearthFeedingAmount)
                {
                    w.GlobalInventory.RemoveWood(w.GenerationParameters.resources.hearthFeedingAmount);
                    w.Hearth.GetComponent <Fire>().Feed();
                }
            }
        }

        if (Input.GetButtonDown("DragCamera"))
        {
            DragCameraInputLocation = Input.mousePosition;
            DragCameraStartLocation = Camera.main.transform.position;
        }

        if (DragCameraInputLocation != null)
        {
            Vector2 dragV = DragCameraInputLocation.Value - Input.mousePosition;
            dragV *= Camera.main.orthographicSize;
            float ratio = Camera.main.scaledPixelWidth / Camera.main.scaledPixelHeight;
            dragV.y *= ratio;
            dragV   /= 200.0f;

            float oldZ = Camera.main.transform.position.z;
            Camera.main.transform.position = new Vector3(dragV.x, dragV.y, 0) + DragCameraStartLocation.Value;
        }

        if (Input.GetButtonUp("DragCamera"))
        {
            DragCameraInputLocation = null;
            DragCameraStartLocation = null;
        }

        float scrollAmount = Input.GetAxis("Mouse ScrollWheel");

        if (Mathf.Abs(scrollAmount) > 0.0f)
        {
            Camera.main.orthographicSize -= scrollAmount;
            Camera.main.orthographicSize  = Mathf.Clamp(Camera.main.orthographicSize, 80, 700);
        }
    }