public static BuildingScript SpawnBuilding(GameBuilding gameBuilding) { // Spawn prefab GameObject newBuilding = Instantiate(gameBuilding.building.models, gameBuilding.GetPosition(), gameBuilding.GetRotation(), Instance.buildingParentTransform); // Add BuildingScript BuildingScript bs = newBuilding.AddComponent <BuildingScript>(); bs.SetBuilding(gameBuilding); // Add fog of war influencer if building is starter building if (bs.Name == "Höhle") { SimpleFogOfWar.FogOfWarInfluence fowi = newBuilding.AddComponent <SimpleFogOfWar.FogOfWarInfluence>(); fowi.ViewDistance = bs.ViewRange; } Instantiate(Instance.placeParticles, bs.transform); // Blueprint UI GameObject canvRange = Instantiate(Instance.rangeCanvas); canvRange.transform.SetParent(newBuilding.transform, false); canvRange.name = "CanvasRange"; canvRange.SetActive(false); GameObject canvBlueprint = Instantiate(Instance.blueprintCanvas); canvBlueprint.transform.SetParent(newBuilding.transform, false); canvBlueprint.name = "CanvasBlueprint"; if (bs.Blueprint) { foreach (GameResources res in bs.CostResource) { if (res.Amount == 0) { continue; } GameObject materialPanel = (GameObject)Instantiate(Instance.blueprintMaterialPanel, canvBlueprint.transform.Find("Cost")); materialPanel.transform.Find("TextMat").GetComponent <Text>().text = "0/" + res.Amount; materialPanel.transform.Find("ImageMat").GetComponent <Image>().sprite = res.Icon; } } canvBlueprint.transform.Find("ButtonCancel").GetComponent <Button>().onClick.AddListener(() => bs.DestroyBuilding()); // Set Grid int gx = gameBuilding.orientation % 2 == 0 ? bs.GridWidth : bs.GridHeight; int gy = gameBuilding.orientation % 2 == 1 ? bs.GridWidth : bs.GridHeight; for (int dx = 0; dx < gx; dx++) { for (int dy = 0; dy < gy; dy++) { if (!Grid.ValidNode(gameBuilding.gridX + dx, gameBuilding.gridY + dy)) { continue; } Node n = Grid.GetNode(gameBuilding.gridX + dx, gameBuilding.gridY + dy); n.SetNodeObject(newBuilding.transform); if (!bs.Walkable) { n.objectWalkable = false; } } } if (bs.Name == "Höhle") { Instance.cave = bs; } return(bs); }