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 }); }
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); }
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 }); }
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(); }
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; } }
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 }); }
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); }
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(); } } }