Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
                }
            }
        }