Use Context in mission loader
This commit is contained in:
parent
b89a4d6154
commit
b223d53824
|
@ -1,5 +1,4 @@
|
||||||
using Godot;
|
using Godot;
|
||||||
using KeepersCompound.LGS;
|
|
||||||
using KeepersCompound.LGS.Database;
|
using KeepersCompound.LGS.Database;
|
||||||
using KeepersCompound.LGS.Database.Chunks;
|
using KeepersCompound.LGS.Database.Chunks;
|
||||||
using KeepersCompound.TMV.UI;
|
using KeepersCompound.TMV.UI;
|
||||||
|
@ -41,18 +40,13 @@ public partial class Mission : Node3D
|
||||||
|
|
||||||
string _campaignName;
|
string _campaignName;
|
||||||
string _missionName;
|
string _missionName;
|
||||||
ResourcePathManager _installPaths;
|
|
||||||
DbFile _file;
|
DbFile _file;
|
||||||
TextureLoader _textureLoader;
|
TextureLoader _textureLoader;
|
||||||
ModelLoader _modelLoader;
|
|
||||||
List<ShaderMaterial> _materials;
|
List<ShaderMaterial> _materials;
|
||||||
Vector2I _lmLayerMask;
|
Vector2I _lmLayerMask;
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
var extractPath = ProjectSettings.GlobalizePath($"user://extracted/tmp");
|
|
||||||
_installPaths = new ResourcePathManager(extractPath);
|
|
||||||
_modelLoader = new ModelLoader(_installPaths);
|
|
||||||
_materials = new List<ShaderMaterial>();
|
_materials = new List<ShaderMaterial>();
|
||||||
_lmLayerMask = new Vector2I(~0, ~0);
|
_lmLayerMask = new Vector2I(~0, ~0);
|
||||||
|
|
||||||
|
@ -60,12 +54,11 @@ public partial class Mission : Node3D
|
||||||
lightmapToggler.Setup(this);
|
lightmapToggler.Setup(this);
|
||||||
|
|
||||||
var missionSelector = GetNode<Control>("%MissionSelector") as MissionSelector;
|
var missionSelector = GetNode<Control>("%MissionSelector") as MissionSelector;
|
||||||
missionSelector.pathManager = _installPaths;
|
|
||||||
missionSelector.MissionSelected += (string campaign, string mission) =>
|
missionSelector.MissionSelected += (string campaign, string mission) =>
|
||||||
{
|
{
|
||||||
_campaignName = campaign;
|
_campaignName = campaign;
|
||||||
_missionName = mission;
|
_missionName = mission;
|
||||||
FileName = _installPaths.GetMissionPath(campaign, mission);
|
FileName = Context.Instance.PathManager.GetMissionPath(campaign, mission);
|
||||||
Build = true;
|
Build = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -115,7 +108,7 @@ public partial class Mission : Node3D
|
||||||
{
|
{
|
||||||
ClearMap();
|
ClearMap();
|
||||||
|
|
||||||
_textureLoader = new TextureLoader(_installPaths, _campaignName);
|
_textureLoader = new TextureLoader(_campaignName);
|
||||||
Timing.TimeStage("DbFile Parse", () => _file = new(FileName));
|
Timing.TimeStage("DbFile Parse", () => _file = new(FileName));
|
||||||
Timing.TimeStage("Register Textures", () => UseChunk<TxList>("TXLIST", RegisterTextures));
|
Timing.TimeStage("Register Textures", () => UseChunk<TxList>("TXLIST", RegisterTextures));
|
||||||
Timing.TimeStage("Build WR", () => UseChunk<WorldRep>("WREXT", BuildWrMeshes));
|
Timing.TimeStage("Build WR", () => UseChunk<WorldRep>("WREXT", BuildWrMeshes));
|
||||||
|
@ -249,7 +242,10 @@ public partial class Mission : Node3D
|
||||||
var rawRot = brush.angle;
|
var rawRot = brush.angle;
|
||||||
var rot = new Vector3(rawRot.Y, rawRot.Z, rawRot.X) * 360 / ushort.MaxValue;
|
var rot = new Vector3(rawRot.Y, rawRot.Z, rawRot.X) * 360 / ushort.MaxValue;
|
||||||
var scale = scaleProp == null ? Vector3.One : scaleProp.scale.ToGodotVec3(false);
|
var scale = scaleProp == null ? Vector3.One : scaleProp.scale.ToGodotVec3(false);
|
||||||
var model = Timing.TimeStage("Get Models", () => { return _modelLoader.Load(_campaignName, modelName); });
|
var model = Timing.TimeStage("Get Models", () =>
|
||||||
|
{
|
||||||
|
return Context.Instance.ModelLoader.Load(_campaignName, modelName);
|
||||||
|
});
|
||||||
if (model != null)
|
if (model != null)
|
||||||
{
|
{
|
||||||
model.Position = pos;
|
model.Position = pos;
|
||||||
|
@ -264,15 +260,16 @@ public partial class Mission : Node3D
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var pathManager = Context.Instance.PathManager;
|
||||||
path = prop.value;
|
path = prop.value;
|
||||||
if (path.StartsWith("fam", StringComparison.OrdinalIgnoreCase))
|
if (path.StartsWith("fam", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
path = _installPaths.GetTexturePath(_campaignName, path);
|
path = pathManager.GetTexturePath(_campaignName, path);
|
||||||
return path != null;
|
return path != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// gonna assume obj lol
|
// gonna assume obj lol
|
||||||
path = _installPaths.GetObjectTexturePath(_campaignName, path);
|
path = pathManager.GetObjectTexturePath(_campaignName, path);
|
||||||
|
|
||||||
return path != null;
|
return path != null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,19 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Godot;
|
using Godot;
|
||||||
using KeepersCompound.LGS;
|
|
||||||
|
|
||||||
namespace KeepersCompound.TMV;
|
namespace KeepersCompound.TMV;
|
||||||
|
|
||||||
public partial class TextureLoader
|
public partial class TextureLoader
|
||||||
{
|
{
|
||||||
private readonly ResourcePathManager _pathManager;
|
|
||||||
private readonly string _fmName;
|
private readonly string _fmName;
|
||||||
private readonly List<ImageTexture> _textureCache = new();
|
private readonly List<ImageTexture> _textureCache = new();
|
||||||
private readonly Dictionary<int, int> _idMap = new();
|
private readonly Dictionary<int, int> _idMap = new();
|
||||||
private readonly Dictionary<int, string> _idPathMap = new();
|
private readonly Dictionary<int, string> _idPathMap = new();
|
||||||
private readonly Dictionary<string, int> _pathMap = new();
|
private readonly Dictionary<string, int> _pathMap = new();
|
||||||
|
|
||||||
public TextureLoader(ResourcePathManager pathManager, string fmName)
|
public TextureLoader(string fmName)
|
||||||
{
|
{
|
||||||
_pathManager = pathManager;
|
|
||||||
_fmName = fmName;
|
_fmName = fmName;
|
||||||
LoadDefaultTexture();
|
LoadDefaultTexture();
|
||||||
}
|
}
|
||||||
|
@ -37,7 +34,7 @@ public partial class TextureLoader
|
||||||
private bool Load(int id, string path)
|
private bool Load(int id, string path)
|
||||||
{
|
{
|
||||||
var loaded = false;
|
var loaded = false;
|
||||||
string texPath = _pathManager.GetTexturePath(_fmName, path);
|
string texPath = Context.Instance.PathManager.GetTexturePath(_fmName, path);
|
||||||
|
|
||||||
if (texPath != null)
|
if (texPath != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using Godot;
|
using Godot;
|
||||||
using KeepersCompound.LGS;
|
|
||||||
|
|
||||||
namespace KeepersCompound.TMV.UI;
|
namespace KeepersCompound.TMV.UI;
|
||||||
|
|
||||||
|
@ -8,8 +7,6 @@ public partial class MissionSelector : Control
|
||||||
public event MissionSelectedEventHandler MissionSelected;
|
public event MissionSelectedEventHandler MissionSelected;
|
||||||
public delegate void MissionSelectedEventHandler(string campaign, string mission);
|
public delegate void MissionSelectedEventHandler(string campaign, string mission);
|
||||||
|
|
||||||
public ResourcePathManager pathManager;
|
|
||||||
|
|
||||||
private FileDialog _FolderSelect;
|
private FileDialog _FolderSelect;
|
||||||
private LineEdit _FolderPath;
|
private LineEdit _FolderPath;
|
||||||
private Button _BrowseButton;
|
private Button _BrowseButton;
|
||||||
|
@ -52,7 +49,7 @@ public partial class MissionSelector : Control
|
||||||
private void SetInstallPath(string path)
|
private void SetInstallPath(string path)
|
||||||
{
|
{
|
||||||
_FolderPath.Text = path;
|
_FolderPath.Text = path;
|
||||||
if (pathManager.Init(path))
|
if (Context.Instance.PathManager.Init(path))
|
||||||
{
|
{
|
||||||
BuildCampaignList();
|
BuildCampaignList();
|
||||||
}
|
}
|
||||||
|
@ -64,6 +61,7 @@ public partial class MissionSelector : Control
|
||||||
_Missions.Clear();
|
_Missions.Clear();
|
||||||
_LoadButton.Disabled = true;
|
_LoadButton.Disabled = true;
|
||||||
|
|
||||||
|
var pathManager = Context.Instance.PathManager;
|
||||||
_Campaigns.AddItem("Original Missions");
|
_Campaigns.AddItem("Original Missions");
|
||||||
foreach (var campaign in pathManager.GetCampaignNames())
|
foreach (var campaign in pathManager.GetCampaignNames())
|
||||||
{
|
{
|
||||||
|
@ -76,6 +74,7 @@ public partial class MissionSelector : Control
|
||||||
_Missions.Clear();
|
_Missions.Clear();
|
||||||
_LoadButton.Disabled = true;
|
_LoadButton.Disabled = true;
|
||||||
|
|
||||||
|
var pathManager = Context.Instance.PathManager;
|
||||||
var campaignName = _Campaigns.GetItemText((int)idx);
|
var campaignName = _Campaigns.GetItemText((int)idx);
|
||||||
var missionNames = pathManager.GetMissionNames(idx == 0 ? null : campaignName);
|
var missionNames = pathManager.GetMissionNames(idx == 0 ? null : campaignName);
|
||||||
foreach (var mission in missionNames)
|
foreach (var mission in missionNames)
|
||||||
|
|
Loading…
Reference in New Issue