Exemplo n.º 1
0
        protected void FillLevelExits(Level level, CollisionMap cmap)
        {
            var ptCenters = cmap.GetPtCenters();

            for (var pRoom = level.pRoom2First; pRoom != 0;)
            {
                var room      = game.Debugger.Read <Room2>(pRoom);
                var roomsNear = game.Debugger.ReadArray <uint>(room.pRoom2Near, (int)room.dwRoomsNear);
                foreach (var pr in roomsNear)
                {
                    var r   = game.Debugger.Read <Room2>(pr);
                    var lvl = game.Debugger.Read <Level>(r.pLevel);
                    if (lvl.dwLevelNo != level.dwLevelNo)
                    {
                        int nRoomX = (int)room.dwPosX * 5;
                        int nRoomY = (int)room.dwPosY * 5;

                        foreach (var ptCenter in ptCenters)
                        {
                            if ((ptCenter.X + cmap.LevelOrigin.X) >= (short)nRoomX && (ptCenter.X + cmap.LevelOrigin.X) <= (short)(nRoomX + (room.dwSizeX * 5)))
                            {
                                if ((ptCenter.Y + cmap.LevelOrigin.Y) >= (short)nRoomY && (ptCenter.Y + cmap.LevelOrigin.Y) <= (short)(nRoomY + (room.dwSizeY * 5)))
                                {
                                    var exit = new LevelExit
                                    {
                                        dwTargetLevel = lvl.dwLevelNo,
                                        ptPos         = new Point(ptCenter.X + cmap.LevelOrigin.X, ptCenter.Y + cmap.LevelOrigin.Y),
                                        dwType        = (uint)ExitType.Level,
                                        dwId          = 0,
                                        pRoom2        = 0,
                                    };

                                    if (!levelExits.ContainsKey(level.dwLevelNo))
                                    {
                                        levelExits.Add(level.dwLevelNo, new List <LevelExit>());
                                    }

                                    if (levelExits[level.dwLevelNo].Find(it => it.dwTargetLevel == lvl.dwLevelNo) == null)
                                    {
                                        levelExits[level.dwLevelNo].Add(exit);
                                    }
                                }
                            }
                        }

                        break;
                    }
                }

                pRoom = room.pRoom2Next;
            }
        }