NestBuilding CreateNest(PATileTerrain.TileElementType elementType) { string preName = ""; if (elementType == PATileTerrain.TileElementType.Fire) { preName = "v_"; } else if (elementType == PATileTerrain.TileElementType.Wood) { preName = "w_"; } string nestPrefabName = preName + nestName; GameObject nestGo = PoolManager.Pools["Shuijing"].Spawn(nestPrefabName).gameObject; GameUtility.SetLayerRecursive(nestGo.transform, toPlaceBuildingLayer); NestBuilding nest = nestGo.GetComponent <NestBuilding>(); nest.elementType = elementType; nest.prefabName = nestPrefabName; RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0)); Physics.Raycast(ray, out hit, Mathf.Infinity, terrainChunkLayermask); nest.transform.position = hit.point; return(nest); }
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); }