Пример #1
0
    void Update()
    {
        RaycastHit hit;
        Ray        ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);

        if (!pressed && Input.GetMouseButtonDown(0))
        {
            pressed = true;
        }
        if (pressed && Input.GetMouseButtonUp(0))
        {
            pressed = false;
            terrain.UpdateMesh(changedPoints);
            changedPoints.Clear();
        }

        if (pressed && Physics.Raycast(ray, out hit, Mathf.Infinity))
        {
            if (terrain.IsTerrain(hit.transform) != null)
            {
                Vector3 pos;
                int     x, y;
                float   p = 0.1f;

                /*[1.04]*/                 //pos = hit.point - terrain.transform.position;
                pos  = terrain.transform.InverseTransformPoint(hit.point);
                pos += new Vector3(terrain.tileSize / 2, 0.0f, terrain.tileSize / 2);
                x    = (int)Mathf.Abs(pos.x / terrain.tileSize);
                y    = (int)Mathf.Abs(pos.z / terrain.tileSize);

                terrain.DeformPointTerrain(x, y, false, p, 4.0f, changedPoints);
            }
        }
    }
Пример #2
0
    void EditBuilding()
    {
        if (!CheckEditBuilding())
        {
            return;
        }

        RaycastHit hit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Vector3    pos;
        int        x, y;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, editCrystalLayerMask))
        {
            PATileTerrain tt       = tileTerrain.IsTerrain(hit.transform);
            NestBuilding  hitNest  = hit.transform.GetComponent <NestBuilding>();
            HatchBuilding hitHatch = hit.transform.GetComponent <HatchBuilding>();
            if (tt != null)
            {
                pos = tileTerrain.transform.InverseTransformPoint(hit.point);
                x   = (int)Mathf.Abs(pos.x / tileTerrain.tileSize);
                y   = (int)Mathf.Abs(pos.z / tileTerrain.tileSize);
                PATileTerrain.PATile         tile         = tileTerrain.GetTile(x, y);
                PATileTerrain.PABuildingTile buildingTile = PATileTerrain.PABuildingTile.GetByTile(tileTerrain, tile);

                if (toPlaceBuilding is NestBuilding && buildingTile.keyTile.affectShuijing != null)
                {
                    NestBuilding nest = toPlaceBuilding as NestBuilding;
                    PlaceNest(nest, buildingTile);
                    toPlaceBuilding = null;
                    //Messenger.Broadcast(TerrainManagerEvent_PlaceBuilding);
                }
            }
            else if (hitNest != null && toPlaceBuilding == null)
            {
                Messenger.Broadcast(UIEvent.UIEvent_ShowSelectNest);
            }
            else if (hitHatch != null && toPlaceBuilding == null)
            {
                Messenger <int> .Broadcast(UIEvent.UIEvent_ShowHatch, hitHatch.hatchId);
            }
        }
    }