Core - Add LevelRules class

This commit is contained in:
miku-666
2025-11-10 07:27:27 +01:00
parent 7d9f00cb6a
commit e5489daa2f
6 changed files with 37 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OMI.Formats.GameRule;
using PckStudio.Core.GameRule;
using PckStudio.Core.Interfaces;
namespace PckStudio.Core.DLC
@@ -42,14 +43,7 @@ namespace PckStudio.Core.DLC
new GameRuleFile.BoolParameter("flatworld", false),
new GameRuleFile.IntParameter("texturePackId", Identifier)
);
_gameRule.AddRule("LevelRules")
.AddRule("UpdatePlayer",
new GameRuleFile.FloatParameter("yRot", 0f),
new GameRuleFile.FloatParameter("xRot", 0f),
new GameRuleFile.IntParameter("spawnX", 0),
new GameRuleFile.IntParameter("spawnY", 0),
new GameRuleFile.IntParameter("spawnZ", 0)
);
_gameRule.AddRule(LevelRules.Default);
}
public IDLCPackage GetSkinPackage() => _skinPackage;

View File

@@ -11,6 +11,7 @@ namespace PckStudio.Core.GameRule
{
private List<AbstractGameRule> _gameRules = new List<AbstractGameRule>();
protected void AddRule(AbstractGameRule gameRule) => _gameRules.Add(gameRule);
protected void AddRules(IEnumerable<AbstractGameRule> gameRules) => _gameRules.AddRange(gameRules);
protected abstract GameRuleFile.GameRule GetGameRule();
public static implicit operator GameRuleFile.GameRule(AbstractGameRule abstractGameRule)

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using OMI.Formats.GameRule;
namespace PckStudio.Core.GameRule
{
internal sealed class LevelRules : AbstractGameRule
{
private readonly GameRuleFile.GameRuleParameter[] _parameters;
public static LevelRules Default { get; } = new LevelRules([new UpdatePlayer(Vector3.Zero, Vector2.Zero)]);
public static LevelRules GetLevelRules(MiniGameId miniGame) => new LevelRules(Enumerable.Empty<AbstractGameRule>(), new GameRuleFile.IntParameter("ruleType", (int)miniGame));
public LevelRules(IEnumerable<AbstractGameRule> gameRules, params GameRuleFile.GameRuleParameter[] parameters)
{
AddRules(gameRules);
_parameters = parameters;
}
protected override GameRuleFile.GameRule GetGameRule()
{
var gameRule = new GameRuleFile.GameRule("LevelRules");
gameRule.AddParameters(_parameters);
return gameRule;
}
}
}

View File

@@ -40,7 +40,7 @@ namespace PckStudio.Core
new GameRuleFile.IntParameter("mapSize", (int)mapSize),
new GameRuleFile.IntParameter("themeId", 0)
);
LevelRules = Grf.AddRule("LevelRules", [new GameRuleFile.IntParameter("ruleType", (int)miniGame)]);
LevelRules = Grf.AddRule(GameRule.LevelRules.GetLevelRules(miniGame));
World = world;
}

View File

@@ -102,6 +102,7 @@
<Compile Include="GameConstants.cs" />
<Compile Include="GameRule\AbstractGameRule.cs" />
<Compile Include="GameRule\DistributeItems.cs" />
<Compile Include="GameRule\LevelRules.cs" />
<Compile Include="GameRule\NamedArea.cs" />
<Compile Include="GameRule\OnGameStartSpawnPositions.cs" />
<Compile Include="GameRule\OnInitialiseWorld.cs" />

2
Vendor/OMI-Lib vendored