예제 #1
0
 private static void ForEachAction(Vector3Int position, Bed bed, ref BedStateObject stateObject)
 {
     if (bed.Colony == stateObject.Colony && !stateObject.Beds.ContainsKey(bed))
     {
         stateObject.Beds.Add(bed, position);
     }
 }
예제 #2
0
        public static void CalculateBeds(Colony colony)
        {
            var cs = ColonyState.GetColonyState(colony);

            if (cs.Difficulty.Name != GameDifficulty.Normal.Name)
            {
                BedStateObject bso = new BedStateObject();
                bso.Colony = colony;
                colony.BedTracker.ForeachBedInstance(ForEachAction, ref bso);

                int happiness = 0;

                foreach (var bed in bso.Beds)
                {
                    try
                    {
                        var bedEnd = bed.Value.Position.Add(-1, 0, 0);

                        if (bed.Key.BedType == ColonyBuiltIn.ItemTypes.BEDXP)
                        {
                            bedEnd = bed.Value.Position.Add(1, 0, 0);
                        }
                        else if (bed.Key.BedType == ColonyBuiltIn.ItemTypes.BEDZN)
                        {
                            bedEnd = bed.Value.Position.Add(0, 0, -1);
                        }
                        else if (bed.Key.BedType == ColonyBuiltIn.ItemTypes.BEDZP)
                        {
                            bedEnd = bed.Value.Position.Add(0, 0, 1);
                        }

                        if (!IsHappy(bed.Value.Position, bedEnd))
                        {
                            happiness        -= 1;
                            bed.Value.IsHappy = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        SettlersLogger.LogError(ex);
                    }
                }

                CachedHappiness[colony] = happiness;
                BedCache[colony]        = bso;
            }
        }
예제 #3
0
        public static void CalculateBeds(Colony colony)
        {
            BedStateObject bso = new BedStateObject();

            bso.Colony = colony;
            ServerManager.BlockEntityTracker.BedTracker.Positions.Foreach(ForEachAction, ref bso);

            Task.Run(() =>
            {
                int happiness = 0;

                foreach (var bed in bso.Beds)
                {
                    var bedEnd = bed.Value.Add(-1, 0, 0);

                    if (bed.Key.BedType == ColonyBuiltIn.ItemTypes.BEDXP)
                    {
                        bedEnd = bed.Value.Add(1, 0, 0);
                    }
                    else if (bed.Key.BedType == ColonyBuiltIn.ItemTypes.BEDZN)
                    {
                        bedEnd = bed.Value.Add(0, 0, -1);
                    }
                    else if (bed.Key.BedType == ColonyBuiltIn.ItemTypes.BEDZP)
                    {
                        bedEnd = bed.Value.Add(0, 0, 1);
                    }

                    if (!IsHappy(bed.Value, bedEnd))
                    {
                        happiness -= 1;
                    }
                }

                CachedHappiness[colony] = happiness;
            });
        }
예제 #4
0
 private static void ForEachAction(Vector3Int position, bool bedIsUsed, BedTracker.Bed bed, ref BedStateObject stateObject)
 {
     if (bed.Colony == stateObject.Colony && !stateObject.Beds.ContainsKey(bed))
     {
         stateObject.Beds.Add(bed, new CachedBedState()
         {
             Position = position, Taken = bedIsUsed
         });
     }
 }