Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
	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);
	}
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    //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);
    }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
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);
                }
            }
        }
Ejemplo n.º 7
0
    //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!
        }
    }
Ejemplo n.º 8
0
        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();
            }
        }