コード例 #1
0
ファイル: WarpEditor.cs プロジェクト: Drenn1/LynnaLab
 // Gets the index corresponding to a spin button value.
 Warp GetWarpIndex(int i)
 {
     if (i == -1)
     {
         return(null);
     }
     return(WarpGroup.GetWarp(i));
 }
コード例 #2
0
        void GenerateRoomComponents()
        {
            if (Room == null)
            {
                return;
            }

            roomComponents    = new List <RoomComponent>();
            hoveringComponent = null;

            // We only draw the 1 component if we're editing a warp destination
            if (EditingWarpDestination != null)
            {
                WarpDestRoomComponent com = new WarpDestRoomComponent(this, EditingWarpDestination);
                com.SelectedEvent += (sender, args) => {
                    WarpEditor.SetSelectedWarp(com.warp);
                };
                roomComponents.Add(com);
                goto addedAllComponents; // I love being evil
            }

            if (ViewObjects && ObjectGroupEditor.TopObjectGroup != null)
            {
                foreach (ObjectGroup group in ObjectGroupEditor.TopObjectGroup.GetAllGroups())
                {
                    for (int i = 0; i < group.GetNumObjects(); i++)
                    {
                        ObjectDefinition obj = group.GetObject(i);
                        if (!obj.HasXY())
                        {
                            continue;
                        }
                        ObjectRoomComponent com = new ObjectRoomComponent(obj);
                        com.SelectedEvent += (sender, args) => {
                            ObjectGroupEditor.SelectObject(obj.ObjectGroup, obj.Index);
                        };
                        roomComponents.Add(com);
                    }
                }
            }

            if (ViewWarps)
            {
                int       index = 0;
                WarpGroup group = room.GetWarpGroup();

                foreach (Warp warp in group.GetWarps())
                {
                    Action <int, int, int, int> addWarpComponent = (x, y, width, height) => {
                        var rect = new Cairo.Rectangle(x, y, width, height);
                        var com  = new WarpSourceRoomComponent(this, warp, index, rect);
                        com.SelectedEvent += (sender, args) => {
                            WarpEditor.SetWarpIndex(com.index);
                        };
                        roomComponents.Add(com);
                    };

                    if (warp.WarpSourceType == WarpSourceType.Standard)
                    {
                        int middle;
                        if (Room.Width == 15) // Large room
                        {
                            middle = ((Room.Width + 1) / 2) * 16;
                        }
                        else // Small room
                        {
                            middle = ((Room.Width + 1) / 2) * 16 + 8;
                        }
                        int right  = Room.Width * 16;
                        int bottom = Room.Height * 16 - 8;

                        if (warp.TopLeft)
                        {
                            addWarpComponent(0, -8, middle, 16);
                        }
                        if (warp.TopRight)
                        {
                            addWarpComponent(middle, -8, right - middle, 16);
                        }
                        if (warp.BottomLeft)
                        {
                            addWarpComponent(0, bottom, middle, 16);
                        }
                        if (warp.BottomRight)
                        {
                            addWarpComponent(middle, bottom, right - middle, 16);
                        }

                        if (!warp.TopLeft && !warp.TopRight && !warp.BottomLeft && !warp.BottomRight)
                        {
                            addWarpComponent(0, 16 * 13, Room.Width * 16, 32);
                        }
                    }
                    else if (warp.WarpSourceType == WarpSourceType.Pointed)
                    {
                        addWarpComponent(warp.SourceX * TileWidth, warp.SourceY * TileHeight, TileWidth, TileHeight);
                    }
                    index++;
                }
            }

            if (ViewChests)
            {
                if (Room.Chest != null)
                {
                    ChestRoomComponent com = new ChestRoomComponent(Room.Chest);
                    roomComponents.Add(com);
                }
            }


addedAllComponents:
            // The "selectedComponent" now refers to an old object. Look for the corresponding new
            // object.
            RoomComponent newSelectedComponent = null;

            foreach (RoomComponent com in roomComponents)
            {
                if (com.Compare(selectedComponent))
                {
                    newSelectedComponent = com;
                    break;
                }
            }

            selectedComponent = newSelectedComponent;

            QueueDraw();
        }
コード例 #3
0
ファイル: WarpEditor.cs プロジェクト: Drenn1/LynnaLab
 public WarpSourceBox(WarpGroup warpGroup)
 {
     this.WarpGroup = warpGroup;
     WarpGroup.AddModifiedHandler(OnWarpGroupModified);
     OnWarpGroupModified(null, null);
 }
コード例 #4
0
ファイル: WarpEditor.cs プロジェクト: Drenn1/LynnaLab
 int GetWarpIndex(Warp warp)
 {
     return(WarpGroup.IndexOf(warp));
 }