Exemple #1
0
    Shuijing CreateCrystal(PATileTerrain.PATile tile, int level, PATileTerrain.TileElementType elementType)
    {
        PATileTerrain.PABuildingTile buildingTile = PATileTerrain.PABuildingTile.GetByTile(tileTerrain, tile);
        Shuijing shuijing = CreateCrystal(level, elementType);

        return(PlaceCrystal(shuijing, buildingTile));
    }
Exemple #2
0
    void EditCrystal()
    {
        if (!CheckEditCrystal())
        {
            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);
            Shuijing      hitShuijing = hit.transform.GetComponent <Shuijing>();
            if (tt != null)
            {
                if (toPlaceBuilding == null)
                {
                    SetSelectShuijing(null);
                    Messenger <PATileTerrain.PATile> .Broadcast(UIEvent.UIEvent_ShowSelectCrystal, null);
                }
                else
                {
                    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);

                    Shuijing shuijing = toPlaceBuilding as Shuijing;
                    if (!CheckCrystalDistance(buildingTile.keyTile, shuijing))
                    {
                        Messenger.Broadcast(UIEvent.UIEvent_CrystalDistanceTip);
                        return;
                    }

                    PlaceCrystal(shuijing, buildingTile);
                    shuijing.SetSelectTag(false);
                    RepaintAllCrystals();
                    //PaintCrystal(shuijing);
                    toPlaceBuilding = null;
                    //SetSelectShuijing(shuijing);
                    Messenger.Broadcast(TerrainManagerEvent_PlaceBuilding);
                }
            }
            else if (hitShuijing != null && toPlaceBuilding == null)
            {
                SetSelectShuijing(hitShuijing);
                MoveCameraToPos(hitShuijing.transform, MoveToCrystalCallBack);
            }
            else
            {
                SetSelectShuijing(null);
            }
        }
    }
Exemple #3
0
    public Shuijing PlaceCrystal(Shuijing shuijing, PATileTerrain.PABuildingTile buildingTile)
    {
        PATileTerrainChunk chunk = tileTerrain.GetChunk(buildingTile.keyTile.chunkId);

        shuijing.gameObject.transform.SetParent(chunk.settings.crystalGo.transform);
        shuijing.gameObject.transform.position = buildingTile.GetBuildingPos(tileTerrain);
        buildingTile.keyTile.shuijing          = shuijing;
        shuijing.tile = buildingTile.keyTile;
        GameUtility.SetLayerRecursive(shuijing.transform, buildingLayer);
        PATileTerrain.PACrystalBuilding crystalBuildingData = new PATileTerrain.PACrystalBuilding(
            buildingTile.keyTile.id, shuijing.level, shuijing.elementType, shuijing.prefabName, RandomManager.NewSeed());
        crystalBuildingData.shuijing = shuijing;
        tileTerrain.settings.AddCrystal(crystalBuildingData);

        return(shuijing);
    }
Exemple #4
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);
            }
        }
    }
Exemple #5
0
    void PlaceNest(NestBuilding nest, PATileTerrain.PABuildingTile buildingTile)
    {
        Shuijing belongShuijing = buildingTile.keyTile.affectShuijing;

        if (belongShuijing == null)
        {
            return;
        }

        PATileTerrainChunk chunk = tileTerrain.GetChunk(buildingTile.keyTile.chunkId);

        nest.gameObject.transform.SetParent(chunk.settings.buildingsRoot.transform);
        nest.gameObject.transform.position = buildingTile.GetBuildingPos(tileTerrain);
        nest.tile = buildingTile.keyTile;
        //nest.belongShuijing = belongShuijing;
        GameUtility.SetLayerRecursive(nest.transform, buildingLayer);
        PATileTerrain.PABuilding buildingData = new PATileTerrain.PABuilding(
            buildingTile.keyTile.id, nest.elementType, nest.prefabName);
        tileTerrain.settings.GetCrystalBuilding(belongShuijing.tile.id).AddBuilding(buildingData);
        buildingData.belongShuijingId = belongShuijing.tile.id;
        belongShuijing.buildings.Add(nest.transform);
    }