Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
6773a0e
more debuggame vibe coding
AngeloTadeucci Jul 23, 2025
02a7e09
suggestions
AngeloTadeucci Jul 26, 2025
21642aa
fixes
AngeloTadeucci Jul 26, 2025
ca61b28
merge files from mettaur
AngeloTadeucci Jul 26, 2025
cacb9a3
format
AngeloTadeucci Jul 26, 2025
72b581b
.
AngeloTadeucci Jul 26, 2025
6ea637d
fixes
AngeloTadeucci Jul 27, 2025
c03df72
good
AngeloTadeucci Jul 27, 2025
d7bea61
portals + format + fixes
AngeloTadeucci Jul 27, 2025
32cf844
refactor(camera): unify camera matrix handling and update projection …
AngeloTadeucci Jul 29, 2025
629f778
feat(camera): add ICameraController interface and implement in FreeCa…
AngeloTadeucci Jul 29, 2025
1cca122
refactor: centralize wireframe mode in DebugGraphicsContext for consi…
AngeloTadeucci Jul 29, 2025
b8778f4
refactor: remove redundant movement input flag in FreeCameraController
AngeloTadeucci Jul 29, 2025
52aaa87
fix: improve player follow UI with dynamic status and position display
AngeloTadeucci Aug 2, 2025
2678490
feat(debug): add detailed field entity info and toggle options for po…
AngeloTadeucci Aug 2, 2025
df9c149
feat(debug): add actor selection and highlight in debug field renderer
AngeloTadeucci Aug 2, 2025
496a34a
feat(debug): add player move mode with optional force move in debug r…
AngeloTadeucci Aug 2, 2025
267dd3f
.
AngeloTadeucci Aug 3, 2025
4c4a73a
Refactor
AngeloTadeucci Aug 9, 2025
9e955e0
imgui refactor + plots
AngeloTadeucci Aug 9, 2025
9346473
format
AngeloTadeucci Aug 9, 2025
2af8902
small refactors
AngeloTadeucci Aug 9, 2025
623732b
format
AngeloTadeucci Aug 9, 2025
03ce117
revert
AngeloTadeucci Aug 9, 2025
904482f
Suggestions
AngeloTadeucci Aug 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions Maple2.Server.DebugGame/Extensions/XmlExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Diagnostics.CodeAnalysis;
using System.Xml;

namespace Maple2.Server.DebugGame.Extensions;

public static class XmlExtensions {
public static bool TryGetAttribute(this XmlElement element, string name, [NotNullWhen(returnValue: true)] out string? value) {
value = null;

if (!element.HasAttribute(name)) {
return false;
}

value = element.GetAttribute(name);

return true;
}
}
5 changes: 5 additions & 0 deletions Maple2.Server.DebugGame/Graphics/Assets/Asset.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace Maple2.Server.DebugGame.Graphics.Assets;

public class Asset {

}
13 changes: 13 additions & 0 deletions Maple2.Server.DebugGame/Graphics/Assets/AssetManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace Maple2.Server.DebugGame.Graphics.Assets;

//public enum AssetType

public class AssetManager {
public AssetManager? Parent { get; init; }

public AssetManager(AssetManager? parent = null) {
Parent = parent;
}


}
117 changes: 113 additions & 4 deletions Maple2.Server.DebugGame/Graphics/Assets/CoreModels.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,20 @@ public class CoreModels {
public Mesh Quad { get; init; }
public Mesh Cube { get; init; }
public Mesh WireCube { get; init; }
public Mesh Cylinder { get; init; }
public Mesh WireCylinder { get; init; }

public CoreModels(DebugGraphicsContext context) {
Context = context;
Quad = CreateQuad();

var cubes = CreateCubes();
(Mesh solid, Mesh wire) cubes = CreateCubes();
(Mesh solid, Mesh wire) cylinders = CreateCylinders();

Cube = cubes.solid;
WireCube = cubes.wire;
Cylinder = cylinders.solid;
WireCylinder = cylinders.wire;
}

private Mesh CreateQuad() {
Expand Down Expand Up @@ -120,9 +125,9 @@ private Mesh CreateQuad() {
List<AttributeBinding> attributeBinding = [];

for (int i = 0; i < cubeSolidIndices.Length; i += 3) {
PositionBinding vertA = cubeVertices[cubeSolidIndices[i + 0]];
PositionBinding vertB = cubeVertices[cubeSolidIndices[i + 1]];
PositionBinding vertC = cubeVertices[cubeSolidIndices[i + 2]];
PositionBinding vertA = cubeVertices[cubeSolidIndices[i] + 0];
PositionBinding vertB = cubeVertices[cubeSolidIndices[i] + 1];
PositionBinding vertC = cubeVertices[cubeSolidIndices[i] + 2];
Comment thread
AngeloTadeucci marked this conversation as resolved.

positionBinding.Add(vertA);
positionBinding.Add(vertB);
Expand All @@ -145,5 +150,109 @@ private Mesh CreateQuad() {

return (cubeSolidMesh, cubeWireMesh);
}

private (Mesh solid, Mesh wire) CreateCylinders() {
const int segments = 16; // Number of segments around the cylinder
const float radius = 0.5f;
const float height = 1.0f;

Ms2MeshData meshData = new Ms2MeshData {
PrimitiveCount = 2,
};

List<PositionBinding> vertices = [];
List<uint> wireIndices = [];
List<uint> solidIndices = [];

// Create vertices for bottom circle (y = 0)
for (int i = 0; i < segments; i++) {
float angle = (float) (2 * Math.PI * i / segments);
float x = radius * MathF.Cos(angle);
float z = radius * MathF.Sin(angle);
vertices.Add(new PositionBinding(new Vector3(x, 0, z)));
}

// Create vertices for top circle (y = height)
for (int i = 0; i < segments; i++) {
float angle = (float) (2 * Math.PI * i / segments);
float x = radius * MathF.Cos(angle);
float z = radius * MathF.Sin(angle);
vertices.Add(new PositionBinding(new Vector3(x, height, z)));
}

// Add center vertices for caps
vertices.Add(new PositionBinding(new Vector3(0, 0, 0))); // Bottom center
vertices.Add(new PositionBinding(new Vector3(0, height, 0))); // Top center

int bottomCenter = segments * 2;
int topCenter = segments * 2 + 1;

// Create wire frame indices
// Bottom circle
for (int i = 0; i < segments; i++) {
wireIndices.Add((uint) i);
wireIndices.Add((uint) ((i + 1) % segments));
}

// Top circle
for (int i = 0; i < segments; i++) {
wireIndices.Add((uint) (segments + i));
wireIndices.Add((uint) (segments + (i + 1) % segments));
}

// Vertical lines
for (int i = 0; i < segments; i++) {
wireIndices.Add((uint) i);
wireIndices.Add((uint) (segments + i));
}

// Create solid indices
// Bottom cap triangles
for (int i = 0; i < segments; i++) {
solidIndices.Add((uint) bottomCenter);
solidIndices.Add((uint) ((i + 1) % segments));
solidIndices.Add((uint) i);
}

// Top cap triangles
for (int i = 0; i < segments; i++) {
solidIndices.Add((uint) topCenter);
solidIndices.Add((uint) (segments + i));
solidIndices.Add((uint) (segments + (i + 1) % segments));
}

// Side triangles
for (int i = 0; i < segments; i++) {
int next = (i + 1) % segments;

// First triangle
solidIndices.Add((uint) i);
solidIndices.Add((uint) (segments + i));
solidIndices.Add((uint) next);

// Second triangle
solidIndices.Add((uint) next);
solidIndices.Add((uint) (segments + i));
solidIndices.Add((uint) (segments + next));
}

// Create wire mesh
meshData.SetPositionBinding(vertices.ToArray());
meshData.SetAttributeBinding(vertices.Select(_ => new AttributeBinding(Vector3.UnitY, 0xFFFFFFFF, Vector2.Zero)).ToArray());
meshData.IsTriangleMesh = false;
meshData.SetIndexBuffer(wireIndices.ToArray());

Mesh cylinderWireMesh = new Mesh(Context);
cylinderWireMesh.UploadData(meshData);

// Create solid mesh
meshData.IsTriangleMesh = true;
meshData.SetIndexBuffer(solidIndices.ToArray());

Mesh cylinderSolidMesh = new Mesh(Context);
cylinderSolidMesh.UploadData(meshData);

return (cylinderSolidMesh, cylinderWireMesh);
}
}

Loading