protected override void Perform(ActionEvent evt, Player player, MapElementInfo info, NVector pos, ActionHolder holder) { DataTerrain terrain = GameMgmt.Get().newMap.Terrain(pos); //which is possible? List <(string key, string value)> opts = new List <(string key, string value)>(); int i = 0; while (holder.data.ContainsKey(i.ToString())) { var d = SplitHelper.Split(holder.data[i.ToString()]); if (terrain.id == d.key) { opts.Add(d); } i++; } //found it? if (opts.Count == 0) { OnMapUI.Get().unitUI.ShowPanelMessageError($"No terraform possible for {terrain.Name()}"); return; } Vector3Int v3 = new Vector3Int(pos.x, pos.y, 1); //TODO find right pos if (opts.Count == 1) { GameMgmt.Get().newMap.levels[pos.level] .SetTile(v3, opts[0].value == "remove" ? null : L.b.terrains[opts[0].value]); return; } //multiple? WindowPanelBuilder wpb = WindowPanelBuilder.Create($"Terraform {terrain.Name()}"); foreach (var opt in opts) { wpb.panel.AddImageTextButton(CreateTitle(opt), terrain.Sprite(), () => { GameMgmt.Get().newMap.levels[pos.level] .SetTile(v3, opt.value == "remove" ? null : L.b.terrains[opt.value]); wpb.Close(); }); } wpb.AddClose(); wpb.Finish(); }
public override void ShowLexicon(PanelBuilder panel) { DataTerrain terr = L.b.terrains[Terrain]; base.ShowLexicon(panel); panel.AddHeaderLabelT("general"); panel.AddImageLabel($"Home terrain: {terr.Name()}", terr.Sprite()); panel.AddModi(Modi); if (elements.Count > 0) { panel.AddHeaderLabel(S.T(L.b.elements.Id(), elements.Count)); foreach (var element in elements) { L.b.elements[element].AddImageLabel(panel); } } }