private void onMouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (this.action == null) { this.action = new MultiAction("Eraser"); } int xt = (int)((e.X - EditorEngine.Instance.xCam) / EditorEngine.Instance.World.Camera.Scale / 16); int yt = (int)((e.Y - EditorEngine.Instance.yCam) / EditorEngine.Instance.World.Camera.Scale / 16); if (xt != lxt || yt != lyt) { int tilesetIndex = TileEditorState.Instance.SelectedTileset; MockupTile t = EditorEngine.Instance.CurrentMap.GetTile(xt, yt, EditorEngine.Instance.SelectedLayer); if (t != null) { SetTileAction tileAction = new SetTileAction(xt, yt, EditorEngine.Instance.SelectedLayer, tilesetIndex, -1); tileAction.Execute(); action.Actions.Add(tileAction); } } lxt = xt; lyt = yt; } }
private void onMouseMove(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) { return; } if (action == null) { action = new MultiAction("Tile Update"); } int xt = (int)((e.X - EditorEngine.Instance.xCam) / EditorEngine.Instance.World.Camera.Scale / 16); int yt = (int)((e.Y - EditorEngine.Instance.yCam) / EditorEngine.Instance.World.Camera.Scale / 16); if (xt != lxt || yt != lyt) { if (TileEditorState.Instance.SelectedRegion != Rectangle.Empty) { MultiAction multiAction = new MultiAction("Tile Update"); Rectangle selection = TileEditorState.Instance.SelectedRegion; for (int x = 0; x < selection.Width; x++) { for (int y = 0; y < selection.Height; y++) { int currentX = selection.X + x; int currentY = selection.Y + y; int tilesetIndex = TileEditorState.Instance.SelectedTileset; Tileset tilesheet = EditorEngine.Instance.CurrentMap.Tilesets[tilesetIndex].Tileset; int tileIndex = tilesheet.Texture.GetIndex(currentX, currentY); int zt = EditorEngine.Instance.SelectedLayer; MockupTile t = EditorEngine.Instance.CurrentMap.GetTile(xt + x, yt + y, zt); if (t == null) { continue; } SetTileAction tileAction = new SetTileAction( xt + x, yt + y, zt, tilesetIndex, tileIndex); multiAction.Actions.Add(tileAction); } } multiAction.Execute(); action.Actions.Add(multiAction); } } lxt = xt; lyt = yt; }
public SetTileAction Evaluate(int x, int y) { try { MockupTile tu = EditorEngine.Instance.CurrentMap.GetTile(x, y - 1, EditorEngine.Instance.SelectedLayer); MockupTile td = EditorEngine.Instance.CurrentMap.GetTile(x, y + 1, EditorEngine.Instance.SelectedLayer); MockupTile tl = EditorEngine.Instance.CurrentMap.GetTile(x - 1, y, EditorEngine.Instance.SelectedLayer); MockupTile tr = EditorEngine.Instance.CurrentMap.GetTile(x + 1, y, EditorEngine.Instance.SelectedLayer); MockupTile tul = EditorEngine.Instance.CurrentMap.GetTile(x - 1, y - 1, EditorEngine.Instance.SelectedLayer); MockupTile tur = EditorEngine.Instance.CurrentMap.GetTile(x + 1, y - 1, EditorEngine.Instance.SelectedLayer); MockupTile tdl = EditorEngine.Instance.CurrentMap.GetTile(x - 1, y + 1, EditorEngine.Instance.SelectedLayer); MockupTile tdr = EditorEngine.Instance.CurrentMap.GetTile(x + 1, y + 1, EditorEngine.Instance.SelectedLayer); bool u = isSameType(tu); bool d = isSameType(td); bool l = isSameType(tl); bool r = isSameType(tr); bool ul = isSameType(tul); bool ur = isSameType(tur); bool dl = isSameType(tdl); bool dr = isSameType(tdr); LogicEvalInfo _info = new LogicEvalInfo("", 0); script.Invoke("Eval", this, _info, u, d, l, r, ul, ur, dl, dr); int zt = EditorEngine.Instance.SelectedLayer; MockupTile t = EditorEngine.Instance.CurrentMap.GetTile(x, y, zt); if (t == null) { return(null); } SetTileAction act = new SetTileAction(x, y, zt, EditorEngine.Instance.World.TilesetContainer.IndexOf(EditorEngine.Instance.GetTilesetByName(_info.s1)), _info.s2); return(act); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("-- Error (" + e.GetType() + "): " + e.Message); //GameConsole.WriteLine("Info: " + e.Value.Value); Console.WriteLine("\r\n\r\n"); Console.ResetColor(); } return(null); }
public IAction Read() { IAction result = null; BinaryInput stream = _stream as BinaryInput; int i = stream.ReadInt32(); if (i == 1) { result = new SetTileAction(); } if (i == 2) { result = new MultiAction(); } if (i == 3) { result = new FillAction(); } if (i == 4) { result = new RectangleAction(); } if (i == 5) { result = new AddEntityAction(); } if (i == 6) { result = new RemoveEntityAction(); } IEncodable encodable = result as IEncodable; if (encodable != null) { encodable.Decode(stream); } return(result); }
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); } } }