Esempio n. 1
0
    // Update is called once per frame
    void Update()
    {
        playerBuildings.RemoveAll(item => item == null);

        if (holdingObject)
        {
            Vector3 point = new Vector3(0, 0, 0);

            RaycastHit[] hits;

            hits = Physics.RaycastAll(Camera.main.ScreenPointToRay(Input.mousePosition));

            foreach (RaycastHit h in hits)
            {
                if (h.transform.tag == "Terrain")
                {
                    point = h.point;

                    NavMeshHit nHit;

                    if (NavMesh.FindClosestEdge(point, out nHit, NavMesh.AllAreas))
                    {
                        selectedBuilding.transform.position = point;

                        bool nearPlacedBuilding = false;

                        foreach (GameObject building in playerBuildings)
                        {
                            if (Vector3.Distance(building.transform.position, point) < 30)
                            {
                                nearPlacedBuilding = true;
                                break;
                            }
                        }

                        if (nHit.distance > distanceAllowance && nearPlacedBuilding)
                        {
                            canPlace             = true;
                            outline.OutlineColor = Color.green;
                        }
                        else
                        {
                            canPlace             = false;
                            outline.OutlineColor = Color.red;
                        }
                        break;
                    }
                }
            }

            if (Input.GetMouseButtonDown(1))
            {
                Destroy(selectedBuilding);
                holdingObject = false;
                canPlace      = false;
            }

            if (Input.GetMouseButtonDown(0))
            {
                if (canPlace)
                {
                    playerManager.AddGold(-selectedBuildingGoldCost);
                    playerManager.AddWood(-selectedBuildingWoodCost);

                    holdingObject  = false;
                    canPlace       = false;
                    rotatingObject = true;
                    return;
                }
            }
        }

        if (rotatingObject)
        {
            float rot         = Input.GetAxis("Rotate");
            float rotateSpeed = 3.0f;

            if (rot > 0.1f)
            {
                selectedBuilding.transform.Rotate(0, rotateSpeed, 0, Space.World);
            }
            else if (rot < 0.0f)
            {
                selectedBuilding.transform.Rotate(0, -rotateSpeed, 0, Space.World);
            }

            if (Input.GetMouseButtonDown(0))
            {
                Building build = selectedBuilding.GetComponent <Building>();
                build.enabled        = true;
                outline.OutlineColor = Color.white;
                build.ActivateObject();

                playerBuildings.Add(selectedBuilding);

                PlayerSkillManager.instance.NewAction(PlayerSkillManager.ACTION_TYPES.NEW_BUILDING);
                PlayerSkillManager.instance.NewBuilding(build.GetBuildingType());

                selectedBuilding = null;
                holdingObject    = false;
                rotatingObject   = false;
            }
        }
    }