Skip to content

Commit 43c6f10

Browse files
authored
Merge pull request #275 from project-fika/season-rework
Season rework
2 parents b307943 + c10640a commit 43c6f10

File tree

2 files changed

+44
-36
lines changed

2 files changed

+44
-36
lines changed

Fika.Core/Coop/GameMode/CoopGame.cs

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,22 @@ namespace Fika.Core.Coop.GameMode
5353
/// </summary>
5454
public sealed class CoopGame : BaseLocalGame<EftGamePlayerOwner>, IBotGame, IFikaGame
5555
{
56-
public string InfiltrationPoint;
56+
public string InfiltrationPoint { get; internal set; }
5757
public ExitStatus ExitStatus { get; set; } = ExitStatus.Survived;
58-
public string ExitLocation { get; set; } = null;
59-
public ISpawnSystem SpawnSystem;
58+
public string ExitLocation { get; set; }
59+
public ISpawnSystem SpawnSystem { get; internal set; }
6060
public Dictionary<string, Player> Bots = [];
6161
public List<int> ExtractedPlayers { get; } = [];
62-
public string SpawnId;
63-
public bool InteractablesInitialized { get; set; } = false;
64-
public bool HasReceivedLoot { get; set; } = false;
65-
public List<ThrowWeapItemClass> ThrownGrenades;
66-
public bool WeatherReady;
67-
public bool RaidStarted { get; set; }
62+
public string SpawnId { get; internal set; }
63+
public bool InteractablesInitialized { get; internal set; }
64+
public bool HasReceivedLoot { get; internal set; }
65+
public List<ThrowWeapItemClass> ThrownGrenades { get; internal set; }
66+
public bool WeatherReady { get; internal set; }
67+
public bool RaidStarted { get; internal set; }
68+
public FikaDynamicAI DynamicAI { get; private set; }
69+
public RaidSettings RaidSettings { get; private set; }
70+
public byte[] HostLootItems { get; private set; }
71+
public GClass1315 LootItems { get; internal set; } = [];
6872

6973
private readonly Dictionary<int, int> botQueue = [];
7074
private Coroutine extractRoutine;
@@ -85,11 +89,7 @@ public sealed class CoopGame : BaseLocalGame<EftGamePlayerOwner>, IBotGame, IFik
8589
private TimeSpan? sessionTime;
8690
private BotStateManager botStateManager;
8791
private ESeason season;
88-
89-
public FikaDynamicAI DynamicAI { get; private set; }
90-
public RaidSettings RaidSettings { get; private set; }
91-
public byte[] HostLootItems { get; private set; }
92-
public GClass1315 LootItems { get; internal set; } = [];
92+
9393
BossSpawnScenario IBotGame.BossSpawnScenario
9494
{
9595
get
@@ -131,6 +131,7 @@ public ESeason Season
131131
{
132132
season = value;
133133
Logger.LogInfo($"Setting Season to: {value}");
134+
WeatherReady = true;
134135
}
135136
}
136137

@@ -1479,6 +1480,8 @@ private async Task SetStatus(LocalPlayer myPlayer, LobbyEntry.ELobbyStatus statu
14791480
/// <returns></returns>
14801481
public override async Task vmethod_1(BotControllerSettings controllerSettings, ISpawnSystem spawnSystem)
14811482
{
1483+
await GenerateWeathers();
1484+
14821485
GameWorld gameWorld = Singleton<GameWorld>.Instance;
14831486
gameWorld.RegisterRestrictableZones();
14841487

@@ -1599,22 +1602,26 @@ public override async Task vmethod_1(BotControllerSettings controllerSettings, I
15991602
GameWorld_0.RegisterBorderZones();
16001603
}
16011604

1602-
public override IEnumerator vmethod_5(Action runCallback)
1605+
private async Task GenerateWeathers()
16031606
{
1607+
if (Location_0.Id == "laboratory")
1608+
{
1609+
Logger.LogInfo("Location is 'Laboratory', skipping weather generation");
1610+
Season = ESeason.Summer;
1611+
OfflineRaidSettingsMenuPatch_Override.UseCustomWeather = false;
1612+
1613+
return;
1614+
}
1615+
16041616
if (WeatherController.Instance != null)
16051617
{
16061618
SetMatchmakerStatus(LocaleUtils.UI_INIT_WEATHER.Localized());
16071619
Logger.LogInfo("Generating and initializing weather...");
16081620
if (isServer)
16091621
{
1610-
Task<GClass1310> weatherTask = iSession.WeatherRequest();
1611-
while (!weatherTask.IsCompleted)
1612-
{
1613-
yield return new WaitForEndOfFrame();
1614-
}
1615-
GClass1310 weather = weatherTask.Result;
1616-
Season = weather.Season;
1617-
SeasonsSettings = weather.SeasonsSettings;
1622+
GClass1310 weather = await iSession.WeatherRequest();
1623+
Season = iSession.Season;
1624+
SeasonsSettings = iSession.SeasonsSettings;
16181625
if (!OfflineRaidSettingsMenuPatch_Override.UseCustomWeather)
16191626
{
16201627
WeatherClasses = weather.Weathers;
@@ -1623,28 +1630,26 @@ public override IEnumerator vmethod_5(Action runCallback)
16231630
}
16241631
else
16251632
{
1626-
Task getWeather = GetWeather();
1627-
while (!getWeather.IsCompleted)
1628-
{
1629-
yield return new WaitForEndOfFrame();
1630-
}
1633+
await GetWeather();
16311634
WeatherController.Instance.method_0(WeatherClasses);
16321635
}
16331636
}
16341637

1638+
OfflineRaidSettingsMenuPatch_Override.UseCustomWeather = false;
1639+
}
1640+
1641+
public override IEnumerator vmethod_5(Action runCallback)
1642+
{
16351643
SetMatchmakerStatus(LocaleUtils.UI_FINISHING_RAID_INIT.Localized());
16361644

16371645
GameWorld_0.TriggersModule = gameObject.AddComponent<LocalClientTriggersModule>();
16381646
GameWorld_0.FillLampControllers();
16391647

1640-
WeatherReady = true;
1641-
OfflineRaidSettingsMenuPatch_Override.UseCustomWeather = false;
1642-
16431648
Class442 seasonController = new();
16441649
GameWorld_0.GInterface29_0 = seasonController;
16451650

16461651
#if DEBUG
1647-
Logger.LogWarning("Running season handler");
1652+
Logger.LogWarning($"Running season handler for season: {Season}");
16481653
#endif
16491654
Task runSeason = seasonController.Run(Season, SeasonsSettings);
16501655
while (!runSeason.IsCompleted)
@@ -1665,10 +1670,13 @@ private async Task GetWeather()
16651670
FikaClient client = Singleton<FikaClient>.Instance;
16661671
client.SendData(ref packet, DeliveryMethod.ReliableUnordered);
16671672

1668-
while (WeatherClasses == null)
1673+
while (!WeatherReady)
16691674
{
16701675
await Task.Delay(1000);
1671-
client.SendData(ref packet, DeliveryMethod.ReliableUnordered);
1676+
if (!WeatherReady)
1677+
{
1678+
client.SendData(ref packet, DeliveryMethod.ReliableUnordered);
1679+
}
16721680
}
16731681
}
16741682

Fika.Core/Coop/GameMode/IFikaGame.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public interface IFikaGame
1616

1717
public void Stop(string profileId, ExitStatus exitStatus, string exitName, float delay = 0f);
1818

19-
public ESeason Season { get; set; }
19+
public ESeason Season { get; internal set; }
2020

21-
public SeasonsSettingsClass SeasonsSettings { get; set; }
21+
public SeasonsSettingsClass SeasonsSettings { get; internal set; }
2222
}
2323
}

0 commit comments

Comments
 (0)