Partly working texture rendering
This commit is contained in:
parent
d405a9b5db
commit
c9353f0100
|
@ -98,6 +98,7 @@ public class DbFile
|
||||||
{
|
{
|
||||||
// "AI_ROOM_DB" => new AiRoomDb(),
|
// "AI_ROOM_DB" => new AiRoomDb(),
|
||||||
// "AICONVERSE" => new AiConverseChunk(),
|
// "AICONVERSE" => new AiConverseChunk(),
|
||||||
|
"TXLIST" => new TxList(),
|
||||||
"WREXT" => new WorldRep(),
|
"WREXT" => new WorldRep(),
|
||||||
_ => new GenericChunk(),
|
_ => new GenericChunk(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,6 +6,7 @@ using KeepersCompound.TMV.UI;
|
||||||
using RectpackSharp;
|
using RectpackSharp;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace KeepersCompound;
|
namespace KeepersCompound;
|
||||||
|
|
||||||
|
@ -18,11 +19,16 @@ public partial class Mission : Node3D
|
||||||
public bool Build = false;
|
public bool Build = false;
|
||||||
[Export]
|
[Export]
|
||||||
public bool Clear = false;
|
public bool Clear = false;
|
||||||
|
[Export]
|
||||||
|
public bool Dump = false;
|
||||||
|
|
||||||
DbFile _file;
|
DbFile _file;
|
||||||
|
List<Image> _textures; // TODO: Make these textures :)
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
_textures = new List<Image>();
|
||||||
|
|
||||||
var missionSelector = GetNode<Control>("%MissionSelector") as MissionSelector;
|
var missionSelector = GetNode<Control>("%MissionSelector") as MissionSelector;
|
||||||
missionSelector.LoadMission += (string path) =>
|
missionSelector.LoadMission += (string path) =>
|
||||||
{
|
{
|
||||||
|
@ -69,6 +75,10 @@ public partial class Mission : Node3D
|
||||||
ClearMap();
|
ClearMap();
|
||||||
|
|
||||||
_file = new(FileName);
|
_file = new(FileName);
|
||||||
|
var textureList = (TxList)_file.Chunks["TXLIST"];
|
||||||
|
// LoadTextures(textureList);
|
||||||
|
if (Dump) DumpTextureList(textureList);
|
||||||
|
|
||||||
var wr = (WorldRep)_file.Chunks["WREXT"];
|
var wr = (WorldRep)_file.Chunks["WREXT"];
|
||||||
|
|
||||||
foreach (var cell in wr.Cells)
|
foreach (var cell in wr.Cells)
|
||||||
|
@ -152,6 +162,10 @@ public partial class Mission : Node3D
|
||||||
rawColour += lightmap.GetPixel(l, x, y);
|
rawColour += lightmap.GetPixel(l, x, y);
|
||||||
}
|
}
|
||||||
var colour = new Color(MathF.Min(rawColour.X, 1.0f), MathF.Min(rawColour.Y, 1.0f), MathF.Min(rawColour.Z, 1.0f), MathF.Min(rawColour.W, 1.0f));
|
var colour = new Color(MathF.Min(rawColour.X, 1.0f), MathF.Min(rawColour.Y, 1.0f), MathF.Min(rawColour.Z, 1.0f), MathF.Min(rawColour.W, 1.0f));
|
||||||
|
|
||||||
|
// !HACK: lol just overwriting the lightmap :xdd:
|
||||||
|
// var texIdx = cell.RenderPolys[rect.Id].TextureId;
|
||||||
|
// colour = _textures[texIdx].GetPixel((int)x, (int)y);
|
||||||
image.SetPixel((int)(rect.X + x), (int)(rect.Y + y), colour);
|
image.SetPixel((int)(rect.X + x), (int)(rect.Y + y), colour);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -289,4 +303,58 @@ public partial class Mission : Node3D
|
||||||
|
|
||||||
return uvIdxs;
|
return uvIdxs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LoadTextures(TxList textureList)
|
||||||
|
{
|
||||||
|
// TODO: This has hardcoded .png extension and relies on you placing extracted and converted images in godot user directory
|
||||||
|
var count = textureList.ItemCount;
|
||||||
|
for (var i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
var item = textureList.Items[i];
|
||||||
|
var path = "/";
|
||||||
|
for (var j = 0; j < item.Tokens.Length; j++)
|
||||||
|
{
|
||||||
|
var token = item.Tokens[j];
|
||||||
|
if (token == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
path += $"{textureList.Tokens[token - 1]}/";
|
||||||
|
}
|
||||||
|
path += item.Name + ".png"; // Hardcoded extension!
|
||||||
|
|
||||||
|
if (File.Exists(FileName + path))
|
||||||
|
{
|
||||||
|
path = FileName + path;
|
||||||
|
}
|
||||||
|
else if (File.Exists(ProjectSettings.GlobalizePath($"user://textures{path}")))
|
||||||
|
{
|
||||||
|
path = ProjectSettings.GlobalizePath($"user://textures{path}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
path = "user://textures/jorge.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Dump) GD.Print($"Loading texture: {path}");
|
||||||
|
// _textures.Add(ImageTexture.CreateFromImage(Image.LoadFromFile(path)));
|
||||||
|
_textures.Add(Image.LoadFromFile(path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void DumpTextureList(TxList textureList)
|
||||||
|
{
|
||||||
|
GD.Print($"TXLIST:\n BlockSize: {textureList.BlockSize}\n ItemCount: {textureList.ItemCount}\n TokenCount: {textureList.TokenCount}\n Tokens:");
|
||||||
|
for (var i = 0; i < textureList.TokenCount; i++)
|
||||||
|
{
|
||||||
|
GD.Print($" {i}: {textureList.Tokens[i]}");
|
||||||
|
}
|
||||||
|
GD.Print($" Items:");
|
||||||
|
for (var i = 0; i < textureList.ItemCount; i++)
|
||||||
|
{
|
||||||
|
var item = textureList.Items[i];
|
||||||
|
GD.Print($" {i}:\n Tokens: [{item.Tokens[0]}, {item.Tokens[1]}, {item.Tokens[2]}, {item.Tokens[3]}]\n Name: {item.Name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -15,6 +15,7 @@ ssao_enabled = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.110309, 0.187101, -0.461656)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.110309, 0.187101, -0.461656)
|
||||||
script = ExtResource("1_xhqt7")
|
script = ExtResource("1_xhqt7")
|
||||||
FileName = "/home/jarrod/Dev/thief/de-specs/test_data/rose-garden.mis"
|
FileName = "/home/jarrod/Dev/thief/de-specs/test_data/rose-garden.mis"
|
||||||
|
Dump = true
|
||||||
|
|
||||||
[node name="Camera3D" type="Camera3D" parent="."]
|
[node name="Camera3D" type="Camera3D" parent="."]
|
||||||
script = ExtResource("2_w5otl")
|
script = ExtResource("2_w5otl")
|
||||||
|
|
Loading…
Reference in New Issue