public void ChangeTileSide() { if (GameObject.FindGameObjectWithTag(Game.DIALOG) != null) { return; } Game game = Game.Get(); UIWindowSelectionListTraits select = new UIWindowSelectionListImage(SelectTileSide, new StringKey("val", "SELECT", CommonStringKeys.TILE)); // Work out what sides are used HashSet <string> usedSides = new HashSet <string>(); foreach (KeyValuePair <string, QuestData.QuestComponent> kv in game.quest.qd.components) { QuestData.Tile t = kv.Value as QuestData.Tile; if (t != null) { usedSides.Add(t.tileSideName); usedSides.Add(game.cd.tileSides[t.tileSideName].reverse); } } foreach (KeyValuePair <string, TileSideData> kv in game.cd.tileSides) { if (usedSides.Contains(kv.Key)) { select.AddItem(kv.Value, new Color(0.4f, 0.4f, 1)); } else { select.AddItem(kv.Value); } } select.Draw(); }
public EditorComponentTile(string nameIn) : base() { Game game = Game.Get(); tileComponent = game.quest.qd.components[nameIn] as QuestData.Tile; component = tileComponent; name = component.name; Update(); }
public void ChangeTileSide() { Game game = Game.Get(); // Work out what sides are used HashSet <string> usedSides = new HashSet <string>(); foreach (KeyValuePair <string, QuestData.QuestComponent> kv in game.quest.qd.components) { QuestData.Tile t = kv.Value as QuestData.Tile; if (t != null) { usedSides.Add(t.tileSideName); usedSides.Add(game.cd.tileSides[t.tileSideName].reverse); } } List <EditorSelectionList.SelectionListEntry> sides = new List <EditorSelectionList.SelectionListEntry>(); foreach (KeyValuePair <string, TileSideData> kv in game.cd.tileSides) { StringBuilder display = new StringBuilder().Append(kv.Key); StringBuilder localizedDisplay = new StringBuilder().Append(kv.Value.name.Translate()); List <string> traits = new List <string>(kv.Value.traits); foreach (string s in kv.Value.sets) { if (s.Length == 0) { traits.Add("base"); } else { display.Append(" ").Append(s); traits.Add(s); } } Color buttonColor = Color.white; if (usedSides.Contains(kv.Key)) { buttonColor = Color.grey; } sides.Add(EditorSelectionList.SelectionListEntry.BuildNameKeyTraitsColorItem( localizedDisplay.ToString(), display.ToString(), traits, buttonColor)); } tileESL = new EditorSelectionList( new StringKey("val", "SELECT", CommonStringKeys.TILE), sides, delegate { SelectTileSide(); }); tileESL.SelectItem(); }
public void ChangeTileSide() { Game game = Game.Get(); // Work out what sides are used HashSet <string> usedSides = new HashSet <string>(); foreach (KeyValuePair <string, QuestData.QuestComponent> kv in game.quest.qd.components) { QuestData.Tile t = kv.Value as QuestData.Tile; if (t != null) { usedSides.Add(t.tileSideName); usedSides.Add(game.cd.tileSides[t.tileSideName].reverse); } } List <EditorSelectionList.SelectionListEntry> sides = new List <EditorSelectionList.SelectionListEntry>(); foreach (KeyValuePair <string, TileSideData> kv in game.cd.tileSides) { string display = kv.Key; List <string> sets = new List <string>(kv.Value.traits); foreach (string s in kv.Value.sets) { if (s.Length == 0) { sets.Add("base"); } else { display += " " + s; sets.Add(s); } } if (usedSides.Contains(kv.Key)) { sides.Add(new EditorSelectionList.SelectionListEntry(display, sets, Color.grey)); } else { sides.Add(new EditorSelectionList.SelectionListEntry(display, sets, Color.white)); } } tileESL = new EditorSelectionList( new StringKey("val", "SELECT", CommonStringKeys.TILE), sides, delegate { SelectTileSide(); }); tileESL.SelectItem(); }
// Create a new tile, use next available number public void NewTile() { Game game = Game.Get(); int index = 0; while (game.quest.qd.components.ContainsKey("Tile" + index)) { index++; } QuestData.Tile tile = new QuestData.Tile("Tile" + index); game.quest.qd.components.Add("Tile" + index, tile); CameraController cc = GameObject.FindObjectOfType <CameraController>(); tile.location.x = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.x / game.gameType.TileRound()); tile.location.y = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.y / game.gameType.TileRound()); game.quest.Add("Tile" + index); SelectComponent("Tile" + index); }
public void ChangeTileSide() { Game game = Game.Get(); // Work out what sides are used HashSet <string> usedSides = new HashSet <string>(); foreach (KeyValuePair <string, QuestData.QuestComponent> kv in game.quest.qd.components) { QuestData.Tile t = kv.Value as QuestData.Tile; if (t != null) { usedSides.Add(t.tileSideName); usedSides.Add(game.cd.tileSides[t.tileSideName].reverse); } } Dictionary <string, Color> sides = new Dictionary <string, Color>(); foreach (KeyValuePair <string, TileSideData> kv in game.cd.tileSides) { string display = kv.Key; foreach (string s in kv.Value.sets) { display += " " + s; } if (usedSides.Contains(kv.Key)) { sides.Add(display, Color.grey); } else { sides.Add(display, Color.white); } } tileESL = new EditorSelectionList("Select Tile Side", sides, delegate { SelectTileSide(); }); tileESL.SelectItem(); }
override protected void RefreshReference() { base.RefreshReference(); tileComponent = component as QuestData.Tile; }
public void SelectAddVisibility(bool add, int index, string component) { string target = component; int i; if (component.Equals("{NEW:Door}")) { i = 0; while (game.quest.qd.components.ContainsKey("Door" + i)) { i++; } target = "Door" + i; QuestData.Door door = new QuestData.Door(target); Game.Get().quest.qd.components.Add(target, door); CameraController cc = GameObject.FindObjectOfType <CameraController>(); door.location.x = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.x / game.gameType.TileRound()); door.location.y = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.y / game.gameType.TileRound()); game.quest.Add(target); } if (component.Equals("{NEW:Tile}")) { i = 0; while (game.quest.qd.components.ContainsKey("Tile" + i)) { i++; } target = "Tile" + i; QuestData.Tile tile = new QuestData.Tile(target); Game.Get().quest.qd.components.Add(target, tile); CameraController cc = GameObject.FindObjectOfType <CameraController>(); tile.location.x = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.x / game.gameType.TileRound()); tile.location.y = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.y / game.gameType.TileRound()); game.quest.Add(target); } if (component.Equals("{NEW:Token}")) { i = 0; while (game.quest.qd.components.ContainsKey("Token" + i)) { i++; } target = "Token" + i; QuestData.Token token = new QuestData.Token(target); Game.Get().quest.qd.components.Add(target, token); CameraController cc = GameObject.FindObjectOfType <CameraController>(); token.location.x = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.x / game.gameType.TileRound()); token.location.y = game.gameType.TileRound() * Mathf.Round(cc.gameObject.transform.position.y / game.gameType.TileRound()); game.quest.Add(target); } if (component.Equals("{NEW:UI}")) { i = 0; while (game.quest.qd.components.ContainsKey("UI" + i)) { i++; } target = "UI" + i; Game.Get().quest.qd.components.Add(target, new QuestData.UI(target)); } if (component.Equals("{NEW:QItem}")) { i = 0; while (game.quest.qd.components.ContainsKey("QItem" + i)) { i++; } target = "QItem" + i; Game.Get().quest.qd.components.Add(target, new QuestData.QItem(target)); } if (index != -1) { if (add) { eventComponent.addComponents[index] = target; } else { eventComponent.removeComponents[index] = target; } Update(); return; } string[] oldC = null; if (add) { oldC = eventComponent.addComponents; } else { oldC = eventComponent.removeComponents; } string[] newC = new string[oldC.Length + 1]; for (i = 0; i < oldC.Length; i++) { newC[i] = oldC[i]; } newC[i] = target; if (add) { eventComponent.addComponents = newC; } else { eventComponent.removeComponents = newC; } Update(); }
// Construct with data from the quest, pass Game for speed public Tile(QuestData.Tile questTile, Game gameObject) : base(gameObject) { qTile = questTile; // Search for tile in content if (game.cd.tileSides.ContainsKey(qTile.tileSideName)) { cTile = game.cd.tileSides[qTile.tileSideName]; } else if (game.cd.tileSides.ContainsKey("TileSide" + qTile.tileSideName)) { cTile = game.cd.tileSides["TileSide" + qTile.tileSideName]; } else { // Fatal if not found Debug.Log("Error: Failed to located TileSide: " + qTile.tileSideName + " in quest component: " + qTile.name); Application.Quit(); } // Attempt to load image Texture2D newTex = ContentData.FileToTexture(game.cd.tileSides[qTile.tileSideName].image); if (newTex == null) { // Fatal if missing Debug.Log("Error: cannot open image file for TileSide: " + game.cd.tileSides[qTile.tileSideName].image); Application.Quit(); } // Create a unity object for the tile unityObject = new GameObject("Object" + qTile.name); unityObject.tag = "board"; unityObject.transform.parent = game.boardCanvas.transform; // Add image to object image = unityObject.AddComponent <UnityEngine.UI.Image>(); // Create sprite from texture Sprite tileSprite = Sprite.Create(newTex, new Rect(0, 0, newTex.width, newTex.height), Vector2.zero, 1); // Set image sprite image.sprite = tileSprite; // Move to get the top left square corner at 0,0 float vPPS = game.cd.tileSides[qTile.tileSideName].pxPerSquare; float hPPS = vPPS; // manual aspect control // We need this for the 3x2 MoM tiles because they don't have square pixels!! if (game.cd.tileSides[qTile.tileSideName].aspect != 0) { hPPS = (vPPS * newTex.width / newTex.height) / game.cd.tileSides[qTile.tileSideName].aspect; } // Perform alignment move unityObject.transform.Translate(Vector3.right * ((newTex.width / 2) - cTile.left) / hPPS, Space.World); unityObject.transform.Translate(Vector3.down * ((newTex.height / 2) - cTile.top) / vPPS, Space.World); // Move to get the middle of the top left square at 0,0 // We don't do this for MoM because it spaces differently if (game.gameType.TileOnGrid()) { unityObject.transform.Translate(new Vector3(-(float)0.5, (float)0.5, 0), Space.World); } // Set the size to the image size image.rectTransform.sizeDelta = new Vector2((float)newTex.width / hPPS, (float)newTex.height / vPPS); // Rotate around 0,0 rotation amount unityObject.transform.RotateAround(Vector3.zero, Vector3.forward, qTile.rotation); // Move tile into target location (Space.World is needed because tile has been rotated) unityObject.transform.Translate(new Vector3(qTile.location.x, qTile.location.y, 0), Space.World); image.color = new Color(1, 1, 1, 0); }