Skip to content

Commit

Permalink
Add AvoidSkippedMaps
Browse files Browse the repository at this point in the history
  • Loading branch information
BigBang1112 committed Aug 11, 2024
1 parent 7b26dbd commit fbe4c37
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 10 deletions.
15 changes: 15 additions & 0 deletions Src/RandomizerTMF.Logic/RandomizerRules.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class RandomizerRules
};

public Dictionary<ESite, HashSet<uint>> BannedMaps { get; init; } = [];
public bool AvoidSkippedMaps { get; set; }

public void Serialize(BinaryWriter writer, int version)
{
Expand All @@ -37,6 +38,13 @@ public void Serialize(BinaryWriter writer, int version)
writer.Write(id);
}
}

if (version < 2)
{
return;
}

writer.Write(AvoidSkippedMaps);
}

public void Deserialize(BinaryReader r, int version)
Expand All @@ -63,5 +71,12 @@ public void Deserialize(BinaryReader r, int version)
}
BannedMaps.Add(site, ids);
}

if (version < 2)
{
return;
}

AvoidSkippedMaps = r.ReadBoolean();
}
}
26 changes: 16 additions & 10 deletions Src/RandomizerTMF.Logic/Services/MapDownloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,17 +108,25 @@ public async Task<bool> PrepareNewMapAsync(Session currentSession, CancellationT
return false;
}

if (uint.TryParse(trackId, out var trackIdUint)
&& config.Rules.BannedMaps.TryGetValue(site, out var bannedTrackIds)
if (uint.TryParse(trackId, out var trackIdUint)
&& config.Rules.BannedMaps.TryGetValue(site, out var bannedTrackIds)
&& bannedTrackIds.Contains(trackIdUint))
{
logger.LogInformation("Track {trackId} is banned.", trackId);
return false;
}
{
logger.LogInformation("Track {trackId} is banned.", trackId);
return false;
}

// With the ID, it is possible to immediately download the track Gbx and process it with GBX.NET
var tmxLink = requestUri.ToString();

using var trackGbxResponse = await DownloadMapByTrackIdAsync(requestUri.Host, trackId, cancellationToken);
if (config.Rules.AvoidSkippedMaps && currentSession.SkippedMaps.Values.Any(x => x.TmxLink == tmxLink))
{
logger.LogInformation("Track {trackId} has been played already.", trackId);
return false;
}

// With the ID, it is possible to immediately download the track Gbx and process it with GBX.NET

using var trackGbxResponse = await DownloadMapByTrackIdAsync(requestUri.Host, trackId, cancellationToken);

var map = await GetMapFromResponseAsync(trackGbxResponse, cancellationToken);

Expand All @@ -136,8 +144,6 @@ public async Task<bool> PrepareNewMapAsync(Session currentSession, CancellationT

var mapSavePath = await SaveMapAsync(trackGbxResponse, map.MapUid, cancellationToken);

var tmxLink = requestUri.ToString();

currentSession.Map = new SessionMap(map, randomResponse.Headers.Date ?? DateTimeOffset.Now, tmxLink) // The map should be ready to be played now
{
FilePath = mapSavePath
Expand Down

0 comments on commit fbe4c37

Please sign in to comment.