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)); }
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); } } }
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); }
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); } } }
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); }