예제 #1
0
        /// <summary>
        /// Returns true if a teacher has booked 3 rooms or more.
        /// </summary>
        public bool ThreeRoomsBookingLimit()
        {
            var query = (from b in BookingCatalogSingleton.Instance.Bookings
                         where b.User_Id == LoginHandler.CurrentUserId &&
                         b.Date.Date == RoomReference.Date.Date &&
                         b.Time_end >= RoomReference.TimeStart && b.Time_start <= RoomReference.TimeEnd
                         group b by b.User_Id into RoomGroup
                         select new
            {
                LimitKey = RoomGroup.Key,
                Count = RoomGroup.Count()
            }).ToList();

            foreach (var item in query)
            {
                if (item.Count >= 3)
                {
                    return(false);
                }
            }
            return(true);
        }
        private float GetTemperatureChangeAmount(RoomGroup room, float averageTemperature)
        {
            if (!room.UsesOutdoorTemperature)
            {
                float roomSize    = (float)room.CellCount;
                float temperature = room.Temperature;
                float temperatureDifferenceTimesRate = (averageTemperature - temperature) * temperatureEqualizeRate;
                float temperatureChange    = temperatureDifferenceTimesRate / roomSize;
                float resultingTemperature = temperature + temperatureChange;
                if (temperatureDifferenceTimesRate > 0f && resultingTemperature > averageTemperature)
                {
                    resultingTemperature = averageTemperature;
                }
                else if (temperatureDifferenceTimesRate < 0f && resultingTemperature < averageTemperature)
                {
                    resultingTemperature = averageTemperature;
                }
                return(Mathf.Abs((resultingTemperature - temperature) * roomSize / temperatureDifferenceTimesRate));
            }

            return(0.0f);
        }
        public override void DrawGhost(ThingDef def, IntVec3 center, Rot4 rot, Color ghostCol)
        {
            Map            currentMap = Find.CurrentMap;
            IntVec3        intVec     = center + IntVec3.South.RotatedBy(rot);
            IntVec3        intVec2    = center + IntVec3.North.RotatedBy(rot);
            List <IntVec3> list       = new List <IntVec3>
            {
                intVec
            };

            GenDraw.DrawFieldEdges(list, Color.magenta);
            list = new List <IntVec3>
            {
                intVec2
            };
            GenDraw.DrawFieldEdges(list, Color.white);
            RoomGroup roomGroup  = intVec2.GetRoomGroup(currentMap);
            RoomGroup roomGroup2 = intVec.GetRoomGroup(currentMap);

            if (roomGroup != null && roomGroup2 != null)
            {
                if (roomGroup == roomGroup2 && !roomGroup.UsesOutdoorTemperature)
                {
                    GenDraw.DrawFieldEdges(roomGroup.Cells.ToList(), new Color(1f, 0.7f, 0f, 0.5f));
                }
                else
                {
                    if (!roomGroup.UsesOutdoorTemperature)
                    {
                        GenDraw.DrawFieldEdges(roomGroup.Cells.ToList(), Color.white);
                    }
                    if (!roomGroup2.UsesOutdoorTemperature)
                    {
                        GenDraw.DrawFieldEdges(roomGroup2.Cells.ToList(), Color.magenta);
                    }
                }
            }
        }
        static bool Prefix(ref MapTemperature __instance)
        {
            float modValue = Find.TickManager.TicksGame % 120;

            if (modValue < 7 && modValue >= 7 + RefcellRespeedConfig.currentTimeMultiplier && !DebugSettings.fastEcology)
            {
                return(false);
            }
            __instance.fastProcessedRoomGroups.Clear();
            List <Room> allRooms = __instance.map.regionGrid.allRooms;

            for (int index = 0; index < allRooms.Count; ++index)
            {
                RoomGroup group = allRooms[index].Group;
                if (!__instance.fastProcessedRoomGroups.Contains(group))
                {
                    group.TempTracker.EqualizeTemperature();
                    __instance.fastProcessedRoomGroups.Add(group);
                }
            }
            __instance.fastProcessedRoomGroups.Clear();
            return(false);
        }
예제 #5
0
    //joins two groups together with a coridoor
    private void JoinGroups(RoomGroup groupA, RoomGroup groupB)
    {
        Room[] closestRooms    = new Room[2];
        float  closestDistance = float.MaxValue;

        for (int i = 1; i < groupA.getCount(); i++)
        {
            for (int j = 0; j < groupB.getCount(); j++)
            {
                float euclideanDistance = EuclideanDist(groupA.GetRoom(i), groupB.GetRoom(j));
                if (euclideanDistance < closestDistance)
                {
                    closestRooms [0] = groupA.GetRoom(i);
                    closestRooms [1] = groupB.GetRoom(j);
                    closestDistance  = euclideanDistance;
                }
            }
        }
        if (!SpawnCoridoor(closestRooms[0], closestRooms[1], true, true))
        {
            spawnFailed = true;
        }
    }
예제 #6
0
        /// <summary>
        /// A method making sure a teacher has no more than three booking on a inputted timeinterval
        /// </summary>
        /// <returns>Returns true if a teacher can book another room, and false if he has more than three booking</returns>
        public bool ThreeRoomsBookingLimit()
        {
            var query = (from b in AllBookingsViewCatalogSingleton.Instance.AllBookings
                         where b.User_Id == LoginHandler.CurrentUserId &&
                         b.Date.Date == TCPREF.BookingIsSelected.Date.Date &&
                         b.BookingEnd >= TCPREF.InputTimeStart && b.BookingStart <= TCPREF.InputTimeEnd
                         group b by b.User_Id
                         into RoomGroup
                         select new
            {
                LimitKey = RoomGroup.Key,
                Count = RoomGroup.Count()
            }).ToList();



            //var query = (from b in BookingCatalogSingleton.Instance.Bookings
            //             where b.User_Id == LoginHandler.CurrentUserId &&
            //                   b.Date.Date == TCPREF.BookingIsSelected.Date.Date
            //                  && b.Time_end >= TCPREF.InputTimeStart && b.Time_start <= TCPREF.InputTimeEnd
            //             group b by b.User_Id
            //    into RoomGroup
            //             select new
            //             {
            //                 LimitKey = RoomGroup.Key,
            //                 Count = RoomGroup.Count()
            //             }).ToList();

            foreach (var item in query)
            {
                if (item.Count >= 3)
                {
                    return(false);
                }
            }
            return(true);
        }
예제 #7
0
        public override void DrawGhost(ThingDef def, IntVec3 center, Rot4 rot)
        {
            Map     visibleMap = Find.VisibleMap;
            IntVec3 intVec     = center + IntVec3.South.RotatedBy(rot);
            IntVec3 intVec2    = center + IntVec3.North.RotatedBy(rot);

            GenDraw.DrawFieldEdges(new List <IntVec3>
            {
                intVec
            }, Color.white);
            GenDraw.DrawFieldEdges(new List <IntVec3>
            {
                intVec2
            }, Color.white);
            RoomGroup roomGroup  = intVec2.GetRoomGroup(visibleMap);
            RoomGroup roomGroup2 = intVec.GetRoomGroup(visibleMap);

            if (roomGroup != null && roomGroup2 != null)
            {
                if (roomGroup == roomGroup2 && !roomGroup.UsesOutdoorTemperature)
                {
                    GenDraw.DrawFieldEdges(roomGroup.Cells.ToList <IntVec3>(), Color.white);
                }
                else
                {
                    if (!roomGroup.UsesOutdoorTemperature)
                    {
                        GenDraw.DrawFieldEdges(roomGroup.Cells.ToList <IntVec3>(), Color.white);
                    }
                    if (!roomGroup2.UsesOutdoorTemperature)
                    {
                        GenDraw.DrawFieldEdges(roomGroup2.Cells.ToList <IntVec3>(), Color.white);
                    }
                }
            }
        }
예제 #8
0
        public T GetEntity <T>(int[] ids) where T : ModelEntity
        {
            DSClient client = new DSClient(Models.Const.ApplicationId);
            int      userId;
            string   token;

            if (GetToken(out userId, out token))
            {
                var t = typeof(T);
                if (t == typeof(Application))
                {
                    Application app = client.GetApplication(userId, token, ids[0]);
                    return(app as T);
                }
                else if (t == typeof(Role))
                {
                    Role role = client.GetRole(userId, token, ids[0]);
                    return(role as T);
                }
                else if (t == typeof(Image))
                {
                    Image image = client.GetImage(userId, token, ids[0]);
                    return(image as T);
                }
                else if (t == typeof(Command))
                {
                    Command cmd = client.GetCommand(userId, token, ids[0]);
                    return(cmd as T);
                }
                else if (t == typeof(RoleCommand))
                {
                    RoleCommand rc = client.GetRoleCommand(userId, token, ids[0]);
                    return(rc as T);
                }
                else if (t == typeof(RoleCommandView))
                {
                    RoleCommandView rc = client.GetRoleCommandView(userId, token, ids[0]);
                    return(rc as T);
                }
                else if (t == typeof(User))
                {
                    User user = client.GetUser(userId, token, ids[0]);
                    return(user as T);
                }
                else if (t == typeof(UserApplicationInfo))
                {
                    UserApplicationInfo info = client.GetUserInfo(userId, token, ids[0], ids[1]);
                    return(info as T);
                }
                else if (t == typeof(RoomGroup))
                {
                    RoomGroup roomGroup = client.GetRoomGroup(userId, token, ids[0]);
                    return(roomGroup as T);
                }
                else if (t == typeof(Room))
                {
                    Room room = client.GetRoom(userId, token, ids[0]);
                    return(room as T);
                }
                else if (t == typeof(RoomRole))
                {
                    RoomRole rRole = client.GetRoomRole(userId, token, ids[0], ids[1], ids[2]);
                    return(rRole as T);
                }
                else if (t == typeof(GiftGroup))
                {
                    GiftGroup giftGroup = client.GetGiftGroup(userId, token, ids[0]);
                    return(giftGroup as T);
                }
                else if (t == typeof(Gift))
                {
                    Gift gift = client.GetGift(userId, token, ids[0]);
                    return(gift as T);
                }
                else if (t == typeof(BlockType))
                {
                    BlockType b = client.GetBlockType(userId, token, ids[0]);
                    return(b as T);
                }
                else if (t == typeof(BlockList))
                {
                    BlockList b = client.GetBlockList(userId, token, ids[0]);
                    return(b as T);
                }
                else if (t == typeof(RoomRole))
                {
                    RoomRole rr = client.GetRoomRole(userId, token, ids[0], ids[1], ids[2]);
                    return(rr as T);
                }
                else if (t == typeof(RoomConfig))
                {
                    RoomConfig c = client.GetRoomConfig(userId, token, ids[0]);
                    return(c as T);
                }
            }
            return(null);
        }
예제 #9
0
        public void UniqueID()
        {
            var roomGroup = new RoomGroup();

            Assert.NotNull(roomGroup.UniqueID);
        }
예제 #10
0
 void Start()
 {
     roomGroup = new RoomGroup(roomCount);
     roomGroup.Set();
     DrawMapGroup();
 }
예제 #11
0
        static bool Prefix(RegionAndRoomUpdater __instance)
        {
            Map map = __instance.map;

            if (!copyFrom.TryGetValue(map.uniqueID, out RegionGrid oldRegions))
            {
                return(true);
            }

            __instance.initialized = true;
            map.temperatureCache.ResetTemperatureCache();

            oldRegions.map = map; // for access to cellIndices in the iterator

            foreach (Region r in oldRegions.AllRegions_NoRebuild_InvalidAllowed)
            {
                r.cachedAreaOverlaps = null;
                r.cachedDangers.Clear();
                r.mark            = 0;
                r.reachedIndex    = 0;
                r.closedIndex     = new uint[RegionTraverser.NumWorkers];
                r.cachedCellCount = -1;
                r.mapIndex        = (sbyte)map.Index;

                if (r.door != null)
                {
                    r.door = map.ThingReplacement(r.door);
                }

                foreach (List <Thing> things in r.listerThings.listsByGroup.Concat(r.ListerThings.listsByDef.Values))
                {
                    if (things != null)
                    {
                        for (int j = 0; j < things.Count; j++)
                        {
                            if (things[j] != null)
                            {
                                things[j] = map.ThingReplacement(things[j]);
                            }
                        }
                    }
                }

                Room rm = r.Room;
                if (rm == null)
                {
                    continue;
                }

                rm.mapIndex            = (sbyte)map.Index;
                rm.cachedCellCount     = -1;
                rm.cachedOpenRoofCount = -1;
                rm.statsAndRoleDirty   = true;
                rm.stats = new DefMap <RoomStatDef, float>();
                rm.role  = null;
                rm.uniqueNeighbors.Clear();
                rm.uniqueContainedThings.Clear();

                RoomGroup rg = rm.groupInt;
                rg.tempTracker.cycleIndex = 0;
            }

            for (int i = 0; i < oldRegions.regionGrid.Length; i++)
            {
                map.regionGrid.regionGrid[i] = oldRegions.regionGrid[i];
            }

            copyFrom.Remove(map.uniqueID);

            return(false);
        }
        public static void DoCellSteadyEffects(SteadyEnvironmentEffects __instance, IntVec3 c)
        {
            Map       map2      = map(__instance);
            Room      room      = c.GetRoom(map2, RegionType.Set_All);
            bool      roofed    = map2.roofGrid.Roofed(c);
            RoomGroup roomGroup = null;

            if (room != null)
            {
                roomGroup = room.Group;
            }
            bool roomUsesOutdoorTemperature = room != null && roomGroup != null && room.UsesOutdoorTemperature;

            if ((room == null) | roomUsesOutdoorTemperature)
            {
                if (outdoorMeltAmount(__instance) > 0.0)
                {
                    map2.snowGrid.AddDepth(c, -outdoorMeltAmount(__instance));
                }
                if (!roofed && snowRate(__instance) > 1.0 / 1000.0)
                {
                    AddFallenSnowAt(__instance, c, 23f / 500f * map2.weatherManager.SnowRate);
                }
            }
            if (room != null)
            {
                bool         protectedByEdifice = ProtectedByEdifice(c, map2);
                TerrainDef   terrain            = c.GetTerrain(map2);
                List <Thing> thingList          = c.GetThingList(map2);
                for (int index = 0; index < thingList.Count; ++index)
                {
                    Thing t = thingList[index];
                    if (t is Filth filth)
                    {
                        if (!roofed && t.def.filth.rainWashes && Rand.Chance(rainRate(__instance)))
                        {
                            filth.ThinFilth();
                        }
                        if (filth.DisappearAfterTicks != 0 && filth.TicksSinceThickened > filth.DisappearAfterTicks)
                        {
                            filth.Destroy(DestroyMode.Vanish);
                        }
                    }
                    else
                    {
                        TryDoDeteriorate(__instance, t, roofed, roomUsesOutdoorTemperature, protectedByEdifice, terrain);
                    }
                }
                if (!roomUsesOutdoorTemperature && roomGroup != null)
                {
                    float temperature = roomGroup.Temperature;
                    if (temperature > 0.0)
                    {
                        float num1 = MeltAmountAt(temperature);
                        if (num1 > 0.0)
                        {
                            map2.snowGrid.AddDepth(c, -num1);
                        }
                        if (room.RegionType.Passable() && temperature > (double)AutoIgnitionTemperatureRange.min)
                        {
                            double num2 = Rand.Value;
                            if (num2 < AutoIgnitionTemperatureRange.InverseLerpThroughRange(temperature) * 0.699999988079071 && Rand.Chance(FireUtility.ChanceToStartFireIn(c, map2)))
                            {
                                FireUtility.TryStartFireIn(c, map2, 0.1f);
                            }
                            if (num2 < 0.330000013113022)
                            {
                                MoteMaker.ThrowHeatGlow(c, map2, 2.3f);
                            }
                        }
                    }
                }
            }
            map2.gameConditionManager.DoSteadyEffects(c, map2);
        }
예제 #13
0
 private void Start()
 {
     roomGroup = GameObject.Find("MapBuilder").GetComponent <MapSet>().roomGroup;
     pointPos  = new Vector2(0, 0);
 }
예제 #14
0
        private static void FloodAndSetRoomGroups2(RegionAndRoomUpdater __instance, Room start, RoomGroup roomGroup)
        {
            Stack <Room> tmpRoomStack = new Stack <Room>();

            //tmpRoomStack.Clear();
            tmpRoomStack.Push(start);
            HashSet <Room> tmpVisitedRooms = new HashSet <Room>();

            //tmpVisitedRooms.Clear();
            tmpVisitedRooms.Add(start);
            while (tmpRoomStack.Count != 0)
            {
                Room room = tmpRoomStack.Pop();
                room.Group = roomGroup;
                foreach (Room neighbor in room.Neighbors)
                {
                    if (!tmpVisitedRooms.Contains(neighbor) && ShouldBeInTheSameRoomGroup(room, neighbor))
                    {
                        tmpRoomStack.Push(neighbor);
                        tmpVisitedRooms.Add(neighbor);
                    }
                }
            }

            tmpVisitedRooms.Clear();
            tmpRoomStack.Clear();
        }
예제 #15
0
        public static bool FloodAndSetRoomGroups(RegionAndRoomUpdater __instance, Room start, RoomGroup roomGroup)
        {
            //this.tmpRoomStack.Clear();
            Stack <Room> tmpRoomStack = new Stack <Room>();

            tmpRoomStack.Push(start);
            //this.tmpVisitedRooms.Clear();
            HashSet <Room> tmpVisitedRooms = new HashSet <Room>();

            tmpVisitedRooms.Add(start);
            while (tmpRoomStack.Count != 0)
            {
                Room a = tmpRoomStack.Pop();
                a.Group = roomGroup;
                foreach (Room neighbor in a.Neighbors)
                {
                    if (!tmpVisitedRooms.Contains(neighbor) && ShouldBeInTheSameRoomGroup(a, neighbor))
                    {
                        tmpRoomStack.Push(neighbor);
                        tmpVisitedRooms.Add(neighbor);
                    }
                }
            }
            //this.tmpVisitedRooms.Clear();
            //this.tmpRoomStack.Clear();
            return(false);
        }
예제 #16
0
        public static bool EqualizeTemperaturesThroughBuilding(Building b, float rate, bool twoWay)
        {
            int   num  = 0;
            float num2 = 0f;

            if (twoWay)
            {
                for (int i = 0; i < 2; i++)
                {
                    IntVec3 intVec = (i == 0) ? (b.Position + b.Rotation.FacingCell) : (b.Position - b.Rotation.FacingCell);
                    if (intVec.InBounds(b.Map))
                    {
                        RoomGroup roomGroup = intVec.GetRoomGroup(b.Map);
                        if (roomGroup != null)
                        {
                            num2 += roomGroup.Temperature;
                            beqRoomGroups[num] = roomGroup;
                            num++;
                        }
                    }
                }
            }
            else
            {
                for (int j = 0; j < 4; j++)
                {
                    IntVec3 intVec2 = b.Position + GenAdj.CardinalDirections[j];
                    if (intVec2.InBounds(b.Map))
                    {
                        RoomGroup roomGroup2 = intVec2.GetRoomGroup(b.Map);
                        if (roomGroup2 != null)
                        {
                            num2 += roomGroup2.Temperature;
                            beqRoomGroups[num] = roomGroup2;
                            num++;
                        }
                    }
                }
            }
            if (num == 0)
            {
                return(false);
            }
            float     num3       = num2 / (float)num;
            RoomGroup roomGroup3 = b.GetRoomGroup();

            if (roomGroup3 != null)
            {
                roomGroup3.Temperature = num3;
            }
            if (num == 1)
            {
                return(false);
            }
            float num4 = 1f;

            for (int k = 0; k < num; k++)
            {
                RoomGroup roomGroupK = beqRoomGroups[k];
                if (null != roomGroupK)
                {
                    if (!roomGroupK.UsesOutdoorTemperature)
                    {
                        float temperature = roomGroupK.Temperature;
                        float num5        = (num3 - temperature) * rate;
                        float num6        = num5 / (float)roomGroupK.CellCount;
                        float num7        = roomGroupK.Temperature + num6;
                        if (num5 > 0f && num7 > num3)
                        {
                            num7 = num3;
                        }
                        else if (num5 < 0f && num7 < num3)
                        {
                            num7 = num3;
                        }
                        float num8 = Mathf.Abs((num7 - temperature) * (float)roomGroupK.CellCount / num5);
                        if (num8 < num4)
                        {
                            num4 = num8;
                        }
                    }
                }
            }
            for (int l = 0; l < num; l++)
            {
                RoomGroup roomGroupL = beqRoomGroups[l];
                if (null != roomGroupL && !roomGroupL.UsesOutdoorTemperature)
                {
                    float temperature2 = roomGroupL.Temperature;
                    float num9         = (num3 - temperature2) * rate * num4 / (float)roomGroupL.CellCount;
                    roomGroupL.Temperature += num9;
                    beqRoomGroups[l]        = roomGroupL;
                }
            }
            for (int m = 0; m < beqRoomGroups.Length; m++)
            {
                beqRoomGroups[m] = null;
            }
            return(false);
        }
예제 #17
0
    public void SpawnRoom(Transform exitDoor)
    {
        // Roll for group type
        GameObject newRoom = null;

        // Spawn regular rooms until we've reached our max count
        if (currentRooms < minRooms)
        {
            //newRoom = Instantiate(Resources.Load("DungeonRooms/Room" + Random.Range(0, roomCount)), exitDoor.position, exitDoor.rotation) as GameObject;

            // Choose a random roomPrefab from a random group
            GameObject roomPrefab = RoomGroup.ChooseRandomGroup(RoomGroups).ChooseRandomRoom().roomPrefab;
            newRoom = Instantiate(roomPrefab, exitDoor.position, exitDoor.rotation);

            RoomController newController = newRoom.GetComponent <RoomController>();
            if (!newController)
            {
                Debug.Log(newRoom.name + " is missing a room controller!");
                return;
            }

            newController.dungeonController = this;
            newController.enterDoor         = exitDoor;

            newRoom.transform.SetParent(dungeonRoot.transform);
        }
        else if (!bossSpawned)
        {
            //newRoom = Instantiate(Resources.Load("BossRooms/Room" + Random.Range(0, bossRoomCount)), exitDoor.position, exitDoor.rotation) as GameObject;
            newRoom = Instantiate(BossRoomProperties.roomPrefab, exitDoor.position, exitDoor.rotation);

            RoomController newController = newRoom.GetComponent <RoomController>();
            newController.dungeonController = this;
            newController.enterDoor         = exitDoor;

            roomList.Add(newController);
            newRoom.transform.SetParent(dungeonRoot.transform);

            bossSpawned = true;
        }
        else if (bossSpawned && finishedSpawningDungeon && !finalizedDungeon)
        {
            finalizedDungeon = true;
            GameObject plug = null;

            // If all the rooms connect properly, the nav mesh will build all connecting surfaces
            roomList[0].GetComponent <NavMeshSurface>().BuildNavMesh();

            for (int x = 0; x < roomList.Count; x++)
            {
                if (!roomList[x])
                {
                    continue;
                }

                // If this is the first room, fooooooget about it
                if (x > 0)
                {
                    roomList[x].SpawnEnemies();
                }

                // If we're in the last 4th of the dungeons, spawn a key
                if (!dungeonKeySpawned && ((float)(x) / roomList.Count) >= 0.75f)
                {
                    dungeonKeySpawned = true;
                    // If we're in the last room and we haven't spawned a key yet, do so
                    GameObject key        = Instantiate(DungeonKey);
                    int        randomNode = Random.Range(0, roomList[x].itemPlacementNodes.Length);

                    key.transform.position = roomList[x].itemPlacementNodes[randomNode].transform.position;
                    key.transform.SetParent(roomList[x].transform);
                }
            }

            // No longer needed. The first room will always be connected to the hub!
            // Add a plug to our first room's entrance

            /*plug = Instantiate(RoomPlug);
             * plug.transform.SetParent(roomList[0].GetComponent<RoomController>().enterDoor);
             * plug.transform.localPosition = Vector3.zero;
             * plug.transform.localRotation = Quaternion.identity;
             * plug.transform.SetParent(roomList[0].GetComponentInParent<RoomController>().gameObject.transform);*/

            // Add plugs to all the exits
            foreach (Transform exit in exitsLeft)
            {
                plug = Instantiate(RoomPlug);
                plug.transform.SetParent(exit);
                plug.transform.localPosition = Vector3.zero;
                plug.transform.localRotation = Quaternion.identity;
                plug.transform.SetParent(exit.GetComponentInParent <RoomController>().gameObject.transform);
            }
        }
        else
        {
            exitsLeft.Add(exitDoor);
        }
    }
예제 #18
0
 public RoomGroupViewModel(RoomGroup rg)
     : base(rg)
 {
     name.SetValue(rg.Name);
     ParentRoomGroupId = rg.ParentGroup_Id.HasValue ? rg.ParentGroup_Id.Value : -1;
 }
예제 #19
0
        public static void Initialize(EFDomainDbContext cntxt)
        {
            if (!cntxt.BedTypes.Any())
            {
                var bt = BedType.Create("TWN", "2 Twin Beds");
                cntxt.BedTypes.AddAsync(bt);
                bt = BedType.Create("DBL", "1 King Bed");
                cntxt.BedTypes.AddAsync(bt);
                bt = BedType.Create("HTW", "Hollywood Twin");
                cntxt.BedTypes.AddAsync(bt);
                bt = BedType.Create("FAM", "1 Double & 1 Twin");
                cntxt.BedTypes.AddAsync(bt);
                cntxt.SaveChangesAsync();
            }

            if (!cntxt.RoomFacilities.Any())
            {
                var f = RoomFacility.Create("TV", "TV");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("COT", "Baby Cot");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("HCH", "Baby High Chair");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("TRO", "Trolley");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("MAT", "Nursing Mat");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BRC", "Baby Resting Chair");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BBS", "Dumbo Baby Sitter");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("CCC", "Children's crockery & cutlery");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BBT", "Baby Bathtub");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("NSM", "Non-slippery bath mat");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("STB", "Stool in the Bathroom");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("PLP", "Plastic Potty");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SDL", "Safety drawer locks");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BOI", "Boiler");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("INT", "Internet Connection");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("HAR", "Hair Dryer");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BAB", "Bathrobes");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SLP", "Slippers ");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SAP", "Sun-beds and Parasol ");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("IRO", "Iron & Iron Board");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BWS", "Bathtub with Shower & WC");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SHW", "Shower Booth");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SAF", "Safe Deposit Box");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("CAB", "Cable TV");
                f = RoomFacility.Create("TEL", "Telephone");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("AIR", "Air Condition");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("WOR", "Working Desk");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("PAT", "Patch Cable");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("MIC", "Microwave Oven");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("FRD", "Refrigerator");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("MNB", "Mini Bar");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SWC", "Shower & WC");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("HCW", "Hot &Cold Water");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SOF", "Sofa Bed");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("RAI", "Rain-man Shower & WC");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("TOA", "Toaster");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("SUN", "5 Position(Sun Chairs)");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("WEL", "Welcome Package");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("DUX", "Dux Matress");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("CBA", "Children's Bathrobes");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("COS", "Cosmetic Mirror");
                cntxt.RoomFacilities.AddAsync(f);
                f = RoomFacility.Create("BTH", "Bathtub and WC");
                cntxt.RoomFacilities.AddAsync(f);
                cntxt.SaveChangesAsync();
            }


            if (!cntxt.RoomExposures.Any())
            {
                var re = RoomExposure.Create("GAV", "Garden View");
                cntxt.RoomExposures.AddAsync(re);
                re = RoomExposure.Create("POV", "Pool View");
                cntxt.RoomExposures.AddAsync(re);
                re = RoomExposure.Create("SFV", "Sea Facing View");
                cntxt.RoomExposures.AddAsync(re);
                re = RoomExposure.Create("SSV", "Side Sea View");
                cntxt.RoomExposures.AddAsync(re);
                re = RoomExposure.Create("PGV", "Pool and Garden View");
                cntxt.RoomExposures.AddAsync(re);
                re = RoomExposure.Create("BKV", "Back View");
                cntxt.RoomExposures.AddAsync(re);
                cntxt.SaveChangesAsync();
            }

            if (!cntxt.RoomGroups.Any())
            {
                var rg = RoomGroup.Create("STU", "Studio Type");
                cntxt.RoomGroups.AddAsync(rg);
                rg = RoomGroup.Create("HBT", "Studio Happy Baby Type");
                cntxt.RoomGroups.AddAsync(rg);
                rg = RoomGroup.Create("ROY", "Royal Studio Type");
                cntxt.RoomGroups.AddAsync(rg);
                rg = RoomGroup.Create("ROP", "Royal Studio Pool Access Type");
                cntxt.RoomGroups.AddAsync(rg);
                rg = RoomGroup.Create("FAM", "Family Suite Type");
                cntxt.RoomGroups.AddAsync(rg);
                rg = RoomGroup.Create("ROF", "Royal Family Suite Type");
                cntxt.RoomGroups.AddAsync(rg);
                rg = RoomGroup.Create("DLX", "Deluxe Room No Balcony Type");
                cntxt.RoomGroups.AddAsync(rg);
                cntxt.SaveChangesAsync();
            }

            if (!cntxt.RoomTypes.Any())
            {
                var stu = cntxt.RoomGroups.Where(c => c.Code == "STU").FirstOrDefault();
                var hbt = cntxt.RoomGroups.Where(c => c.Code == "HBT").FirstOrDefault();
                var roy = cntxt.RoomGroups.Where(c => c.Code == "ROY").FirstOrDefault();
                var rop = cntxt.RoomGroups.Where(c => c.Code == "ROP").FirstOrDefault();
                var fam = cntxt.RoomGroups.Where(c => c.Code == "FAM").FirstOrDefault();
                var rof = cntxt.RoomGroups.Where(c => c.Code == "ROF").FirstOrDefault();
                var dlx = cntxt.RoomGroups.Where(c => c.Code == "DLX").FirstOrDefault();


                var rt = RoomType.Create("12GAT", "Studio Garden View Terrace", stu, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12GAB", "Studio Garden View Balcony", stu, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12POT", "Studio Pool View Terrace", stu, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12POB", "Studio Pool View Balcony", stu, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12HBT", "Studio Happy Baby", hbt, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12RPA", "Royal Studio Pool Access", rop, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12ROT", "Royal Studio Terrace", roy, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("12ROB", "Royal Studio Balcony", roy, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("22POT", "Family Suite Pool View Terrace", fam, 6);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("22POB", "Family Suite Pool View Balcony", fam, 6);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("22RPA", "Royal Family Suite Pool Access", fam, 6);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("22GAB", "Family Suite Garden Balcony", fam, 6);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("22ROB", "Royal Family Suite Balcony", rof, 6);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("DLX", "Deluxe Room No Balcony", dlx, 4);
                cntxt.RoomTypes.AddAsync(rt);
                rt = RoomType.Create("22GAT", "Family Suite Garden Terrace", fam, 6);
                cntxt.RoomTypes.AddAsync(rt);
                cntxt.SaveChangesAsync();
            }

            if (!cntxt.RoomLocations.Any())
            {
                var rl = RoomLocation.Create("s", "south");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("n", "north");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B11", "Building 1 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B12", "Building 1 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B13", "Building 1 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B14", "Building 1 4th floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B21", "Building 2 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B22", "Building 2 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B23", "Building 2 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B24", "Building 2 4th floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B31", "Building 3 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B32", "Building 3 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B33", "Building 3 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B41", "Building 4 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B42", "Building 4 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B43", "Building 4 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B44", "Building 4 4th floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B51", "Building 5 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B52", "Building 5 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B53", "Building 5 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B54", "Building 5 4th floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B61", "Building 6 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B62", "Building 6 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B63", "Building 6 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B71", "Building 7 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B72", "Building 7 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B73", "Building 7 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B74", "Building 7 4th floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B81", "Building 8 1st floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B82", "Building 8 2nd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("B83", "Building 8 3rd floor");
                cntxt.RoomLocations.AddAsync(rl);
                rl = RoomLocation.Create("BL", "Lobby Building");
                cntxt.RoomLocations.AddAsync(rl);
                cntxt.SaveChangesAsync();
            }

            if (!cntxt.RoomInfos.Any())
            {
                var rt = cntxt.RoomTypes.Where(r => r.Code == "DLX").FirstOrDefault();
                var bt = cntxt.BedTypes.Where(B => B.Code == "DBL").FirstOrDefault();
                var rl = cntxt.RoomLocations.Where(r => r.Code == "BL").FirstOrDefault();
                var re = cntxt.RoomExposures.Where(e => e.Code == "POV").FirstOrDefault();

                var bkv = cntxt.RoomExposures.Where(e => e.Code == "BKV").FirstOrDefault();
                var gab = cntxt.RoomTypes.Where(r => r.Code == "22GAB").FirstOrDefault();
                var fam = cntxt.BedTypes.Where(B => B.Code == "FAM").FirstOrDefault();
                var b13 = cntxt.RoomLocations.Where(r => r.Code == "B13").FirstOrDefault();
                var gv  = cntxt.RoomExposures.Where(e => e.Code == "GV").FirstOrDefault();

                var rf1 = RoomInfo.Create("1211", rt, bt, rl, re);
                cntxt.RoomInfos.AddAsync(rf1);

                var rf2 = RoomInfo.Create("1212", rt, bt, rl, bkv);
                cntxt.RoomInfos.AddAsync(rf2);

                var rf3 = RoomInfo.Create("1301", gab, fam, b13, gv);
                cntxt.RoomInfos.AddAsync(rf3);

                cntxt.SaveChangesAsync();

                var facilities1 = cntxt.RoomFacilities.OrderBy(x => Guid.NewGuid()).Take(5).ToList();
                var facilities2 = cntxt.RoomFacilities.OrderBy(x => Guid.NewGuid()).Take(5).ToList();
                var facilities3 = cntxt.RoomFacilities.OrderBy(x => Guid.NewGuid()).Take(5).ToList();

                rf1.AddRoomRoomFacility(facilities1);
                rf2.AddRoomRoomFacility(facilities2);
                rf3.AddRoomRoomFacility(facilities3);
                cntxt.SaveChangesAsync();
            }
        }
예제 #20
0
        public static bool DangerFor(Region __instance, ref Danger __result, Pawn p)
        {
            if (Current.ProgramState == ProgramState.Playing)
            {
                if (cachedDangersForFrame(__instance) != Time.frameCount)
                {
                    lock (cachedDangers(__instance))
                    {
                        cachedDangers(__instance).Clear();
                    }
                    cachedDangersForFrame(__instance) = Time.frameCount;
                }
                else
                {
                    lock (cachedDangers(__instance)) {
                        for (int index = 0; index < cachedDangers(__instance).Count; ++index)
                        {
                            if (cachedDangers(__instance)[index].Key == p)
                            {
                                __result = cachedDangers(__instance)[index].Value;
                                return(false);
                            }
                        }
                    }
                }
            }
            Danger    danger = Danger.Unspecified;
            Room      room   = __instance.Room;
            RoomGroup group  = null;

            if (room != null)
            {
                group = room.Group;
            }
            if (room != null && group != null)
            {
                float      temperature = group.Temperature;
                FloatRange floatRange;
                if (Current.ProgramState == ProgramState.Playing)
                {
                    if (cachedSafeTemperatureRangesForFrame != Time.frameCount)
                    {
                        lock (cachedSafeTemperatureRanges)
                        {
                            cachedSafeTemperatureRanges.Clear();
                        }
                        cachedSafeTemperatureRangesForFrame = Time.frameCount;
                    }
                    lock (cachedSafeTemperatureRanges)
                    {
                        if (!cachedSafeTemperatureRanges.TryGetValue(p, out floatRange))
                        {
                            floatRange = p.SafeTemperatureRange();
                            cachedSafeTemperatureRanges.Add(p, floatRange);
                        }
                    }
                }
                else
                {
                    floatRange = p.SafeTemperatureRange();
                }
                danger = !floatRange.Includes(temperature) ? (!floatRange.ExpandedBy(80f).Includes(temperature) ? Danger.Deadly : Danger.Some) : Danger.None;
                if (Current.ProgramState == ProgramState.Playing)
                {
                    lock (cachedDangers(__instance))
                    {
                        cachedDangers(__instance).Add(new KeyValuePair <Pawn, Danger>(p, danger));
                    }
                }
            }
            __result = danger;
            return(false);
        }
예제 #21
0
 public static bool FloodAndSetRoomGroups(RegionAndRoomUpdater __instance, Room start, RoomGroup roomGroup)
 {
     if (tmpRoomStack == null)
     {
         tmpRoomStack = new Stack <Room>();
     }
     else
     {
         tmpRoomStack.Clear();
     }
     tmpRoomStack.Push(start);
     if (tmpVisitedRooms == null)
     {
         tmpVisitedRooms = new HashSet <Room>();
     }
     else
     {
         tmpVisitedRooms.Clear();
     }
     tmpVisitedRooms.Add(start);
     while (tmpRoomStack.Count != 0)
     {
         Room room = tmpRoomStack.Pop();
         room.Group = roomGroup;
         foreach (Room neighbor in room.Neighbors)
         {
             if (!tmpVisitedRooms.Contains(neighbor) && funcShouldBeInTheSameRoomGroup(__instance, room, neighbor))
             {
                 tmpRoomStack.Push(neighbor);
                 tmpVisitedRooms.Add(neighbor);
             }
         }
     }
     return(false);
 }
예제 #22
0
 //calculates euclidean distance between two groups
 private float EuclideanDist(RoomGroup groupA, RoomGroup groupB)
 {
     return(Mathf.Sqrt(Mathf.Pow((groupB.getCentre()[0] - groupA.getCentre()[0]), 2) + Mathf.Pow((groupB.getCentre()[1] - groupA.getCentre()[1]), 2)));
 }