public void Load(TileLogicScript logic) { logic.name = "Grass"; logic.s_0 = tname; logic.s_1 = 0; logic.addSameType(tname, x, y); logic.addSameType(tname, x, y + 1); logic.addSameType(tname, x, y + 2); logic.addSameType(tname, x, y + 3); logic.addSameType(tname, x, y + 4); }
public void Initialize(TileLogicScript logic) { logic.name = name; logic.s_0 = tname; logic.s_1 = 1; logic.addSameType(tname, x + 0, y + 0); logic.addSameType(tname, x + 1, y + 0); logic.addSameType(tname, x + 2, y + 0); logic.addSameType(tname, x + 0, y + 1); logic.addSameType(tname, x + 1, y + 1); logic.addSameType(tname, x + 2, y + 1); logic.addSameType(tname, x + 0, y + 2); logic.addSameType(tname, x + 1, y + 2); logic.addSameType(tname, x + 2, y + 2); logic.addSameType(tname, x + 3, y + 0); logic.addSameType(tname, x + 4, y + 0); logic.addSameType(tname, x + 3, y + 1); logic.addSameType(tname, x + 4, y + 1); }
//Function called when initializing logics public void Load(TileLogicScript logic) { logic.name = logicName; logic.s_0 = tname; logic.s_1 = 73; logic.addSameType(tname, x + 0, y + 0); logic.addSameType(tname, x + 1, y + 0); logic.addSameType(tname, x + 2, y + 0); logic.addSameType(tname, x + 0, y + 1); logic.addSameType(tname, x + 1, y + 1); logic.addSameType(tname, x + 2, y + 1); logic.addSameType(tname, x + 0, y + 2); logic.addSameType(tname, x + 1, y + 2); logic.addSameType(tname, x + 2, y + 2); logic.addSameType(tname, x + 3, y + 0); logic.addSameType(tname, x + 4, y + 0); logic.addSameType(tname, x + 3, y + 1); logic.addSameType(tname, x + 4, y + 1); }
public void Eval(TileLogicScript logic, LogicEvalInfo info, bool u, bool d, bool l, bool r, bool ul, bool ur, bool dl, bool dr) { info.Adjust(tname, x, y); }
public void FillList() { if (logicindex >= 0) { SetTileAction action = TileLogicManager.Instance.logics[logicindex].Evaluate(xt, yt); if (action != null) { action.Execute(); } if (updateneighbors) { List <MockupTile> neighbors = new List <MockupTile>(); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt - 1, yt - 1, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt, yt - 1, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt + 1, yt - 1, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt - 1, yt, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt, yt, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt + 1, yt, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt - 1, yt + 1, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt, yt + 1, EditorEngine.Instance.SelectedLayer)); neighbors.Add(EditorEngine.Instance.CurrentMap.GetTile(xt + 1, yt + 1, EditorEngine.Instance.SelectedLayer)); //sometime the ugliest solution is the best List <Tuple <int, int> > positions = new List <Tuple <int, int> >(); positions.Add(new Tuple <int, int>(-1, -1)); positions.Add(new Tuple <int, int>(0, -1)); positions.Add(new Tuple <int, int>(+1, -1)); positions.Add(new Tuple <int, int>(-1, 0)); positions.Add(new Tuple <int, int>(0, 0)); positions.Add(new Tuple <int, int>(+1, 0)); positions.Add(new Tuple <int, int>(-1, +1)); positions.Add(new Tuple <int, int>(0, +1)); positions.Add(new Tuple <int, int>(+1, +1)); int i = 0; foreach (MockupTile neighbor in neighbors) { if (neighbor != null) { if (TileLogicManager.Instance.logics[logicindex].isSameType(neighbor)) { if (Options.Instance.LogicCorrectSameType) { SetTileAction _action = TileLogicManager.Instance.logics[logicindex].Evaluate(xt + positions[i].Item1, yt + positions[i].Item2); if (_action != null) { this.Actions.Add(_action); } } } else { if (Options.Instance.LogicCorrectOtherType) { TileLogicScript logic = TileLogicManager.Instance.getLogicFromSameType(neighbor.Tileset.Name, neighbor.tileIndex); if (logic != null) { SetTileAction _action = TileLogicManager.Instance.logics[logic.index].Evaluate(xt + positions[i].Item1, yt + positions[i].Item2); if (_action != null) { this.Actions.Add(_action); } } } } } i++; } } if (action != null) { action.UnExecute(); Actions.Add(action); } } }
//Function called when painting with logic tile public void Eval(TileLogicScript logic, LogicEvalInfo info, bool u, bool d, bool l, bool r, bool ul, bool ur, bool dl, bool dr) { info.Adjust(tname, x + 1, y + 1); if (!u) { if (!l) { info.Adjust(tname, x, y); } else if (!r) { info.Adjust(tname, x + 2, y); } else { info.Adjust(tname, x + 1, y + (dl ? 0 : ul ? 2 : 0)); } } else if (!d) { if (!l) { info.Adjust(tname, x, y + 2); } else if (!r) { info.Adjust(tname, x + 2, y + 2); } else { info.Adjust(tname, x + 1, y + 2); } } else if (u) { if (!l) { info.Adjust(tname, x, y + 1); } else if (!r) { info.Adjust(tname, x + 2, y + 1); } } if (u && d && l && r) { if (!ul) { info.Adjust(tname, x + 3, y); } else if (!ur) { info.Adjust(tname, x + 4, y); } else if (!dl) { info.Adjust(tname, x + 3, y + 1); } else if (!dr) { info.Adjust(tname, x + 4, y + 1); } } if (u && d && l && r && ul && ur && dl && dr) { info.Adjust(tname, x + 1, y + 1); //middle! } }
public override void Execute() { Stack <Vector2> stack = new Stack <Vector2>(); List <Vector2> visited = new List <Vector2>(); stack.Push(new Vector2(xt, yt)); MockupTile mockup = EditorEngine.Instance.CurrentMap.GetTile(xt, yt, EditorEngine.Instance.SelectedLayer); if (mockup != null) { string tilesheetindex = mockup.Tileset.Name; int tileindex = mockup.tileIndex; TileLogicScript sc = null; if (sametype) { sc = TileLogicManager.Instance.getLogicFromSameType(tilesheetindex, tileindex); } int i = 0; while (stack.Count > 0) { Vector2 pop = stack.Pop(); if (!visited.Contains(pop)) { int x = (int)pop.X; int y = (int)pop.Y; MockupTile u = EditorEngine.Instance.CurrentMap.GetTile(x, y - 1, EditorEngine.Instance.SelectedLayer); MockupTile d = EditorEngine.Instance.CurrentMap.GetTile(x, y + 1, EditorEngine.Instance.SelectedLayer); MockupTile l = EditorEngine.Instance.CurrentMap.GetTile(x - 1, y, EditorEngine.Instance.SelectedLayer); MockupTile r = EditorEngine.Instance.CurrentMap.GetTile(x + 1, y, EditorEngine.Instance.SelectedLayer); if (sametype && sc != null) { if (u != null && TileLogicManager.Instance.getLogicFromSameType(u.Tileset.Name, u.tileIndex) == sc) { stack.Push(new Vector2(x, y - 1)); } if (d != null && TileLogicManager.Instance.getLogicFromSameType(d.Tileset.Name, d.tileIndex) == sc) { stack.Push(new Vector2(x, y + 1)); } if (l != null && TileLogicManager.Instance.getLogicFromSameType(l.Tileset.Name, l.tileIndex) == sc) { stack.Push(new Vector2(x - 1, y)); } if (r != null && TileLogicManager.Instance.getLogicFromSameType(r.Tileset.Name, r.tileIndex) == sc) { stack.Push(new Vector2(x + 1, y)); } } else { if (u != null && (u.Tileset.Name == tilesheetindex && u.tileIndex == tileindex)) { stack.Push(new Vector2(x, y - 1)); } if (d != null && d.Tileset.Name == tilesheetindex && d.tileIndex == tileindex) { stack.Push(new Vector2(x, y + 1)); } if (l != null && l.Tileset.Name == tilesheetindex && l.tileIndex == tileindex) { stack.Push(new Vector2(x - 1, y)); } if (r != null && r.Tileset.Name == tilesheetindex && r.tileIndex == tileindex) { stack.Push(new Vector2(x + 1, y)); } } this.Actions.Add(new LogicSetAction(x, y, logicindex, false)); i++; visited.Add(pop); } } } base.Execute(); foreach (Vector2 vec2 in visited) { int xr = (int)vec2.X; int yr = (int)vec2.Y; new LogicSetAction(xr, yr, logicindex).Execute(); } }