private void Update() { RaycastHit raycast = LayoutManager.Instance.CurrentCamera.CurrentRaycast; if (!raycast.transform) { return; } OverlayMesh overlayMesh = raycast.transform.GetComponent <OverlayMesh>(); TileEntity tileEntity = raycast.transform.GetComponent <TileEntity>(); int floor = 0; int x = -1; int y = -1; if (tileEntity && tileEntity.Valid) { floor = tileEntity.Floor; x = tileEntity.Tile.X; y = tileEntity.Tile.Y; } else if (overlayMesh) { floor = LayoutManager.Instance.CurrentCamera.Floor; x = Mathf.FloorToInt(raycast.point.x / 4f); y = Mathf.FloorToInt(raycast.point.z / 4f); } if (floor == 0 || floor == -1) { LayoutManager.Instance.TooltipText += "\n<color=red><b>It's not possible to place roofs on ground floor</b></color>"; return; } if (Input.GetMouseButton(0)) { RoofData data = GuiManager.Instance.RoofsList.SelectedValue as RoofData; GameManager.Instance.Map[x, y].SetRoof(data, floor); } else if (Input.GetMouseButton(1)) { GameManager.Instance.Map[x, y].SetRoof(null, floor); } if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1)) { GameManager.Instance.Map.CommandManager.FinishAction(); } }
private static void LoadRoofs(XmlDocument document) { XmlNodeList entities = document.GetElementsByTagName("roof"); foreach (XmlElement element in entities) { string name = element.GetAttribute("name"); string shortName = element.GetAttribute("shortname"); Debug.Log("Loading roof " + name); bool unique = VerifyShortName(shortName); if (!unique) { Debug.LogWarning("Shortname " + shortName + " already exists, aborting"); continue; } TextureReference texture = TextureReference.GetTextureReference(element.GetAttribute("tex")); Materials materials = null; foreach (XmlElement child in element) { switch (child.LocalName) { case "materials": materials = new Materials(child); break; } } RoofData data = ScriptableObject.CreateInstance <RoofData>(); data.Initialize(texture, name, shortName, materials); Database.Roofs[shortName] = data; GuiManager.Instance.RoofsList.Add(data); } }