コード例 #1
0
        public void TriggerTransition(float delay)
        {
            Transitioning   = true;
            TransitionDelay = delay;

            Weight       = 0;
            OldWePattern = NewWePattern;
            NewWePattern = RandomWeatherPattern();
            if (NewWePattern != OldWePattern)
            {
                NewWePattern.OnBeginUse();
            }


            wsServer.SendWeatherStateUpdate(new WeatherState()
            {
                RegionX         = regionX,
                RegionZ         = regionZ,
                NewPattern      = NewWePattern.State,
                OldPattern      = OldWePattern.State,
                WindPattern     = CurWindPattern.State,
                WeatherEvent    = CurWeatherEvent?.State,
                TransitionDelay = TransitionDelay,
                Transitioning   = true,
                Weight          = Weight,
                LcgCurrentSeed  = Rand.currentSeed,
                LcgMapGenSeed   = Rand.mapGenSeed,
                LcgWorldSeed    = Rand.worldSeed
            });
        }
コード例 #2
0
        public bool SetWeatherPattern(string code, bool updateInstant)
        {
            WeatherPattern pattern = WeatherPatterns.FirstOrDefault(p => p.config.Code == code);

            if (pattern == null)
            {
                return(false);
            }

            OldWePattern    = NewWePattern;
            NewWePattern    = pattern;
            Weight          = 1;
            Transitioning   = false;
            TransitionDelay = 0;
            if (NewWePattern != OldWePattern || updateInstant)
            {
                NewWePattern.OnBeginUse();
            }

            UpdateWeatherData();

            sendState(updateInstant);

            return(true);
        }
コード例 #3
0
        internal void LoadRandomPattern()
        {
            NewWePattern = RandomWeatherPattern();
            OldWePattern = RandomWeatherPattern();

            NewWePattern.OnBeginUse();
            OldWePattern.OnBeginUse();

            CurWindPattern = WindPatterns[Rand.NextInt(WindPatterns.Length)];
            CurWindPattern.OnBeginUse();

            CurWeatherEvent = RandomWeatherEvent();
            CurWeatherEvent.OnBeginUse();

            Weight = 1;

            wsServer?.SendWeatherStateUpdate(new WeatherState()
            {
                RegionX         = regionX,
                RegionZ         = regionZ,
                NewPattern      = NewWePattern.State,
                OldPattern      = OldWePattern.State,
                WindPattern     = CurWindPattern.State,
                WeatherEvent    = CurWeatherEvent?.State,
                TransitionDelay = 0,
                Transitioning   = false,
                Weight          = Weight,
                updateInstant   = false,
                LcgCurrentSeed  = Rand.currentSeed,
                LcgMapGenSeed   = Rand.mapGenSeed,
                LcgWorldSeed    = Rand.worldSeed
            });
        }
コード例 #4
0
        public void InitDummySim()
        {
            dummySim         = new WeatherSimulationRegion(this, 0, 0);
            dummySim.IsDummy = true;
            dummySim.Initialize();

            var rand = new LCGRandom(api.World.Seed);

            rand.InitPositionSeed(3, 3);

            rainOverlayPattern = new WeatherPattern(this, GeneralConfig.RainOverlayPattern, rand, 0, 0);
            rainOverlayPattern.Initialize(0, api.World.Seed);
            rainOverlayPattern.OnBeginUse();

            rainOverlaySnap = new WeatherDataSnapshot();
        }
コード例 #5
0
        internal void FromBytes(byte[] data)
        {
            if (data == null)
            {
                LoadRandomPattern();
                NewWePattern.OnBeginUse();
            }
            else
            {
                WeatherState state = SerializerUtil.Deserialize <WeatherState>(data);

                if (state.NewPattern != null)
                {
                    NewWePattern       = WeatherPatterns[state.NewPattern.Index];
                    NewWePattern.State = state.NewPattern;
                }
                else
                {
                    NewWePattern = WeatherPatterns[0];
                }

                if (state.OldPattern != null)
                {
                    OldWePattern       = WeatherPatterns[state.OldPattern.Index];
                    OldWePattern.State = state.OldPattern;
                }
                else
                {
                    OldWePattern = WeatherPatterns[0];
                }

                if (state.WindPattern != null)
                {
                    CurWindPattern       = WindPatterns[state.WindPattern.Index];
                    CurWindPattern.State = state.WindPattern;
                }

                Weight               = state.Weight;
                TransitionDelay      = state.TransitionDelay;
                Transitioning        = state.Transitioning;
                LastUpdateTotalHours = state.LastUpdateTotalHours;
                Rand.worldSeed       = state.LcgWorldSeed;
                Rand.currentSeed     = state.LcgCurrentSeed;
                Rand.mapGenSeed      = state.LcgMapGenSeed;
            }
        }
コード例 #6
0
        public void TriggerTransition(float delay)
        {
            Transitioning   = true;
            TransitionDelay = delay;

            Weight     = 0;
            OldPattern = NewPattern;
            NewPattern = RandomPattern();
            if (NewPattern != OldPattern)
            {
                NewPattern.OnBeginUse();
            }

            ws.serverChannel.BroadcastPacket(new WeatherState()
            {
                NewPatternIndex = NewPattern.Index,
                OldPatternIndex = OldPattern.Index,
                TransitionDelay = TransitionDelay,
                Transitioning   = true
            });
        }
コード例 #7
0
        public bool SetWeatherPattern(string code, bool updateInstant)
        {
            WeatherPattern pattern = WeatherPatterns.FirstOrDefault(p => p.config.Code == code);

            if (pattern == null)
            {
                return(false);
            }

            OldWePattern    = NewWePattern;
            NewWePattern    = pattern;
            Weight          = 1;
            Transitioning   = false;
            TransitionDelay = 0;
            if (NewWePattern != OldWePattern || updateInstant)
            {
                NewWePattern.OnBeginUse();
            }

            UpdateWeatherData();

            wsServer.SendWeatherStateUpdate(new WeatherState()
            {
                RegionX         = regionX,
                RegionZ         = regionZ,
                NewPattern      = NewWePattern.State,
                OldPattern      = OldWePattern.State,
                WindPattern     = CurWindPattern.State,
                TransitionDelay = 0,
                Transitioning   = false,
                Weight          = Weight,
                updateInstant   = updateInstant,
                LcgCurrentSeed  = Rand.currentSeed,
                LcgMapGenSeed   = Rand.mapGenSeed,
                LcgWorldSeed    = Rand.worldSeed
            });

            return(true);
        }
コード例 #8
0
        internal void FromBytes(byte[] data)
        {
            if (data == null)
            {
                LoadRandomPattern();
                NewWePattern.OnBeginUse();
            }
            else
            {
                WeatherState state = SerializerUtil.Deserialize <WeatherState>(data);

                if (state.NewPattern != null)
                {
                    NewWePattern       = WeatherPatterns[state.NewPattern.Index];
                    NewWePattern.State = state.NewPattern;
                }
                else
                {
                    NewWePattern = WeatherPatterns[0];
                }

                if (state.OldPattern != null && state.OldPattern.Index < WeatherPatterns.Length)
                {
                    OldWePattern       = WeatherPatterns[state.OldPattern.Index];
                    OldWePattern.State = state.OldPattern;
                }
                else
                {
                    OldWePattern = WeatherPatterns[0];
                }

                if (state.WindPattern != null)
                {
                    CurWindPattern       = WindPatterns[state.WindPattern.Index];
                    CurWindPattern.State = state.WindPattern;
                }

                Weight               = state.Weight;
                TransitionDelay      = state.TransitionDelay;
                Transitioning        = state.Transitioning;
                LastUpdateTotalHours = state.LastUpdateTotalHours;
                Rand.worldSeed       = state.LcgWorldSeed;
                Rand.currentSeed     = state.LcgCurrentSeed;
                Rand.mapGenSeed      = state.LcgMapGenSeed;

                double nowTotalHours = ws.api.World.Calendar.TotalHours;
                // Cap that at max 1 year or we simulate forever on startup
                LastUpdateTotalHours = Math.Max(LastUpdateTotalHours, nowTotalHours - 12 * 12 * 24);

                SnowAccumSnapshots = new RingArray <SnowAccumSnapshot>((int)(ws.api.World.Calendar.DaysPerYear * ws.api.World.Calendar.HoursPerDay) + 1, state.SnowAccumSnapshots);

                if (state.WeatherEvent != null)
                {
                    CurWeatherEvent       = WeatherEvents[state.WeatherEvent.Index];
                    CurWeatherEvent.State = state.WeatherEvent;
                }

                if (CurWeatherEvent == null)
                {
                    CurWeatherEvent = RandomWeatherEvent();
                    CurWeatherEvent.OnBeginUse();
                }
            }
        }