feat added entities and components and added failing textcomponent

This commit is contained in:
2025-07-14 00:14:45 +02:00
parent d04c0a6e15
commit f2958fa9fa
98 changed files with 4006 additions and 180 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -3,32 +3,32 @@
"WorkspaceRootPath": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\WindowManager.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\WindowManager.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Engine.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\TextComponent.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Engine.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\TextComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Logger.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Logger.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Component.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\Component.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\SDL3.def||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:SDL3.def||{8B382828-6202-11D1-8870-0000F87579D2}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Engine.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TransformComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\TransformComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Entity.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\Entity.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
}
],
"DocumentGroupContainers": [
@ -38,95 +38,116 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 4,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Engine.h",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.h",
"RelativeDocumentMoniker": "src\\core\\Engine.h",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.h",
"RelativeToolTip": "src\\core\\Engine.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"DocumentIndex": 5,
"Title": "TransformComponent.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TransformComponent.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\TransformComponent.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TransformComponent.hpp",
"RelativeToolTip": "src\\game\\components\\TransformComponent.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T00:30:33.574Z",
"EditorCaption": ""
"WhenOpened": "2025-07-13T20:31:15.964Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "WindowManager.h",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.h",
"RelativeDocumentMoniker": "src\\core\\WindowManager.h",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.h",
"RelativeToolTip": "src\\core\\WindowManager.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T00:30:23.261Z",
"DocumentIndex": 0,
"Title": "TextComponent.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.cpp",
"RelativeDocumentMoniker": "src\\game\\components\\TextComponent.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.cpp",
"RelativeToolTip": "src\\game\\components\\TextComponent.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAPAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-13T20:09:50.139Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "SDL3.def",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\SDL3.def",
"RelativeDocumentMoniker": "SDL3.def",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\SDL3.def",
"RelativeToolTip": "SDL3.def",
"ViewState": "AgIAAAAAAAAAAAAAAAAAALwEAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001913|",
"WhenOpened": "2025-07-12T23:40:30.165Z"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "Logger.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Logger.cpp",
"RelativeDocumentMoniker": "src\\core\\Logger.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Logger.cpp",
"RelativeToolTip": "src\\core\\Logger.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:31:49.016Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "WindowManager.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.cpp",
"RelativeDocumentMoniker": "src\\core\\WindowManager.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.cpp",
"RelativeToolTip": "src\\core\\WindowManager.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:31:48.358Z",
"EditorCaption": ""
"Title": "Entity.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Entity.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\Entity.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Entity.hpp",
"RelativeToolTip": "src\\game\\components\\Entity.hpp",
"ViewState": "AgIAAAwAAAAAAAAAAAAAABoAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T19:25:40.407Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Component.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Component.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\Component.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Component.hpp",
"RelativeToolTip": "src\\game\\components\\Component.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T19:24:03.306Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "TextComponent.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\TextComponent.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.hpp",
"RelativeToolTip": "src\\game\\components\\TextComponent.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T19:18:06.662Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Engine.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.cpp",
"RelativeDocumentMoniker": "src\\core\\Engine.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.cpp",
"RelativeToolTip": "src\\core\\Engine.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAbAAAAAAAAAA==",
"ViewState": "AgIAAEsAAAAAAAAAAAAAAFkAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:30:21.367Z",
"WhenOpened": "2025-07-13T18:23:56.384Z",
"EditorCaption": ""
},
}
]
}
]
},
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"FloatingWindowState": {
"Id": "09bdcdd6-978b-49f3-a0e1-d42915841f24",
"Display": 1,
"X": 215,
"Y": 195,
"Width": 1553,
"Height": 721,
"WindowState": 2
},
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "main.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\main.cpp",
"RelativeDocumentMoniker": "src\\main.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\main.cpp",
"RelativeToolTip": "src\\main.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:27:27.198Z",
"Title": "Engine.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.hpp",
"RelativeDocumentMoniker": "src\\core\\Engine.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.hpp",
"RelativeToolTip": "src\\core\\Engine.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAACAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T18:21:30.176Z",
"EditorCaption": ""
}
]

View File

@ -3,32 +3,32 @@
"WorkspaceRootPath": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\WindowManager.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\WindowManager.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Engine.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\TextComponent.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Engine.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\TextComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Logger.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Logger.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Component.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\Component.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\SDL3.def||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:SDL3.def||{8B382828-6202-11D1-8870-0000F87579D2}"
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\core\\Engine.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TransformComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\TransformComponent.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
},
{
"AbsoluteMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Entity.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
"RelativeMoniker": "D:0:0:{5653811A-38D1-4D9D-9446-A417E8557584}|ShadowCrestGameEngine.vcxproj|solutionrelative:src\\game\\components\\Entity.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
}
],
"DocumentGroupContainers": [
@ -38,95 +38,116 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 4,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Engine.h",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.h",
"RelativeDocumentMoniker": "src\\core\\Engine.h",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.h",
"RelativeToolTip": "src\\core\\Engine.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"DocumentIndex": 5,
"Title": "TransformComponent.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TransformComponent.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\TransformComponent.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TransformComponent.hpp",
"RelativeToolTip": "src\\game\\components\\TransformComponent.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAB8AAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T00:30:33.574Z",
"EditorCaption": ""
"WhenOpened": "2025-07-13T20:31:15.964Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "WindowManager.h",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.h",
"RelativeDocumentMoniker": "src\\core\\WindowManager.h",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.h",
"RelativeToolTip": "src\\core\\WindowManager.h",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T00:30:23.261Z",
"DocumentIndex": 0,
"Title": "TextComponent.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.cpp",
"RelativeDocumentMoniker": "src\\game\\components\\TextComponent.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.cpp",
"RelativeToolTip": "src\\game\\components\\TextComponent.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-13T20:09:50.139Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "SDL3.def",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\SDL3.def",
"RelativeDocumentMoniker": "SDL3.def",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\SDL3.def",
"RelativeToolTip": "SDL3.def",
"ViewState": "AgIAAAAAAAAAAAAAAAAAALwEAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001913|",
"WhenOpened": "2025-07-12T23:40:30.165Z"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "Logger.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Logger.cpp",
"RelativeDocumentMoniker": "src\\core\\Logger.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Logger.cpp",
"RelativeToolTip": "src\\core\\Logger.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:31:49.016Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "WindowManager.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.cpp",
"RelativeDocumentMoniker": "src\\core\\WindowManager.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\WindowManager.cpp",
"RelativeToolTip": "src\\core\\WindowManager.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:31:48.358Z",
"EditorCaption": ""
"Title": "Entity.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Entity.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\Entity.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Entity.hpp",
"RelativeToolTip": "src\\game\\components\\Entity.hpp",
"ViewState": "AgIAAAwAAAAAAAAAAAAAABoAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T19:25:40.407Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Component.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Component.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\Component.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\Component.hpp",
"RelativeToolTip": "src\\game\\components\\Component.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T19:24:03.306Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "TextComponent.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.hpp",
"RelativeDocumentMoniker": "src\\game\\components\\TextComponent.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\game\\components\\TextComponent.hpp",
"RelativeToolTip": "src\\game\\components\\TextComponent.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T19:18:06.662Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Engine.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.cpp",
"RelativeDocumentMoniker": "src\\core\\Engine.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.cpp",
"RelativeToolTip": "src\\core\\Engine.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAbAAAAAAAAAA==",
"ViewState": "AgIAAEsAAAAAAAAAAAAAAFkAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:30:21.367Z",
"WhenOpened": "2025-07-13T18:23:56.384Z",
"EditorCaption": ""
},
}
]
}
]
},
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"FloatingWindowState": {
"Id": "09bdcdd6-978b-49f3-a0e1-d42915841f24",
"Display": 1,
"X": 215,
"Y": 195,
"Width": 1553,
"Height": 721,
"WindowState": 2
},
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "main.cpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\main.cpp",
"RelativeDocumentMoniker": "src\\main.cpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\main.cpp",
"RelativeToolTip": "src\\main.cpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
"WhenOpened": "2025-07-12T23:27:27.198Z",
"Title": "Engine.hpp",
"DocumentMoniker": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.hpp",
"RelativeDocumentMoniker": "src\\core\\Engine.hpp",
"ToolTip": "C:\\Users\\steev\\Desktop\\ShadowCrestGameEngine\\src\\core\\Engine.hpp",
"RelativeToolTip": "src\\core\\Engine.hpp",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAACAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
"WhenOpened": "2025-07-13T18:21:30.176Z",
"EditorCaption": ""
}
]

Binary file not shown.

Binary file not shown.

View File

@ -2,3 +2,5 @@ C:\Users\steev\Desktop\ShadowCrestGameEngine\src\core\Engine.cpp;C:\Users\steev\
C:\Users\steev\Desktop\ShadowCrestGameEngine\src\core\Logger.cpp;C:\Users\steev\Desktop\ShadowCrestGameEngine\ShadowCr.5653811a\x64\Debug\Logger.obj
C:\Users\steev\Desktop\ShadowCrestGameEngine\src\core\WindowManager.cpp;C:\Users\steev\Desktop\ShadowCrestGameEngine\ShadowCr.5653811a\x64\Debug\WindowManager.obj
C:\Users\steev\Desktop\ShadowCrestGameEngine\src\main.cpp;C:\Users\steev\Desktop\ShadowCrestGameEngine\ShadowCr.5653811a\x64\Debug\main.obj
C:\Users\steev\Desktop\ShadowCrestGameEngine\src\systems\Renderer.cpp;C:\Users\steev\Desktop\ShadowCrestGameEngine\ShadowCr.5653811a\x64\Debug\Renderer.obj
C:\Users\steev\Desktop\ShadowCrestGameEngine\src\systems\Renderer.hpp;C:\Users\steev\Desktop\ShadowCrestGameEngine\ShadowCr.5653811a\x64\Debug\Renderer.obj

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@ -1,2 +1,2 @@
^C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\ENGINE.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\LOGGER.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\MAIN.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\WINDOWMANAGER.OBJ
^C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\ENGINE.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\LOGGER.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\MAIN.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\RENDERER.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\RENDERER.OBJ|C:\USERS\STEEV\DESKTOP\SHADOWCRESTGAMEENGINE\SHADOWCR.5653811A\X64\DEBUG\WINDOWMANAGER.OBJ
C:\Users\steev\Desktop\ShadowCrestGameEngine\ShadowCr.5653811a\x64\Debug\ShadowCrestGameEngine.ilk

Binary file not shown.

Binary file not shown.

View File

@ -105,12 +105,12 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(ProjectDir)/Vendored/SDL/include;$(ProjectDir)/libs;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ProjectDIr)/vendored/SDL3_ttf-3.2.2/include;$(ProjectDir)/vendored/SDL/include;$(ProjectDir)/libs;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(ProjectDir)/libs</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(ProjectDir)/libs/*.lib</AdditionalLibraryDirectories>
<AdditionalDependencies>$(ProjectDir)libs/SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -132,12 +132,19 @@
<ClCompile Include="src\core\Engine.cpp" />
<ClCompile Include="src\core\Logger.cpp" />
<ClCompile Include="src\core\WindowManager.cpp" />
<ClCompile Include="src\game\components\TextComponent.cpp" />
<ClCompile Include="src\main.cpp" />
<ClCompile Include="src\systems\Renderer.cpp" />
<ClCompile Include="src\systems\Renderer.hpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\core\Engine.h" />
<ClInclude Include="src\core\Logger.h" />
<ClInclude Include="src\core\WindowManager.h" />
<ClInclude Include="src\core\Engine.hpp" />
<ClInclude Include="src\core\Logger.hpp" />
<ClInclude Include="src\core\WindowManager.hpp" />
<ClInclude Include="src\game\components\Component.hpp" />
<ClInclude Include="src\game\components\Entity.hpp" />
<ClInclude Include="src\game\components\TextComponent.hpp" />
<ClInclude Include="src\game\components\TransformComponent.hpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -19,6 +19,27 @@
<Filter Include="Headerdateien\core">
<UniqueIdentifier>{dab3d0c3-1768-433c-86d1-ac8cb6dbeb21}</UniqueIdentifier>
</Filter>
<Filter Include="Headerdateien\systems">
<UniqueIdentifier>{266ca74b-e2bf-4558-a165-4f1f6bc4d09c}</UniqueIdentifier>
</Filter>
<Filter Include="Quelldateien\systems">
<UniqueIdentifier>{cf2b49e9-84b3-45c7-93aa-5f954e717ab4}</UniqueIdentifier>
</Filter>
<Filter Include="Headerdateien\game">
<UniqueIdentifier>{53f59132-4a9c-48c2-a4b3-b60c846757e3}</UniqueIdentifier>
</Filter>
<Filter Include="Headerdateien\game\components">
<UniqueIdentifier>{30ef3058-6b07-462a-abbd-4163bb41917f}</UniqueIdentifier>
</Filter>
<Filter Include="Quelldateien\game">
<UniqueIdentifier>{ef88eeaa-5dcd-4259-8891-e90fa0fd7ab9}</UniqueIdentifier>
</Filter>
<Filter Include="Quelldateien\game\components">
<UniqueIdentifier>{2b83c1db-d09d-4c6b-b964-6f50ecdb6246}</UniqueIdentifier>
</Filter>
<Filter Include="Headerdateien\game\Entities">
<UniqueIdentifier>{2881d119-111d-413c-a9fe-105bda2c6f1d}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\main.cpp">
@ -33,16 +54,37 @@
<ClCompile Include="src\core\WindowManager.cpp">
<Filter>Quelldateien\core</Filter>
</ClCompile>
<ClCompile Include="src\systems\Renderer.hpp">
<Filter>Headerdateien\systems</Filter>
</ClCompile>
<ClCompile Include="src\systems\Renderer.cpp">
<Filter>Quelldateien\systems</Filter>
</ClCompile>
<ClCompile Include="src\game\components\TextComponent.cpp">
<Filter>Quelldateien\game\components</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\core\Engine.h">
<ClInclude Include="src\core\Engine.hpp">
<Filter>Headerdateien\core</Filter>
</ClInclude>
<ClInclude Include="src\core\Logger.h">
<ClInclude Include="src\core\Logger.hpp">
<Filter>Headerdateien\core</Filter>
</ClInclude>
<ClInclude Include="src\core\WindowManager.h">
<ClInclude Include="src\core\WindowManager.hpp">
<Filter>Headerdateien\core</Filter>
</ClInclude>
<ClInclude Include="src\game\components\TextComponent.hpp">
<Filter>Headerdateien\game\components</Filter>
</ClInclude>
<ClInclude Include="src\game\components\Component.hpp">
<Filter>Headerdateien\game\components</Filter>
</ClInclude>
<ClInclude Include="src\game\components\Entity.hpp">
<Filter>Headerdateien\game\Entities</Filter>
</ClInclude>
<ClInclude Include="src\game\components\TransformComponent.hpp">
<Filter>Headerdateien\game\components</Filter>
</ClInclude>
</ItemGroup>
</Project>

BIN
libs/SDL3_ttf.dll Normal file

Binary file not shown.

BIN
libs/SDL3_ttf.lib Normal file

Binary file not shown.

BIN
libs/SDL3_ttf.pdb Normal file

Binary file not shown.

0
src/Renderer.cpp Normal file
View File

0
src/Renderer.hpp Normal file
View File

View File

@ -1,10 +1,14 @@
#include "Engine.h"
#include "Engine.hpp"
#include "WindowManager.hpp"
#include "../systems/Renderer.hpp"
#include "../game/components/TextComponent.hpp"
#include <iostream>
#include <SDL3/SDL.h>
#include "WindowManager.h"
#include <SDL3_ttf/SDL_ttf.h>
bool running = true;
WindowManager *wm = nullptr;
Renderer renderer;
bool Engine::Init() {
if (!SDL_Init(SDL_INIT_VIDEO)) {
@ -12,6 +16,11 @@ bool Engine::Init() {
return false;
}
if (!TTF_Init()) {
std::cerr << "TTF_Init: failed" << SDL_GetError() << "\n";
return false;
}
wm = new WindowManager();
if (!wm->InitWindow("ShadowCrest", 800, 600)) {
@ -19,25 +28,66 @@ bool Engine::Init() {
return false;
}
if (!renderer.Init(wm->GetWindow())) return false;
return true;
}
void Engine::Run() {
SDL_Event event;
while (running) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_EVENT_QUIT) {
running = false;
}
}
SDL_Delay(16);
renderer.Clear();
// game logic here
TextComponent* text = new TextComponent(
"Hallo Welt", "assets/fonts/Roboto.ttf", 24, SDL_Color{ 255, 255, 255, 255 }
);
text->Init(renderer.GetSDLRenderer());
renderer.Present();
}
}
/*
GetFPS: calculates FPS the engine can execute at call
*/
int Engine::GetFPS() {
this->oldTime = newTime;
this->newTime = SDL_GetTicks();
this->FPS = 1.f / (float(this->newTime - this->oldTime) / 1000.f);
// prevent nois (fps numbers below 0) from beeing written to the FPS counter and do rewrite it when the value wouldn't change
if (this->FPS < 0) this->FPS = this->lastFPS;
if (this->lastFPS != this->FPS) this->lastFPS = this->FPS;
return this->FPS;
}
void Engine::Shutdown() {
// empty variables that have been set by the engine itself
this->FPS = 0;
this->lastFPS = 0;
this->newTime = 0;
this->oldTime = 0;
// safely close down every system
if (wm != nullptr) {
wm->Close();
}
// stop sdl systems
SDL_Quit();
}

View File

@ -1,8 +0,0 @@
#pragma once
class Engine {
public:
bool Init();
void Run();
void Shutdown();
};

17
src/core/Engine.hpp Normal file
View File

@ -0,0 +1,17 @@
#pragma once
#include <iostream>
#include <SDL3/SDL.h>
class Engine {
public:
bool Init();
void Run();
void Shutdown();
int GetFPS();
private:
int lastFPS = 0;
int FPS = 0;
Uint64 oldTime = 0;
Uint64 newTime = 0;
};

0
src/core/Logger.hpp Normal file
View File

View File

@ -1,4 +1,4 @@
#include "WindowManager.h"
#include "WindowManager.hpp"
#include <iostream>
#include <SDL3/SDL.h>
@ -16,4 +16,9 @@ void WindowManager::Draw() {
void WindowManager::Close() {
SDL_DestroyWindow(window);
}
SDL_Window* WindowManager::GetWindow()
{
return window;
}

View File

@ -1,8 +1,12 @@
#pragma once
#include <SDL3/SDL.h>
class WindowManager {
public:
bool InitWindow(const char* name, int width, int height);
void Draw();
void Close();
SDL_Window* GetWindow();
};

View File

@ -0,0 +1,10 @@
#pragma once
class Component {
public:
virtual ~Component() = default;
virtual void Init() {}
virtual void Update(float deltaTime) {}
virtual void Render() {}
};

View File

@ -0,0 +1,42 @@
#pragma once
#include <vector>
#include <memory>
#include <type_traits>
#include "Component.hpp"
class Entity {
public:
void AddComponent(std::shared_ptr<Component> component) {
component->Init();
components.push_back(component);
}
template<typename T, typename... Args>
std::shared_ptr<T> AddComponent(Args&&... args) {
static_assert(std::is_base_of<Component, T>::value, "T must be a Component");
auto comp = std::make_shared<T>(std::forward<Args>(args)...);
AddComponent(comp);
return comp;
}
template<typename T>
std::shared_ptr<T> GetComponent() {
static_assert(std::is_base_of<Component, T>::value, "T must be a Component");
for (auto& comp : components) {
auto casted = std::dynamic_pointer_cast<T>(comp);
if (casted) {
return casted;
}
}
return nullptr;
}
void Update(float deltaTime) {
for (auto& c : components) {
c->Update(deltaTime);
}
}
private:
std::vector<std::shared_ptr<Component>> components;
};

View File

@ -0,0 +1,48 @@
#include "TextComponent.hpp"
#include <SDL3_ttf/SDL_ttf.h>
TextComponent::TextComponent(const std::string& text, const std::string& fontPath, int fontSize, SDL_Color color)
: text(text), fontPath(fontPath), fontSize(fontSize), color(color) {
}
TextComponent::~TextComponent() {
if (texture) SDL_DestroyTexture(texture);
if (font) TTF_CloseFont(font);
}
void TextComponent::Init(SDL_Renderer* renderer) {
font = TTF_OpenFont(fontPath.c_str(), fontSize);
if (!font) {
SDL_Log("Failed to load font: %s", SDL_GetError());
return;
}
// TODO: implement a way to resize
SDL_Surface* surface = TTF_RenderText_Blended(font, text.c_str(), 10, color);
if (!surface) {
SDL_Log("Failed to render text surface: %s", SDL_GetError());
return;
}
texture = SDL_CreateTextureFromSurface(renderer, surface);
destRect = { 0, 0, (float)surface->w, (float)surface->h };
SDL_DestroySurface(surface);
}
void TextComponent::Update(float dt) {
// nothing dynamic for now
}
void TextComponent::Render(SDL_Renderer* renderer) {
if (texture) {
SDL_RenderTexture(renderer, texture, nullptr, &destRect);
}
}
void TextComponent::SetText(const std::string& newText) {
if (newText != text) {
text = newText;
// Re-render in Init() or a helper function you could create
}
}

View File

@ -0,0 +1,28 @@
#pragma once
#include "Component.hpp"
#include <SDL3/SDL.h>
#include <SDL3_ttf/SDL_ttf.h>
#include <string>
class TextComponent : public Component {
public:
TextComponent(const std::string& text, const std::string& fontPath, int fontSize, SDL_Color color);
~TextComponent();
void Init(SDL_Renderer* renderer);
void Update(float dt);
void Render(SDL_Renderer* renderer);
void SetText(const std::string& newText);
private:
std::string text;
std::string fontPath;
int fontSize;
SDL_Color color;
SDL_Texture* texture = nullptr;
SDL_FRect destRect;
TTF_Font* font = nullptr;
};

View File

@ -0,0 +1,33 @@
#pragma once
#include "Component.hpp"
struct Vector2 {
float x = 0.0f;
float y = 0.0f;
Vector2() = default;
Vector2(float x, float y) : x(x), y(y) {}
Vector2 operator+(const Vector2& other) const {
return Vector2(x + other.x, y + other.y);
}
Vector2& operator+=(const Vector2& other) {
x += other.x;
y += other.y;
return *this;
}
};
class TransformComponent : public Component {
public:
Vector2 position;
float rotation = 0.0f;
Vector2 scale{ 1.0f, 1.0f };
TransformComponent() = default;
TransformComponent(float x, float y) : position(x,y) {}
void Init() override {}
void Update(float deltaTime) override {}
};

View File

@ -0,0 +1,42 @@
#pragma once
#include <vector>
#include <memory>
#include <type_traits>
#include "Component.hpp"
class Entity {
public:
void AddComponent(std::shared_ptr<Component> component) {
component->Init();
components.push_back(component);
}
template<typename T, typename... Args>
std::shared_ptr<T> AddComponent(Args&&... args) {
static_assert(std::is_base_of<Component, T>::value, "T must be a Component");
auto comp = std::make_shared<T>(std::forward<Args>(args)...);
AddComponent(comp);
return comp;
}
template<typename T>
std::shared_ptr<T> GetComponent() {
static_assert(std::is_base_of<Component, T>::value, "T must be a Component");
for (auto& comp : components) {
auto casted = std::dynamic_pointer_cast<T>(comp);
if (casted) {
return casted;
}
}
return nullptr;
}
void Update(float deltaTime) {
for (auto& c : components) {
c->Update(deltaTime);
}
}
private:
std::vector<std::shared_ptr<Component>> components;
};

View File

@ -1,4 +1,4 @@
#include "core/Engine.h"
#include "core/Engine.hpp"
#include <iostream>
#include <SDL3/SDL.h> // Nur f<>r SDL_GetError()

62
src/systems/Renderer.cpp Normal file
View File

@ -0,0 +1,62 @@
#include "Renderer.hpp"
#include <iostream>
#include <SDL3/SDL.h>
#include <SDL3_ttf/SDL_ttf.h>
// Init creates a renderer with a window attached
bool Renderer::Init(SDL_Window* window) {
renderer = SDL_CreateRenderer(window, nullptr);
if (!renderer) {
std::cerr << "Renderer Init Failed: " << SDL_GetError() << std::endl;
return false;
}
return true;
}
// Clear handles clearing the background from its previous image
void Renderer::Clear() {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // Black background
SDL_RenderClear(renderer);
}
// Present displays the current frame buffer
void Renderer::Present() {
SDL_RenderPresent(renderer);
}
// Shutdown handles stopping the renderer
void Renderer::Shutdown() {
if (renderer) {
SDL_DestroyRenderer(renderer);
renderer = nullptr;
}
}
/**
Handles drawing a rectangle with given color
x int sets the x position
y int sets the y position
w int sets the witdh
h int sets the height
color SDL_Color sets which color the rectangle has
*/
void Renderer::DrawRect(int x, int y, int w, int h, SDL_Color color) {
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a);
SDL_FRect rect = { static_cast<float>(x), static_cast<float>(y),
static_cast<float>(w), static_cast<float>(h) };
SDL_RenderFillRect(renderer, &rect); // SDL3 nutzt FRect
}
SDL_Texture* Renderer::DrawText(const char* message, const char* fontFile, int fontSize, SDL_Color color) {
return nullptr;
}
void Renderer::DrawTexture(SDL_Texture* texture, int x, int y, int w, int h) {
SDL_FRect dst = { static_cast<float>(x), static_cast<float>(y),
static_cast<float>(w), static_cast<float>(h) };
SDL_RenderTexture(renderer, texture, nullptr, &dst);
}

20
src/systems/Renderer.hpp Normal file
View File

@ -0,0 +1,20 @@
#pragma once
#include <SDL3/SDL.h>
class Renderer {
public:
bool Init(SDL_Window* window);
void Clear();
void Present();
void Shutdown();
void DrawRect(int x, int y, int w, int h, SDL_Color color);
SDL_Texture* DrawText(const char* message, const char* fontFile, int fontSize, SDL_Color color);
void DrawTexture(SDL_Texture* texture, int x, int y, int w, int h);
SDL_Renderer* GetSDLRenderer() const { return renderer; }
private:
SDL_Renderer* renderer = nullptr;
};

View File

@ -0,0 +1 @@
a1ce3670aec736ecbf0936c43f2f0cc53aa61e5b

View File

@ -0,0 +1,39 @@
# Using this package
This package contains SDL3_ttf built for Visual Studio.
To use this package, edit your project properties:
- Add the include directory to "VC++ Directories" -> "Include Directories"
- Add the lib/_arch_ directory to "VC++ Directories" -> "Library Directories"
- Add SDL3_ttf.lib to Linker -> Input -> "Additional Dependencies"
- Copy lib/_arch_/SDL3_ttf.dll to your project directory.
# Documentation
An API reference and additional documentation is available at:
https://wiki.libsdl.org/SDL3_ttf
# Discussions
## Discord
You can join the official Discord server at:
https://discord.com/invite/BwpFGBWsv8
## Forums/mailing lists
You can join SDL development discussions at:
https://discourse.libsdl.org/
Once you sign up, you can use the forum through the website or as a mailing list from your email client.
## Announcement list
You can sign up for the low traffic announcement list at:
https://www.libsdl.org/mailing-list.php

View File

@ -0,0 +1,17 @@
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

View File

@ -0,0 +1,23 @@
SDL_ttf 3.0
This library is a wrapper around the FreeType and Harfbuzz libraries, allowing you to use TrueType fonts to render text in SDL applications.
The latest version of this library is available from GitHub:
https://github.com/libsdl-org/SDL_ttf/releases
Installation instructions and a quick introduction is available in
[INSTALL.md](INSTALL.md)
This library is distributed under the terms of the zlib license,
available in [LICENSE.txt](LICENSE.txt).
This library also uses the following libraries:
- FreeType, licensed under the [FTL](https://gitlab.freedesktop.org/freetype/freetype/-/blob/master/docs/FTL.TXT)
- HarfBuzz, licensed under the [MIT license](https://github.com/harfbuzz/harfbuzz/blob/main/COPYING)
- PlutoSVG, licensed under the [MIT license](https://github.com/sammycage/plutosvg/blob/master/LICENSE)
- PlutoVG, licensed under the [MIT license](https://github.com/sammycage/plutovg/blob/master/LICENSE)
Enjoy!
Sam Lantinga (slouken@libsdl.org)

View File

@ -0,0 +1,80 @@
# SDL3_ttf CMake configuration file:
# This file is meant to be placed in a cmake subfolder of SDL3_ttf-devel-3.2.2-VC.zip
include(FeatureSummary)
set_package_properties(SDL3_ttf PROPERTIES
URL "https://www.libsdl.org/projects/SDL_ttf/"
DESCRIPTION "Support for TrueType (.ttf) font files with Simple Directmedia Layer"
)
cmake_minimum_required(VERSION 3.0...3.28)
set(SDL3_ttf_FOUND TRUE)
set(SDLTTF_VENDORED TRUE)
set(SDLTTF_HARFBUZZ TRUE)
set(SDLTTF_FREETYPE TRUE)
if(SDL_CPU_X86)
set(_sdl3_ttf_arch_subdir "x86")
elseif(SDL_CPU_X64 OR SDL_CPU_ARM64EC)
set(_sdl3_ttf_arch_subdir "x64")
elseif(SDL_CPU_ARM64)
set(_sdl3_ttf_arch_subdir "arm64")
else()
set(SDL3_mixer_FOUND FALSE)
return()
endif()
set(_sdl3_ttf_incdir "${CMAKE_CURRENT_LIST_DIR}/../include")
set(_sdl3_ttf_library "${CMAKE_CURRENT_LIST_DIR}/../lib/${_sdl3_ttf_arch_subdir}/SDL3_ttf.lib")
set(_sdl3_ttf_dll "${CMAKE_CURRENT_LIST_DIR}/../lib/${_sdl3_ttf_arch_subdir}/SDL3_ttf.dll")
# All targets are created, even when some might not be requested though COMPONENTS.
# This is done for compatibility with CMake generated SDL3_ttf-target.cmake files.
set(SDL3_ttf_SDL3_ttf-shared_FOUND TRUE)
if(NOT TARGET SDL3_ttf::SDL3_ttf-shared)
add_library(SDL3_ttf::SDL3_ttf-shared SHARED IMPORTED)
set_target_properties(SDL3_ttf::SDL3_ttf-shared
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_sdl3_ttf_incdir}"
IMPORTED_IMPLIB "${_sdl3_ttf_library}"
IMPORTED_LOCATION "${_sdl3_ttf_dll}"
COMPATIBLE_INTERFACE_BOOL "SDL3_SHARED"
INTERFACE_SDL3_SHARED "ON"
)
endif()
unset(_sdl3_ttf_arch_subdir)
unset(_sdl3_ttf_incdir)
unset(_sdl3_ttf_library)
unset(_sdl3_ttf_dll)
set(SDL3_ttf_SDL3_ttf-static_FOUND TRUE)
set(SDL3_ttf_SDL3_ttf_FOUND FALSE)
if(SDL3_ttf_SDL3_ttf-hared_FOUND OR SDL3_ttf_SDL3_ttf-static_FOUND)
set(SDL3_ttf_SDL3_ttf_FOUND TRUE)
endif()
function(_sdl_create_target_alias_compat NEW_TARGET TARGET)
if(CMAKE_VERSION VERSION_LESS "3.18")
# Aliasing local targets is not supported on CMake < 3.18, so make it global.
add_library(${NEW_TARGET} INTERFACE IMPORTED)
set_target_properties(${NEW_TARGET} PROPERTIES INTERFACE_LINK_LIBRARIES "${TARGET}")
else()
add_library(${NEW_TARGET} ALIAS ${TARGET})
endif()
endfunction()
# Make sure SDL3_ttf::SDL3_ttf always exists
if(NOT TARGET SDL3_ttf::SDL3_ttf)
if(TARGET SDL3_ttf::SDL3_ttf-shared)
_sdl_create_target_alias_compat(SDL3_ttf::SDL3_ttf SDL3_ttf::SDL3_ttf-shared)
endif()
endif()
check_required_components(SDL3_ttf)

View File

@ -0,0 +1,34 @@
# SDL3_ttf CMake version configuration file:
# This file is meant to be placed in a cmake subfolder of SDL3_ttf-devel-3.2.2-VC.zip
set(PACKAGE_VERSION "3.2.2")
if(PACKAGE_FIND_VERSION_RANGE)
# Package version must be in the requested version range
if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN)
OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX)
OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX)))
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
endif()
else()
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
set(PACKAGE_VERSION_COMPATIBLE FALSE)
else()
set(PACKAGE_VERSION_COMPATIBLE TRUE)
if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_EXACT TRUE)
endif()
endif()
endif()
include("${CMAKE_CURRENT_LIST_DIR}/sdlcpu.cmake")
SDL_DetectTargetCPUArchitectures(_detected_archs)
# check that the installed version has a compatible architecture as the one which is currently searching:
if(NOT(SDL_CPU_X86 OR SDL_CPU_X64 OR SDL_CPU_ARM64 OR SDL_CPU_ARM64EC))
set(PACKAGE_VERSION "${PACKAGE_VERSION} (X86,X64,ARM64)")
set(PACKAGE_VERSION_UNSUITABLE TRUE)
endif()

View File

@ -0,0 +1,156 @@
function(SDL_DetectTargetCPUArchitectures DETECTED_ARCHS)
set(known_archs EMSCRIPTEN ARM32 ARM64 ARM64EC LOONGARCH64 POWERPC32 POWERPC64 X86 X64)
if(APPLE AND CMAKE_OSX_ARCHITECTURES)
foreach(known_arch IN LISTS known_archs)
set(SDL_CPU_${known_arch} "0")
endforeach()
set(detected_archs)
foreach(osx_arch IN LISTS CMAKE_OSX_ARCHITECTURES)
if(osx_arch STREQUAL "x86_64")
set(SDL_CPU_X64 "1")
list(APPEND detected_archs "X64")
elseif(osx_arch STREQUAL "arm64")
set(SDL_CPU_ARM64 "1")
list(APPEND detected_archs "ARM64")
endif()
endforeach()
set("${DETECTED_ARCHS}" "${detected_archs}" PARENT_SCOPE)
return()
endif()
set(detected_archs)
foreach(known_arch IN LISTS known_archs)
if(SDL_CPU_${known_arch})
list(APPEND detected_archs "${known_arch}")
endif()
endforeach()
if(detected_archs)
set("${DETECTED_ARCHS}" "${detected_archs}" PARENT_SCOPE)
return()
endif()
set(arch_check_ARM32 "defined(__arm__) || defined(_M_ARM)")
set(arch_check_ARM64 "defined(__aarch64__) || defined(_M_ARM64)")
set(arch_check_ARM64EC "defined(_M_ARM64EC)")
set(arch_check_EMSCRIPTEN "defined(__EMSCRIPTEN__)")
set(arch_check_LOONGARCH64 "defined(__loongarch64)")
set(arch_check_POWERPC32 "(defined(__PPC__) || defined(__powerpc__)) && !defined(__powerpc64__)")
set(arch_check_POWERPC64 "defined(__PPC64__) || defined(__powerpc64__)")
set(arch_check_X86 "defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)")
set(arch_check_X64 "(defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)) && !defined(_M_ARM64EC)")
set(src_vars "")
set(src_main "")
foreach(known_arch IN LISTS known_archs)
set(detected_${known_arch} "0")
string(APPEND src_vars "
#if ${arch_check_${known_arch}}
#define ARCH_${known_arch} \"1\"
#else
#define ARCH_${known_arch} \"0\"
#endif
const char *arch_${known_arch} = \"INFO<${known_arch}=\" ARCH_${known_arch} \">\";
")
string(APPEND src_main "
result += arch_${known_arch}[argc];")
endforeach()
set(src_arch_detect "${src_vars}
int main(int argc, char *argv[]) {
int result = 0;
(void)argv;
${src_main}
return result;
}")
if(CMAKE_C_COMPILER)
set(ext ".c")
elseif(CMAKE_CXX_COMPILER)
set(ext ".cpp")
else()
enable_language(C)
set(ext ".c")
endif()
set(path_src_arch_detect "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/SDL_detect_arch${ext}")
file(WRITE "${path_src_arch_detect}" "${src_arch_detect}")
set(path_dir_arch_detect "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/SDL_detect_arch")
set(path_bin_arch_detect "${path_dir_arch_detect}/bin")
set(detected_archs)
set(msg "Detecting Target CPU Architecture")
message(STATUS "${msg}")
include(CMakePushCheckState)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
cmake_push_check_state(RESET)
try_compile(SDL_CPU_CHECK_ALL
"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/SDL_detect_arch"
SOURCES "${path_src_arch_detect}"
COPY_FILE "${path_bin_arch_detect}"
)
cmake_pop_check_state()
if(NOT SDL_CPU_CHECK_ALL)
message(STATUS "${msg} - <ERROR>")
message(WARNING "Failed to compile source detecting the target CPU architecture")
else()
set(re "INFO<([A-Z0-9]+)=([01])>")
file(STRINGS "${path_bin_arch_detect}" infos REGEX "${re}")
foreach(info_arch_01 IN LISTS infos)
string(REGEX MATCH "${re}" A "${info_arch_01}")
if(NOT "${CMAKE_MATCH_1}" IN_LIST known_archs)
message(WARNING "Unknown architecture: \"${CMAKE_MATCH_1}\"")
continue()
endif()
set(arch "${CMAKE_MATCH_1}")
set(arch_01 "${CMAKE_MATCH_2}")
set(detected_${arch} "${arch_01}")
endforeach()
foreach(known_arch IN LISTS known_archs)
if(detected_${known_arch})
list(APPEND detected_archs ${known_arch})
endif()
endforeach()
endif()
if(detected_archs)
foreach(known_arch IN LISTS known_archs)
set("SDL_CPU_${known_arch}" "${detected_${known_arch}}" CACHE BOOL "Detected architecture ${known_arch}")
endforeach()
message(STATUS "${msg} - ${detected_archs}")
else()
include(CheckCSourceCompiles)
cmake_push_check_state(RESET)
foreach(known_arch IN LISTS known_archs)
if(NOT detected_archs)
set(cache_variable "SDL_CPU_${known_arch}")
set(test_src "
int main(int argc, char *argv[]) {
#if ${arch_check_${known_arch}}
return 0;
#else
choke
#endif
}
")
check_c_source_compiles("${test_src}" "${cache_variable}")
if(${cache_variable})
set(SDL_CPU_${known_arch} "1" CACHE BOOL "Detected architecture ${known_arch}")
set(detected_archs ${known_arch})
else()
set(SDL_CPU_${known_arch} "0" CACHE BOOL "Detected architecture ${known_arch}")
endif()
endif()
endforeach()
cmake_pop_check_state()
endif()
set("${DETECTED_ARCHS}" "${detected_archs}" PARENT_SCOPE)
endfunction()

View File

@ -0,0 +1,181 @@
/*
SDL_ttf: A companion library to SDL for working with TrueType (tm) fonts
Copyright (C) 2001-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/**
* \file SDL_textengine.h
*
* Definitions for implementations of the TTF_TextEngine interface.
*/
#ifndef SDL_TTF_TEXTENGINE_H_
#define SDL_TTF_TEXTENGINE_H_
#include <SDL3/SDL.h>
#include <SDL3_ttf/SDL_ttf.h>
#include <SDL3/SDL_begin_code.h>
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
/**
* A font atlas draw command.
*
* \since This enum is available since SDL_ttf 3.0.0.
*/
typedef enum TTF_DrawCommand
{
TTF_DRAW_COMMAND_NOOP,
TTF_DRAW_COMMAND_FILL,
TTF_DRAW_COMMAND_COPY
} TTF_DrawCommand;
/**
* A filled rectangle draw operation.
*
* \since This struct is available since SDL_ttf 3.0.0.
*
* \sa TTF_DrawOperation
*/
typedef struct TTF_FillOperation
{
TTF_DrawCommand cmd; /**< TTF_DRAW_COMMAND_FILL */
SDL_Rect rect; /**< The rectangle to fill, in pixels. The x coordinate is relative to the left side of the text area, going right, and the y coordinate is relative to the top side of the text area, going down. */
} TTF_FillOperation;
/**
* A texture copy draw operation.
*
* \since This struct is available since SDL_ttf 3.0.0.
*
* \sa TTF_DrawOperation
*/
typedef struct TTF_CopyOperation
{
TTF_DrawCommand cmd; /**< TTF_DRAW_COMMAND_COPY */
int text_offset; /**< The offset in the text corresponding to this glyph.
There may be multiple glyphs with the same text offset
and the next text offset might be several Unicode codepoints
later. In this case the glyphs and codepoints are grouped
together and the group bounding box is the union of the dst
rectangles for the corresponding glyphs. */
TTF_Font *glyph_font; /**< The font containing the glyph to be drawn, can be passed to TTF_GetGlyphImageForIndex() */
Uint32 glyph_index; /**< The glyph index of the glyph to be drawn, can be passed to TTF_GetGlyphImageForIndex() */
SDL_Rect src; /**< The area within the glyph to be drawn */
SDL_Rect dst; /**< The drawing coordinates of the glyph, in pixels. The x coordinate is relative to the left side of the text area, going right, and the y coordinate is relative to the top side of the text area, going down. */
void *reserved;
} TTF_CopyOperation;
/**
* A text engine draw operation.
*
* \since This struct is available since SDL_ttf 3.0.0.
*/
typedef union TTF_DrawOperation
{
TTF_DrawCommand cmd;
TTF_FillOperation fill;
TTF_CopyOperation copy;
} TTF_DrawOperation;
/* Private data in TTF_Text, to assist in text measurement and layout */
typedef struct TTF_TextLayout TTF_TextLayout;
/* Private data in TTF_Text, available to implementations */
struct TTF_TextData
{
TTF_Font *font; /**< The font used by this text, read-only. */
SDL_FColor color; /**< The color of the text, read-only. */
bool needs_layout_update; /**< True if the layout needs to be updated */
TTF_TextLayout *layout; /**< Cached layout information, read-only. */
int x; /**< The x offset of the upper left corner of this text, in pixels, read-only. */
int y; /**< The y offset of the upper left corner of this text, in pixels, read-only. */
int w; /**< The width of this text, in pixels, read-only. */
int h; /**< The height of this text, in pixels, read-only. */
int num_ops; /**< The number of drawing operations to render this text, read-only. */
TTF_DrawOperation *ops; /**< The drawing operations used to render this text, read-only. */
int num_clusters; /**< The number of substrings representing clusters of glyphs in the string, read-only */
TTF_SubString *clusters; /**< Substrings representing clusters of glyphs in the string, read-only */
SDL_PropertiesID props; /**< Custom properties associated with this text, read-only. This field is created as-needed using TTF_GetTextProperties() and the properties may be then set and read normally */
bool needs_engine_update; /**< True if the engine text needs to be updated */
TTF_TextEngine *engine; /**< The engine used to render this text, read-only. */
void *engine_text; /**< The implementation-specific representation of this text */
};
/**
* A text engine interface.
*
* This structure should be initialized using SDL_INIT_INTERFACE()
*
* \since This struct is available since SDL_ttf 3.0.0.
*
* \sa SDL_INIT_INTERFACE
*/
struct TTF_TextEngine
{
Uint32 version; /**< The version of this interface */
void *userdata; /**< User data pointer passed to callbacks */
/* Create a text representation from draw instructions.
*
* All fields of `text` except `internal->engine_text` will already be filled out.
*
* This function should set the `internal->engine_text` field to a non-NULL value.
*
* \param userdata the userdata pointer in this interface.
* \param text the text object being created.
*/
bool (SDLCALL *CreateText)(void *userdata, TTF_Text *text);
/**
* Destroy a text representation.
*/
void (SDLCALL *DestroyText)(void *userdata, TTF_Text *text);
};
/* Check the size of TTF_TextEngine
*
* If this assert fails, either the compiler is padding to an unexpected size,
* or the interface has been updated and this should be updated to match and
* the code using this interface should be updated to handle the old version.
*/
SDL_COMPILE_TIME_ASSERT(TTF_TextEngine_SIZE,
(sizeof(void *) == 4 && sizeof(TTF_TextEngine) == 16) ||
(sizeof(void *) == 8 && sizeof(TTF_TextEngine) == 32));
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include <SDL3/SDL_close_code.h>
#endif /* SDL_TTF_TEXTENGINE_H_ */

File diff suppressed because it is too large Load Diff

BIN
x64/Debug/SDL3_ttf.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.