mirror of
https://github.com/Nimac0/SDL_Minigame
synced 2026-01-12 23:33:41 +00:00
Compare commits
27 Commits
ba8dca8abc
...
e40a3b0947
| Author | SHA1 | Date | |
|---|---|---|---|
| e40a3b0947 | |||
| 92283e41ba | |||
| 113b55e625 | |||
| d8e1182499 | |||
| 52daf5c5b6 | |||
| 69bf328851 | |||
| 5a21f9125b | |||
| cd42b4df3e | |||
| 51968ec9ca | |||
| 01ab55acb0 | |||
| 9733a21530 | |||
|
|
6f22ffd013 | ||
|
|
b80d6ef8b8 | ||
| 3ff964c93a | |||
| c570c6038d | |||
| df6a7ded33 | |||
| 162645ed1c | |||
| 63644b4759 | |||
| 75189645d0 | |||
| fcb79bc2a3 | |||
| 705fe069cf | |||
| 57a0bead6a | |||
| 66a59d9666 | |||
| f2d7601480 | |||
| cebe343e4c | |||
| 680f66270f | |||
| b2a001e24d |
24
.github/workflows/doxygen.yaml
vendored
Normal file
24
.github/workflows/doxygen.yaml
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: 'true' # might need recursive, tbd
|
||||||
|
- name: Doxygen Action
|
||||||
|
uses: mattnotmitt/doxygen-action@v1.1.0
|
||||||
|
with:
|
||||||
|
doxyfile-path: 'docs/Doxyfile'
|
||||||
|
- name: Deploy
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./docs/html
|
||||||
22
.gitignore
vendored
22
.gitignore
vendored
@ -24,7 +24,6 @@ build/
|
|||||||
*.app
|
*.app
|
||||||
|
|
||||||
# Generated by Visual Studio
|
# Generated by Visual Studio
|
||||||
.vscode/
|
|
||||||
.vs/
|
.vs/
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
@ -56,7 +55,22 @@ build/
|
|||||||
|
|
||||||
# Sublime Text
|
# Sublime Text
|
||||||
*.sublime-workspace
|
*.sublime-workspace
|
||||||
*.sublime-project
|
|
||||||
|
# Created by https://www.gitignore.io/api/visualstudiocode
|
||||||
|
# Edit at https://www.gitignore.io/?templates=visualstudiocode
|
||||||
|
|
||||||
|
### VisualStudioCode ###
|
||||||
|
.vscode/* # Maybe .vscode/**/* instead - see comments
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
### VisualStudioCode Patch ###
|
||||||
|
# Ignore all local history of files
|
||||||
|
**/.history
|
||||||
|
|
||||||
|
# End of https://www.gitignore.io/api/visualstudiocode
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
@ -75,3 +89,7 @@ Desktop.ini
|
|||||||
compile_commands.json
|
compile_commands.json
|
||||||
|
|
||||||
*.puml
|
*.puml
|
||||||
|
|
||||||
|
docs/latex/
|
||||||
|
docs/html/
|
||||||
|
docs/diagrams/
|
||||||
|
|||||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -14,3 +14,9 @@
|
|||||||
path = extern/SDL_ttf
|
path = extern/SDL_ttf
|
||||||
url = https://github.com/libsdl-org/SDL_ttf.git
|
url = https://github.com/libsdl-org/SDL_ttf.git
|
||||||
branch = release-2.22.x
|
branch = release-2.22.x
|
||||||
|
[submodule "docs/doxygen-awesome-css"]
|
||||||
|
path = docs/doxygen-awesome-css
|
||||||
|
url = https://github.com/jothepro/doxygen-awesome-css.git
|
||||||
|
[submodule "extern/tmxlite"]
|
||||||
|
path = extern/tmxlite
|
||||||
|
url = https://github.com/fallahn/tmxlite.git
|
||||||
|
|||||||
17
.vscode/launch.json
vendored
Normal file
17
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "debug",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"miDebuggerPath": "c:\\mingw64\\bin\\gdb.exe",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/build/SDL_Minigame.exe",
|
||||||
|
"cwd": "${workspaceFolder}",
|
||||||
|
"preLaunchTask": "build-debug"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"cmake.configureOnOpen": true,
|
||||||
|
"editor.tabSize": 4,
|
||||||
|
"editor.insertSpaces": true,
|
||||||
|
}
|
||||||
67
.vscode/tasks.json
vendored
Normal file
67
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
{
|
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||||
|
// for the documentation about the tasks.json format
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"label": "build-engine-debug",
|
||||||
|
"command": "cd build; cmake -DCMAKE_BUILD_TYPE=Debug; cmake --build .",
|
||||||
|
"problemMatcher": [],
|
||||||
|
"group": "build"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"label": "build-engine",
|
||||||
|
"command": "cd build; cmake -DCMAKE_BUILD_TYPE=Release; cmake --build .",
|
||||||
|
"problemMatcher": [],
|
||||||
|
"group": {
|
||||||
|
"kind": "build",
|
||||||
|
"isDefault": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docker-build",
|
||||||
|
"label": "build-doxygen",
|
||||||
|
"dockerBuild": {
|
||||||
|
"context": "${workspaceRoot}/docs/docker",
|
||||||
|
"tag": "vego_doxygen-docker",
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docker-run",
|
||||||
|
"label": "gen-doxygen",
|
||||||
|
"dockerRun": {
|
||||||
|
"image": "vego_doxygen-docker",
|
||||||
|
"remove": true,
|
||||||
|
"volumes": [
|
||||||
|
{
|
||||||
|
"localPath": "${workspaceFolder}",
|
||||||
|
"containerPath": "/source"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"localPath": "${workspaceFolder}/docs",
|
||||||
|
"containerPath": "/output"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"localPath": "${workspaceFolder}/docs/Doxyfile",
|
||||||
|
"containerPath": "/Doxyfile"
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "process",
|
||||||
|
"label": "open-doxygen",
|
||||||
|
"command": "explorer",
|
||||||
|
"windows": {
|
||||||
|
"command": "explorer.exe"
|
||||||
|
},
|
||||||
|
"args": ["${workspaceFolder}\\docs\\html\\index.html"],
|
||||||
|
"problemMatcher": [],
|
||||||
|
"dependsOn": "gen-doxygen",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -15,10 +15,13 @@ set(BUILD_SHARED_LIBS FALSE)
|
|||||||
set(SDL2MIXER_VENDORED ON)
|
set(SDL2MIXER_VENDORED ON)
|
||||||
set(SDL2TTF_VENDORED ON)
|
set(SDL2TTF_VENDORED ON)
|
||||||
|
|
||||||
|
set(TMXLITE_STATIC_LIB TRUE)
|
||||||
|
|
||||||
add_subdirectory(extern/SDL EXCLUDE_FROM_ALL)
|
add_subdirectory(extern/SDL EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(extern/SDL_image EXCLUDE_FROM_ALL)
|
add_subdirectory(extern/SDL_image EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(extern/SDL_mixer EXCLUDE_FROM_ALL)
|
add_subdirectory(extern/SDL_mixer EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(extern/SDL_ttf EXCLUDE_FROM_ALL)
|
add_subdirectory(extern/SDL_ttf EXCLUDE_FROM_ALL)
|
||||||
|
add_subdirectory(extern/tmxlite/tmxlite EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.cpp)
|
file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.cpp)
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
@ -31,11 +34,12 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
|
|||||||
SDL2_image::SDL2_image-static
|
SDL2_image::SDL2_image-static
|
||||||
SDL2_mixer::SDL2_mixer-static
|
SDL2_mixer::SDL2_mixer-static
|
||||||
SDL2_ttf::SDL2_ttf-static
|
SDL2_ttf::SDL2_ttf-static
|
||||||
|
tmxlite
|
||||||
)
|
)
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address -fno-omit-frame-pointer")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") # -fsanitize=address -fno-omit-frame-pointer")
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE "-fsanitize=address")
|
#target_link_libraries(${PROJECT_NAME} PRIVATE "-fsanitize=address")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -42,13 +42,13 @@ DOXYFILE_ENCODING = UTF-8
|
|||||||
# title of most generated pages and in a few other places.
|
# title of most generated pages and in a few other places.
|
||||||
# The default value is: My Project.
|
# The default value is: My Project.
|
||||||
|
|
||||||
PROJECT_NAME = "My Project"
|
PROJECT_NAME = "VEGO-Engine"
|
||||||
|
|
||||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER =
|
PROJECT_NUMBER = 0.1
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
@ -67,14 +67,14 @@ PROJECT_LOGO =
|
|||||||
# when the HTML document is shown. Doxygen will copy the logo to the output
|
# when the HTML document is shown. Doxygen will copy the logo to the output
|
||||||
# directory.
|
# directory.
|
||||||
|
|
||||||
PROJECT_ICON =
|
PROJECT_ICON = assets/chicken_neutral_knight.png
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
|
||||||
# into which the generated documentation will be written. If a relative path is
|
# into which the generated documentation will be written. If a relative path is
|
||||||
# entered, it will be relative to the location where doxygen was started. If
|
# entered, it will be relative to the location where doxygen was started. If
|
||||||
# left blank the current directory will be used.
|
# left blank the current directory will be used.
|
||||||
|
|
||||||
OUTPUT_DIRECTORY =
|
OUTPUT_DIRECTORY = docs
|
||||||
|
|
||||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
|
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
|
||||||
# sub-directories (in 2 levels) under the output directory of each output format
|
# sub-directories (in 2 levels) under the output directory of each output format
|
||||||
@ -396,7 +396,7 @@ AUTOLINK_SUPPORT = YES
|
|||||||
# diagrams that involve STL classes more complete and accurate.
|
# diagrams that involve STL classes more complete and accurate.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
BUILTIN_STL_SUPPORT = NO
|
BUILTIN_STL_SUPPORT = YES
|
||||||
|
|
||||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
|
# If you use Microsoft's C++/CLI language, you should set this option to YES to
|
||||||
# enable parsing support.
|
# enable parsing support.
|
||||||
@ -842,7 +842,7 @@ CITE_BIB_FILES =
|
|||||||
# messages are off.
|
# messages are off.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
QUIET = NO
|
QUIET = YES
|
||||||
|
|
||||||
# The WARNINGS tag can be used to turn on/off the warning messages that are
|
# The WARNINGS tag can be used to turn on/off the warning messages that are
|
||||||
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
|
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
|
||||||
@ -949,7 +949,7 @@ WARN_LOGFILE =
|
|||||||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||||
# Note: If this tag is empty the current directory is searched.
|
# Note: If this tag is empty the current directory is searched.
|
||||||
|
|
||||||
INPUT =
|
INPUT = ./include ./src
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
@ -989,63 +989,15 @@ INPUT_FILE_ENCODING =
|
|||||||
# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
|
# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
|
||||||
# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
|
# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
|
||||||
|
|
||||||
FILE_PATTERNS = *.c \
|
FILE_PATTERNS = *.cpp \
|
||||||
*.cc \
|
|
||||||
*.cxx \
|
|
||||||
*.cxxm \
|
|
||||||
*.cpp \
|
|
||||||
*.cppm \
|
|
||||||
*.ccm \
|
|
||||||
*.c++ \
|
|
||||||
*.c++m \
|
|
||||||
*.java \
|
|
||||||
*.ii \
|
|
||||||
*.ixx \
|
|
||||||
*.ipp \
|
|
||||||
*.i++ \
|
|
||||||
*.inl \
|
|
||||||
*.idl \
|
|
||||||
*.ddl \
|
|
||||||
*.odl \
|
|
||||||
*.h \
|
*.h \
|
||||||
*.hh \
|
*.hpp
|
||||||
*.hxx \
|
|
||||||
*.hpp \
|
|
||||||
*.h++ \
|
|
||||||
*.ixx \
|
|
||||||
*.l \
|
|
||||||
*.cs \
|
|
||||||
*.d \
|
|
||||||
*.php \
|
|
||||||
*.php4 \
|
|
||||||
*.php5 \
|
|
||||||
*.phtml \
|
|
||||||
*.inc \
|
|
||||||
*.m \
|
|
||||||
*.markdown \
|
|
||||||
*.md \
|
|
||||||
*.mm \
|
|
||||||
*.dox \
|
|
||||||
*.py \
|
|
||||||
*.pyw \
|
|
||||||
*.f90 \
|
|
||||||
*.f95 \
|
|
||||||
*.f03 \
|
|
||||||
*.f08 \
|
|
||||||
*.f18 \
|
|
||||||
*.f \
|
|
||||||
*.for \
|
|
||||||
*.vhd \
|
|
||||||
*.vhdl \
|
|
||||||
*.ucf \
|
|
||||||
*.qsf \
|
|
||||||
*.ice
|
|
||||||
|
|
||||||
# The RECURSIVE tag can be used to specify whether or not subdirectories should
|
# The RECURSIVE tag can be used to specify whether or not subdirectories should
|
||||||
# be searched for input files as well.
|
# be searched for input files as well.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
RECURSIVE = NO
|
RECURSIVE = YES
|
||||||
|
|
||||||
# The EXCLUDE tag can be used to specify files and/or directories that should be
|
# The EXCLUDE tag can be used to specify files and/or directories that should be
|
||||||
# excluded from the INPUT source files. This way you can easily exclude a
|
# excluded from the INPUT source files. This way you can easily exclude a
|
||||||
@ -1084,14 +1036,17 @@ EXCLUDE_SYMBOLS =
|
|||||||
# that contain example code fragments that are included (see the \include
|
# that contain example code fragments that are included (see the \include
|
||||||
# command).
|
# command).
|
||||||
|
|
||||||
EXAMPLE_PATH =
|
EXAMPLE_PATH = ./include \
|
||||||
|
./src
|
||||||
|
|
||||||
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
|
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
|
||||||
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
|
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
|
||||||
# *.h) to filter out the source-files in the directories. If left blank all
|
# *.h) to filter out the source-files in the directories. If left blank all
|
||||||
# files are included.
|
# files are included.
|
||||||
|
|
||||||
EXAMPLE_PATTERNS = *
|
EXAMPLE_PATTERNS = *.cpp \
|
||||||
|
*.h \
|
||||||
|
*.hpp
|
||||||
|
|
||||||
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
|
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
|
||||||
# searched for input files to be used with the \include or \dontinclude commands
|
# searched for input files to be used with the \include or \dontinclude commands
|
||||||
@ -1325,7 +1280,7 @@ HTML_FILE_EXTENSION = .html
|
|||||||
# of the possible markers and block names see the documentation.
|
# of the possible markers and block names see the documentation.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_HEADER =
|
HTML_HEADER = docs/header.html
|
||||||
|
|
||||||
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
|
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
|
||||||
# generated HTML page. If the tag is left blank doxygen will generate a standard
|
# generated HTML page. If the tag is left blank doxygen will generate a standard
|
||||||
@ -1365,7 +1320,10 @@ HTML_STYLESHEET =
|
|||||||
# documentation.
|
# documentation.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_EXTRA_STYLESHEET =
|
HTML_EXTRA_STYLESHEET = docs/doxygen-awesome-css/doxygen-awesome.css \
|
||||||
|
docs/doxygen-awesome-css/doxygen-awesome-sidebar-only.css \
|
||||||
|
docs/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css \
|
||||||
|
docs/custom.css
|
||||||
|
|
||||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||||
# other source files which should be copied to the HTML output directory. Note
|
# other source files which should be copied to the HTML output directory. Note
|
||||||
@ -1375,7 +1333,10 @@ HTML_EXTRA_STYLESHEET =
|
|||||||
# files will be copied as-is; there are no commands or markers available.
|
# files will be copied as-is; there are no commands or markers available.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_EXTRA_FILES =
|
HTML_EXTRA_FILES = docs/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js \
|
||||||
|
docs/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js \
|
||||||
|
docs/doxygen-awesome-css/doxygen-awesome-paragraph-link.js \
|
||||||
|
docs/doxygen-awesome-css/doxygen-awesome-interactive-toc.js
|
||||||
|
|
||||||
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
|
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
|
||||||
# should be rendered with a dark or light theme.
|
# should be rendered with a dark or light theme.
|
||||||
@ -1388,7 +1349,7 @@ HTML_EXTRA_FILES =
|
|||||||
# The default value is: AUTO_LIGHT.
|
# The default value is: AUTO_LIGHT.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
HTML_COLORSTYLE = AUTO_LIGHT
|
HTML_COLORSTYLE = LIGHT
|
||||||
|
|
||||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||||
# will adjust the colors in the style sheet and background images according to
|
# will adjust the colors in the style sheet and background images according to
|
||||||
@ -1716,7 +1677,7 @@ DISABLE_INDEX = NO
|
|||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
|
|
||||||
GENERATE_TREEVIEW = NO
|
GENERATE_TREEVIEW = YES
|
||||||
|
|
||||||
# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
|
# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
|
||||||
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
|
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
|
||||||
@ -2502,7 +2463,7 @@ HIDE_UNDOC_RELATIONS = YES
|
|||||||
# set to NO
|
# set to NO
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
HAVE_DOT = NO
|
HAVE_DOT = YES
|
||||||
|
|
||||||
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
|
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
|
||||||
# to run in parallel. When set to 0 doxygen will base this on the number of
|
# to run in parallel. When set to 0 doxygen will base this on the number of
|
||||||
@ -2639,7 +2600,7 @@ DOT_WRAP_THRESHOLD = 17
|
|||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
TEMPLATE_RELATIONS = NO
|
TEMPLATE_RELATIONS = YES
|
||||||
|
|
||||||
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
|
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
|
||||||
# YES then doxygen will generate a graph for each documented file showing the
|
# YES then doxygen will generate a graph for each documented file showing the
|
||||||
@ -2727,7 +2688,7 @@ DIR_GRAPH_MAX_DEPTH = 1
|
|||||||
# The default value is: png.
|
# The default value is: png.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
DOT_IMAGE_FORMAT = png
|
DOT_IMAGE_FORMAT = SVG
|
||||||
|
|
||||||
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
|
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
|
||||||
# enable generation of interactive SVG images that allow zooming and panning.
|
# enable generation of interactive SVG images that allow zooming and panning.
|
||||||
@ -2739,13 +2700,13 @@ DOT_IMAGE_FORMAT = png
|
|||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
INTERACTIVE_SVG = NO
|
INTERACTIVE_SVG = YES
|
||||||
|
|
||||||
# The DOT_PATH tag can be used to specify the path where the dot tool can be
|
# The DOT_PATH tag can be used to specify the path where the dot tool can be
|
||||||
# found. If left blank, it is assumed the dot tool can be found in the path.
|
# found. If left blank, it is assumed the dot tool can be found in the path.
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
DOT_PATH =
|
DOT_PATH = /usr/bin/dot
|
||||||
|
|
||||||
# The DOTFILE_DIRS tag can be used to specify one or more directories that
|
# The DOTFILE_DIRS tag can be used to specify one or more directories that
|
||||||
# contain dot files that are included in the documentation (see the \dotfile
|
# contain dot files that are included in the documentation (see the \dotfile
|
||||||
63
docs/Doxyfile.bak
Normal file
63
docs/Doxyfile.bak
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Doxyfile
|
||||||
|
|
||||||
|
# Project information
|
||||||
|
PROJECT_NAME = "SDL Minigame"
|
||||||
|
PROJECT_NUMBER = "1.0"
|
||||||
|
PROJECT_ICON = assets/chicken_neutral_knight.png
|
||||||
|
OUTPUT_DIRECTORY = docs
|
||||||
|
|
||||||
|
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||||
|
EXTRACT_ALL = NO
|
||||||
|
EXTRACT_LOCAL_CLASSES = YES
|
||||||
|
|
||||||
|
CLASS_DIAGRAMS = YES
|
||||||
|
|
||||||
|
HIDE_UNDOC_RELATIONS = YES
|
||||||
|
HAVE_DOT = YES
|
||||||
|
DOT_PATH = /usr/bin/dot
|
||||||
|
|
||||||
|
CLASS_GRAPH = YES
|
||||||
|
COLLABORATION_GRAPH = YES
|
||||||
|
UML_LOOK = YES
|
||||||
|
UML_LIMIT_NUM_FIELDS = 50
|
||||||
|
TEMPLATE_RELATIONS = YES
|
||||||
|
DOT_TRANSPARENT = YES
|
||||||
|
|
||||||
|
# Source files
|
||||||
|
INPUT = ./include ./src
|
||||||
|
FILE_PATTERNS = *.cpp *.h *.hpp
|
||||||
|
EXAMPLE_PATH = ./include ./src
|
||||||
|
EXAMPLE_PATTERNS = *.cpp *.h *.hpp
|
||||||
|
|
||||||
|
# Output formats
|
||||||
|
GENERATE_XML = YES
|
||||||
|
GENERATE_HTML = YES
|
||||||
|
DOT_IMAGE_FORMAT = SVG
|
||||||
|
COLLABORATION_GRAPH = YES
|
||||||
|
GENERATE_LATEX = NO
|
||||||
|
|
||||||
|
# Extra settings
|
||||||
|
USE_MATHJAX = YES
|
||||||
|
CALL_GRAPH = YES
|
||||||
|
CALLER_GRAPH = YES
|
||||||
|
EXTRACT_PRIVATE = YES
|
||||||
|
EXTRACT_STATIC = YES
|
||||||
|
EXTRACT_LOCAL_CLASSES = YES
|
||||||
|
EXTRACT_LOCAL_METHODS = YES
|
||||||
|
EXTRACT_ANON_NSPACES = YES
|
||||||
|
SHOW_FILES = YES
|
||||||
|
SHOW_INCLUDE_FILES = YES
|
||||||
|
SHOW_USED_FILES = YES
|
||||||
|
RECURSIVE = YES
|
||||||
|
|
||||||
|
# Class diagram options
|
||||||
|
INCLUDE_GRAPH = YES
|
||||||
|
INCLUDED_BY_GRAPH = YES
|
||||||
|
GRAPHICAL_HIERARCHY = YES
|
||||||
|
DIRECTORY_GRAPH = YES
|
||||||
|
DISABLE_INDEX = YES
|
||||||
|
GENERATE_TREEVIEW = YES
|
||||||
|
HTML_COLLABORATION = YES
|
||||||
|
|
||||||
|
# idk everything else
|
||||||
|
TAB_SIZE = 4
|
||||||
54
docs/custom.css
Normal file
54
docs/custom.css
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
html {
|
||||||
|
/* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */
|
||||||
|
--primary-color: #bd93f9;
|
||||||
|
--primary-dark-color: #9270e4;
|
||||||
|
--primary-light-color: #9270e4;
|
||||||
|
|
||||||
|
/* page base colors */
|
||||||
|
--page-background-color: #ffffff;
|
||||||
|
--page-foreground-color: #2f4153;
|
||||||
|
--page-secondary-foreground-color: #6f7e8e;
|
||||||
|
|
||||||
|
/* color for all separators on the website: hr, borders, ... */
|
||||||
|
--separator-color: #bd93f965;
|
||||||
|
|
||||||
|
/* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */
|
||||||
|
--border-radius-large: 22px;
|
||||||
|
--border-radius-small: 9px;
|
||||||
|
--border-radius-medium: 14px;
|
||||||
|
|
||||||
|
/* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */
|
||||||
|
--spacing-small: 8px;
|
||||||
|
--spacing-medium: 14px;
|
||||||
|
--spacing-large: 19px;
|
||||||
|
|
||||||
|
--top-height: 125px;
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
html.dark-mode {
|
||||||
|
color-scheme: dark;
|
||||||
|
|
||||||
|
--primary-color: #bd93f9;
|
||||||
|
--primary-dark-color: #9270e4;
|
||||||
|
--primary-light-color: #9270e4;
|
||||||
|
--primary-lighter-color: #191e21;
|
||||||
|
--primary-lightest-color: #191a1c;
|
||||||
|
|
||||||
|
--page-background-color: #21222c;
|
||||||
|
--page-foreground-color: #d2dbde;
|
||||||
|
--page-secondary-foreground-color: #859399;
|
||||||
|
--separator-color: #3a3246;
|
||||||
|
--side-nav-background: #282a36;
|
||||||
|
--side-nav-foreground: #f8f8f2;
|
||||||
|
--toc-background: #282A36;
|
||||||
|
--searchbar-background: var(--page-background-color);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
.paramname em {
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--primary-dark-color);
|
||||||
|
}
|
||||||
@ -1,62 +0,0 @@
|
|||||||
compilation_database_dir: ../..
|
|
||||||
output_directory: .
|
|
||||||
diagrams:
|
|
||||||
|
|
||||||
includes:
|
|
||||||
type: include
|
|
||||||
relative_to: ../..
|
|
||||||
glob:
|
|
||||||
- src/*.cpp
|
|
||||||
- include/*.h
|
|
||||||
generate_system_headers: true
|
|
||||||
include:
|
|
||||||
paths:
|
|
||||||
- src
|
|
||||||
- include
|
|
||||||
plantuml:
|
|
||||||
before:
|
|
||||||
- 'skinparam linetype ortho'
|
|
||||||
|
|
||||||
includes_no_external:
|
|
||||||
type: include
|
|
||||||
relative_to: ../..
|
|
||||||
glob:
|
|
||||||
- src/*.cpp
|
|
||||||
- include/*.h
|
|
||||||
include:
|
|
||||||
paths:
|
|
||||||
- src
|
|
||||||
- include
|
|
||||||
plantuml:
|
|
||||||
before:
|
|
||||||
- 'skinparam linetype ortho'
|
|
||||||
|
|
||||||
classes:
|
|
||||||
type: class
|
|
||||||
relative_to: ../..
|
|
||||||
glob:
|
|
||||||
- src/*.cpp
|
|
||||||
- include/*.h
|
|
||||||
include:
|
|
||||||
paths:
|
|
||||||
- src
|
|
||||||
- include
|
|
||||||
plantuml:
|
|
||||||
before:
|
|
||||||
- 'skinparam linetype ortho'
|
|
||||||
|
|
||||||
load_map_example_sequence:
|
|
||||||
type: sequence
|
|
||||||
relative_to: ../..
|
|
||||||
glob:
|
|
||||||
- src/*.cpp
|
|
||||||
- include/*.h
|
|
||||||
include:
|
|
||||||
paths:
|
|
||||||
- src
|
|
||||||
- include
|
|
||||||
start_from:
|
|
||||||
- function: "Map::loadMap(const char *,int,int)"
|
|
||||||
plantuml:
|
|
||||||
before:
|
|
||||||
- 'skinparam linetype ortho'
|
|
||||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 149 KiB |
@ -1,12 +0,0 @@
|
|||||||
Need [clang-uml](https://clang-uml.github.io/index.html)
|
|
||||||
|
|
||||||
```sh
|
|
||||||
clang-uml
|
|
||||||
clang-uml --add-compile-flag -I/usr/lib/clang/16/include # might need additional flags, example for my machine
|
|
||||||
clang-uml --print-from -n load_map_example_sequence # to get availabel commands for sequence diagram
|
|
||||||
```
|
|
||||||
|
|
||||||
then use plant uml to generate an actual `.svg` vector graphic
|
|
||||||
```sh
|
|
||||||
plantuml -tsvg *.puml
|
|
||||||
```
|
|
||||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 183 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 119 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 257 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 7.3 MiB |
13
docs/docker/Dockerfile
Normal file
13
docs/docker/Dockerfile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
RUN apk --update --no-cache add doxygen graphviz git
|
||||||
|
|
||||||
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
WORKDIR /source
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["doxygen", "/Doxyfile_copy"]
|
||||||
6
docs/docker/entrypoint.sh
Normal file
6
docs/docker/entrypoint.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cp /Doxyfile /Doxyfile_copy
|
||||||
|
echo "OUTPUT_DIRECTORY = /output" >> /Doxyfile_copy
|
||||||
|
|
||||||
|
exec "$@"
|
||||||
1
docs/doxygen-awesome-css
Submodule
1
docs/doxygen-awesome-css
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit df88fe4fdd97714fadfd3ef17de0b4401f804052
|
||||||
110
docs/header.html
Normal file
110
docs/header.html
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<!-- HTML header for doxygen 1.10.0-->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11" />
|
||||||
|
<meta name="generator" content="Doxygen $doxygenversion" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<!--BEGIN PROJECT_NAME-->
|
||||||
|
<title>$projectname: $title</title>
|
||||||
|
<!--END PROJECT_NAME-->
|
||||||
|
<!--BEGIN !PROJECT_NAME-->
|
||||||
|
<title>$title</title>
|
||||||
|
<!--END !PROJECT_NAME-->
|
||||||
|
<!--BEGIN PROJECT_ICON-->
|
||||||
|
<link rel="icon" href="$relpath^$projecticon" type="image/x-icon" />
|
||||||
|
<!--END PROJECT_ICON-->
|
||||||
|
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css" />
|
||||||
|
<!--BEGIN DISABLE_INDEX-->
|
||||||
|
<!--BEGIN FULL_SIDEBAR-->
|
||||||
|
<script type="text/javascript">
|
||||||
|
var page_layout = 1;
|
||||||
|
</script>
|
||||||
|
<!--END FULL_SIDEBAR-->
|
||||||
|
<!--END DISABLE_INDEX-->
|
||||||
|
<script type="text/javascript" src="$relpath^jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="$relpath^dynsections.js"></script>
|
||||||
|
<!--BEGIN COPY_CLIPBOARD-->
|
||||||
|
<script type="text/javascript" src="$relpath^clipboard.js"></script>
|
||||||
|
<!--END COPY_CLIPBOARD-->
|
||||||
|
<script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
DoxygenAwesomeDarkModeToggle.init()
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="$relpath^doxygen-awesome-fragment-copy-button.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
DoxygenAwesomeFragmentCopyButton.init()
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="$relpath^doxygen-awesome-paragraph-link.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
DoxygenAwesomeParagraphLink.init()
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="$relpath^doxygen-awesome-interactive-toc.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
DoxygenAwesomeInteractiveToc.init()
|
||||||
|
</script>
|
||||||
|
$treeview
|
||||||
|
$search
|
||||||
|
$mathjax
|
||||||
|
$darkmode
|
||||||
|
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
|
||||||
|
$extrastylesheet
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!--BEGIN DISABLE_INDEX-->
|
||||||
|
<!--BEGIN FULL_SIDEBAR-->
|
||||||
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||||
|
<!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<!--END FULL_SIDEBAR-->
|
||||||
|
<!--END DISABLE_INDEX-->
|
||||||
|
<div id="top">
|
||||||
|
<!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<!--BEGIN TITLEAREA-->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<!--BEGIN PROJECT_LOGO-->
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo" $logosize /></td>
|
||||||
|
<!--END PROJECT_LOGO-->
|
||||||
|
<!--BEGIN PROJECT_NAME-->
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">$projectname
|
||||||
|
<!--BEGIN PROJECT_NUMBER--><span id="projectnumber"> $projectnumber</span>
|
||||||
|
<!--END PROJECT_NUMBER-->
|
||||||
|
</div>
|
||||||
|
<!--BEGIN PROJECT_BRIEF-->
|
||||||
|
<div id="projectbrief">$projectbrief</div>
|
||||||
|
<!--END PROJECT_BRIEF-->
|
||||||
|
</td>
|
||||||
|
<!--END PROJECT_NAME-->
|
||||||
|
<!--BEGIN !PROJECT_NAME-->
|
||||||
|
<!--BEGIN PROJECT_BRIEF-->
|
||||||
|
<td>
|
||||||
|
<div id="projectbrief">$projectbrief</div>
|
||||||
|
</td>
|
||||||
|
<!--END PROJECT_BRIEF-->
|
||||||
|
<!--END !PROJECT_NAME-->
|
||||||
|
<!--BEGIN DISABLE_INDEX-->
|
||||||
|
<!--BEGIN SEARCHENGINE-->
|
||||||
|
<!--BEGIN !FULL_SIDEBAR-->
|
||||||
|
<td>$searchbox</td>
|
||||||
|
<!--END !FULL_SIDEBAR-->
|
||||||
|
<!--END SEARCHENGINE-->
|
||||||
|
<!--END DISABLE_INDEX-->
|
||||||
|
</tr>
|
||||||
|
<!--BEGIN SEARCHENGINE-->
|
||||||
|
<!--BEGIN FULL_SIDEBAR-->
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">$searchbox</td>
|
||||||
|
</tr>
|
||||||
|
<!--END FULL_SIDEBAR-->
|
||||||
|
<!--END SEARCHENGINE-->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--END TITLEAREA-->
|
||||||
|
<!-- end header part -->
|
||||||
49
engine.sublime-project
Normal file
49
engine.sublime-project
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"folders":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings":
|
||||||
|
{
|
||||||
|
"tab_size": 4
|
||||||
|
},
|
||||||
|
"build_systems": [
|
||||||
|
{
|
||||||
|
"name": "Build engine",
|
||||||
|
"shell_cmd": "cmake --build build",
|
||||||
|
"working_dir": "$project_path",
|
||||||
|
"variants": [
|
||||||
|
{
|
||||||
|
"name": "Debug",
|
||||||
|
"shell_cmd": "cmake -DCMAKE_BUILD_TYPE=Debug build && cmake --build build",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Release",
|
||||||
|
"shell_cmd": "cmake -DCMAKE_BUILD_TYPE=Release build && cmake --build build",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Generate CMake",
|
||||||
|
"shell_cmd": "cmake -S . -B build",
|
||||||
|
"working_dir": "$project_path",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Doxygen",
|
||||||
|
"shell_cmd": "xdg-open $project_path/docs/html/index.html",
|
||||||
|
"working_dir": "$project_path",
|
||||||
|
"variants": [
|
||||||
|
{
|
||||||
|
"name": "Build image",
|
||||||
|
"shell_cmd": "docker build -t vego_engine-docker $project_path/docs/docker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Generate documentation",
|
||||||
|
"shell_cmd": "docker run --rm -v \"$project_path:/source\" -v \"$project_path/docs:/output\" -v \"$project_path/docs/Doxyfile:/Doxyfile\" vego_engine-docker",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1
extern/tmxlite
vendored
Submodule
1
extern/tmxlite
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 430387140d087e920d62b922b603b5e5dff35ca9
|
||||||
@ -1,5 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
//! \file CollisionHandler.h
|
||||||
|
//! \file CollisionHandler.cpp
|
||||||
|
//! \file TransformComponent.cpp
|
||||||
|
|
||||||
#include "ColliderComponent.h"
|
#include "ColliderComponent.h"
|
||||||
#include "Constants.h"
|
#include "Constants.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
@ -17,9 +21,11 @@
|
|||||||
class ColliderComponent;
|
class ColliderComponent;
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
|
// [IntersectionBitSet]
|
||||||
constexpr uint8_t DIRECTION_C = 4;
|
constexpr uint8_t DIRECTION_C = 4;
|
||||||
|
|
||||||
using IntersectionBitSet = std::bitset<DIRECTION_C>;
|
using IntersectionBitSet = std::bitset<DIRECTION_C>;
|
||||||
|
// [IntersectionBitSet]
|
||||||
|
|
||||||
class CollisionHandler
|
class CollisionHandler
|
||||||
{
|
{
|
||||||
@ -47,6 +53,20 @@ public:
|
|||||||
std::initializer_list<Entity::TeamLabel> const& teamLabels = {},
|
std::initializer_list<Entity::TeamLabel> const& teamLabels = {},
|
||||||
bool negateTeam = false);
|
bool negateTeam = false);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
* \brief Tests entity against all entities with the specified labels for a collision
|
||||||
|
* \details Tests the given entity against every other entity with the specified labels for intersections between their collison boxes.
|
||||||
|
* If the primary entity has no ColliderComponent, the equivalent of no collision is returned immediately, other entities are skipped
|
||||||
|
* if they don't have a ColliderComponent
|
||||||
|
* \param entity The primary entity to check against. Return values will be relative to this entity
|
||||||
|
* \param posMod Modifier to apply toposition before checking collisions.
|
||||||
|
* \param groupLabels Entities need to have at least one listed GroupLabels to get checked against
|
||||||
|
* \param teamLabels Entities need to have one of the specified TeamLabels to get checked against
|
||||||
|
* \param negateTeam If set to true, entities will only be checked against if they **don't** have one of the specified TeamLabels
|
||||||
|
* \see ColliderComponent
|
||||||
|
*
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T getAnyIntersection(
|
T getAnyIntersection(
|
||||||
Entity* entity,
|
Entity* entity,
|
||||||
|
|||||||
@ -16,36 +16,61 @@ using ComponentBitSet = std::bitset<MAX_COMPONENTS>;
|
|||||||
using GroupBitSet = std::bitset<MAX_GROUPS>;
|
using GroupBitSet = std::bitset<MAX_GROUPS>;
|
||||||
using ComponentArray = std::array<Component*, MAX_COMPONENTS>;
|
using ComponentArray = std::array<Component*, MAX_COMPONENTS>;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
* \brief Main class for any object in game, stores associations, labeling and components
|
||||||
|
* \details The entity class is the primary class each object in the game needs to use. Add components to assign functionality.
|
||||||
|
*
|
||||||
|
* \todo More detailed description
|
||||||
|
* \todo Some functions in entity class are only supposed to be called in specific context, which might be valid uses for `friend` keyword. Example: Entity() should only be called from Manager::addEntity(). Verify each functions intended use/scope.
|
||||||
|
*
|
||||||
|
*/
|
||||||
class Entity
|
class Entity
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/*! TODO */
|
/*!
|
||||||
|
* \brief Used for rendering order (last is highest) or retrieving entities of group
|
||||||
|
* \todo Label used in singular entity shouldn't use plural
|
||||||
|
* \todo HEARTS are rendered above POWERUPS, missleading order
|
||||||
|
* \todo PROJECTILE are rendered above POWERUPS, missleading order
|
||||||
|
* \todo Generalize HEARTS as UI or similar
|
||||||
|
*/
|
||||||
enum class GroupLabel
|
enum class GroupLabel
|
||||||
{
|
{
|
||||||
MAPTILES,
|
MAPTILES, //!< Entity using TileComponent
|
||||||
PLAYERS,
|
PLAYERS, //!< Primary entity in player controll
|
||||||
ENEMIES,
|
ENEMIES, //!< \deprecated All players now grouped as Entity::PLAYERS
|
||||||
COLLIDERS,
|
COLLIDERS, //!< Fixed collider entity, e.g. a wall
|
||||||
PROJECTILE,
|
PROJECTILE, //!< \todo Document
|
||||||
HEARTS,
|
HEARTS, //!< \todo Document
|
||||||
POWERUPS
|
POWERUPS //!< \todo Document
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Allows grouping entities by team association for hits, win conditions, etc.
|
||||||
|
*/
|
||||||
enum class TeamLabel
|
enum class TeamLabel
|
||||||
{
|
{
|
||||||
NONE, //!< No team
|
NONE, //!< No team, should be skipped in any checks
|
||||||
BLUE, //!< Team blue
|
BLUE, //!< Team blue
|
||||||
RED //!< Team red
|
RED //!< Team red
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \todo Document
|
||||||
|
*/
|
||||||
explicit Entity(Manager& mManager) :
|
explicit Entity(Manager& mManager) :
|
||||||
manager(mManager) { };
|
manager(mManager) { };
|
||||||
|
|
||||||
void update() const;
|
void update() const; //!< Call each frame to update all components
|
||||||
|
//! Call after update to render components.
|
||||||
|
//! \sa SpriteComponent::draw()
|
||||||
void draw() const;
|
void draw() const;
|
||||||
|
|
||||||
bool isActive() const { return this->active; }
|
bool isActive() const { return this->active; } //!< \sa destroy()
|
||||||
|
//! Mark for destruction for Manager::refresh() and disables collision
|
||||||
|
//! \sa ColliderComponent
|
||||||
void destroy() {
|
void destroy() {
|
||||||
this->active = false;
|
this->active = false;
|
||||||
if (this->hasComponent<ColliderComponent>()) {
|
if (this->hasComponent<ColliderComponent>()) {
|
||||||
@ -53,21 +78,26 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasGroup(Group mGroup);
|
bool hasGroup(Group mGroup); //!< \sa GroupLabel
|
||||||
void addGroup(Group mGroup);
|
void addGroup(Group mGroup); //!< \sa GroupLabel
|
||||||
void delGroup(Group mGroup);
|
void delGroup(Group mGroup); //!< \sa GroupLabel
|
||||||
|
//! \returns bitset with true on position GroupLabel if the entity belongs to group
|
||||||
|
//! \sa GroupLabel
|
||||||
std::bitset<MAX_GROUPS> getGroupBitSet();
|
std::bitset<MAX_GROUPS> getGroupBitSet();
|
||||||
|
|
||||||
void setTeam(TeamLabel teamLabel);
|
void setTeam(TeamLabel teamLabel); //!< \sa TeamLabel
|
||||||
TeamLabel getTeam();
|
TeamLabel getTeam(); //!< \sa TeamLabel
|
||||||
|
|
||||||
|
//! \sa Manager
|
||||||
Manager& getManager() { return manager; };
|
Manager& getManager() { return manager; };
|
||||||
|
|
||||||
template <typename T> bool hasComponent() const
|
template <typename T> bool hasComponent() const //! \sa Component
|
||||||
{
|
{
|
||||||
return componentBitSet[getComponentTypeID<T>()];
|
return componentBitSet[getComponentTypeID<T>()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! \brief Adds specified type as component and calls Component::init()
|
||||||
|
//! \param mArgs Constructor arguments of component
|
||||||
template <typename T, typename...TArgs> T& addComponent(TArgs&&...mArgs)
|
template <typename T, typename...TArgs> T& addComponent(TArgs&&...mArgs)
|
||||||
{
|
{
|
||||||
T* c(new T(std::forward<TArgs>(mArgs)...));
|
T* c(new T(std::forward<TArgs>(mArgs)...));
|
||||||
@ -82,7 +112,7 @@ public:
|
|||||||
return *c;
|
return *c;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T> T& getComponent() const
|
template <typename T> T& getComponent() const //! \returns Component of type T
|
||||||
{
|
{
|
||||||
auto ptr(componentArray[getComponentTypeID<T>()]);
|
auto ptr(componentArray[getComponentTypeID<T>()]);
|
||||||
return *static_cast<T*>(ptr);
|
return *static_cast<T*>(ptr);
|
||||||
|
|||||||
@ -7,22 +7,33 @@
|
|||||||
#include "Constants.h"
|
#include "Constants.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
* \brief Is responsible for managing all entities
|
||||||
|
* \details The manager class handles update and draw calls collectively for all entities, and provides functionality to get all or a subset of all entities
|
||||||
|
* \sa Entity
|
||||||
|
* \sa Entity::GroupLabel
|
||||||
|
* \sa Entity::TeamLabel
|
||||||
|
*
|
||||||
|
*/
|
||||||
class Manager
|
class Manager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void update();
|
void update(); //!< \sa Entity::update()
|
||||||
void draw();
|
void draw(); //!< \sa Entity::draw()
|
||||||
|
//! Disables all functionality of entities marked for destruction
|
||||||
|
//! \sa Entity::destroy()
|
||||||
void refresh();
|
void refresh();
|
||||||
|
|
||||||
void addToGroup(Entity* mEntity, Group mGroup);
|
void addToGroup(Entity* mEntity, Group mGroup); //!< \todo `friend` to Entity
|
||||||
std::vector<Entity*>& getGroup(Group mGroup);
|
std::vector<Entity*>& getGroup(Group mGroup); //!< \returns std::vector containing all entities in group Entity::GroupLabel
|
||||||
|
|
||||||
void addToTeam(Entity* mEntity, Team mTeam);
|
void addToTeam(Entity* mEntity, Team mTeam); //!< \todo `friend` to Entity
|
||||||
std::vector<Entity*>& getTeam(Team mTeam);
|
std::vector<Entity*>& getTeam(Team mTeam); //!< \returns std::vector containing all entities in team Entity::TeamLabel
|
||||||
|
|
||||||
std::vector<Entity*> getAll();
|
std::vector<Entity*> getAll(); //!< \returns std::vector containing all entities
|
||||||
|
|
||||||
Entity& addEntity();
|
Entity& addEntity(); //!< Creates and returns a new, empty entity
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::unique_ptr<Entity>> entities;
|
std::vector<std::unique_ptr<Entity>> entities;
|
||||||
|
|||||||
@ -23,6 +23,7 @@ public:
|
|||||||
TransformComponent(float x, float y, int w, int h, int scale);
|
TransformComponent(float x, float y, int w, int h, int scale);
|
||||||
|
|
||||||
void init() override;
|
void init() override;
|
||||||
|
/*! TODO: document usage of collision handler */
|
||||||
void update() override;
|
void update() override;
|
||||||
void modifySpeed(int8_t modifier);
|
void modifySpeed(int8_t modifier);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -115,6 +115,17 @@ std::vector<ColliderComponent*> CollisionHandler::getColliders(
|
|||||||
return colliders;
|
return colliders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
* \details Refer to getAnyIntersection() for more details
|
||||||
|
* \return A bitset of intersections, describing the directions of intersection. Position `Direction` in bitset true if edge in that direction collides
|
||||||
|
* \see Direction
|
||||||
|
* \see IntersectionBitSet
|
||||||
|
* \snippet CollisionHandler.h IntersectionBitSet
|
||||||
|
* \details Example usage for IntersectionBitSet (TransformComponent::update()):
|
||||||
|
* \snippet{trimleft} TransformComponent.cpp getAnyIntersection example code
|
||||||
|
*
|
||||||
|
*/
|
||||||
template<>
|
template<>
|
||||||
IntersectionBitSet CollisionHandler::getAnyIntersection<IntersectionBitSet>(
|
IntersectionBitSet CollisionHandler::getAnyIntersection<IntersectionBitSet>(
|
||||||
Entity* entity,
|
Entity* entity,
|
||||||
@ -123,6 +134,7 @@ IntersectionBitSet CollisionHandler::getAnyIntersection<IntersectionBitSet>(
|
|||||||
std::initializer_list<Entity::TeamLabel> const& teamLabels,
|
std::initializer_list<Entity::TeamLabel> const& teamLabels,
|
||||||
bool negateTeam)
|
bool negateTeam)
|
||||||
{
|
{
|
||||||
|
if (!entity->hasComponent<ColliderComponent>()) return std::bitset<DIRECTION_C>();
|
||||||
IntersectionBitSet intersections;
|
IntersectionBitSet intersections;
|
||||||
for (auto& collider : getColliders(groupLabels, teamLabels)) {
|
for (auto& collider : getColliders(groupLabels, teamLabels)) {
|
||||||
intersections |= getIntersection(entity, collider->entity, posMod);
|
intersections |= getIntersection(entity, collider->entity, posMod);
|
||||||
@ -130,6 +142,13 @@ IntersectionBitSet CollisionHandler::getAnyIntersection<IntersectionBitSet>(
|
|||||||
return intersections;
|
return intersections;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
* \details Refer to getAnyIntersection() for more details
|
||||||
|
* \return The first entity with collision found
|
||||||
|
* \see Entity
|
||||||
|
*
|
||||||
|
*/
|
||||||
template<>
|
template<>
|
||||||
Entity* CollisionHandler::getAnyIntersection<Entity*>(
|
Entity* CollisionHandler::getAnyIntersection<Entity*>(
|
||||||
Entity* entity,
|
Entity* entity,
|
||||||
@ -138,6 +157,7 @@ Entity* CollisionHandler::getAnyIntersection<Entity*>(
|
|||||||
std::initializer_list<Entity::TeamLabel> const& teamLabels,
|
std::initializer_list<Entity::TeamLabel> const& teamLabels,
|
||||||
bool negateTeam)
|
bool negateTeam)
|
||||||
{
|
{
|
||||||
|
if (!entity->hasComponent<ColliderComponent>()) return nullptr;
|
||||||
for (auto& collider : getColliders(groupLabels, teamLabels)) {
|
for (auto& collider : getColliders(groupLabels, teamLabels)) {
|
||||||
SDL_Rect rect = entity->getComponent<ColliderComponent>().collider + posMod;
|
SDL_Rect rect = entity->getComponent<ColliderComponent>().collider + posMod;
|
||||||
if (SDL_HasIntersection(&rect, &collider->collider)) {
|
if (SDL_HasIntersection(&rect, &collider->collider)) {
|
||||||
@ -146,3 +166,27 @@ Entity* CollisionHandler::getAnyIntersection<Entity*>(
|
|||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
*
|
||||||
|
* \details Refer to getAnyIntersection() for more details
|
||||||
|
* \return True if any collision was found, otherwise false
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
template<>
|
||||||
|
bool CollisionHandler::getAnyIntersection<bool>(
|
||||||
|
Entity* entity,
|
||||||
|
Vector2D posMod,
|
||||||
|
std::initializer_list<Entity::GroupLabel> const& groupLabels,
|
||||||
|
std::initializer_list<Entity::TeamLabel> const& teamLabels,
|
||||||
|
bool negateTeam)
|
||||||
|
{
|
||||||
|
if (!entity->hasComponent<ColliderComponent>()) return false;
|
||||||
|
for (auto& collider : getColliders(groupLabels, teamLabels)) {
|
||||||
|
SDL_Rect rect = entity->getComponent<ColliderComponent>().collider + posMod;
|
||||||
|
if (SDL_HasIntersection(&rect, &collider->collider)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
@ -63,6 +63,8 @@ void TransformComponent::update()
|
|||||||
// TODO: move to separate functions
|
// TODO: move to separate functions
|
||||||
|
|
||||||
if (this->entity->hasGroup((size_t)Entity::GroupLabel::PLAYERS)) {
|
if (this->entity->hasGroup((size_t)Entity::GroupLabel::PLAYERS)) {
|
||||||
|
|
||||||
|
// [getAnyIntersection example code]
|
||||||
IntersectionBitSet intersections =
|
IntersectionBitSet intersections =
|
||||||
(CollisionHandler::getIntersectionWithBounds(entity, Vector2D(positionChange.x, 0)) |
|
(CollisionHandler::getIntersectionWithBounds(entity, Vector2D(positionChange.x, 0)) |
|
||||||
(Game::collisionHandler->getAnyIntersection<IntersectionBitSet>(entity, Vector2D(positionChange.x, 0), { Entity::GroupLabel::MAPTILES, Entity::GroupLabel::COLLIDERS })) &
|
(Game::collisionHandler->getAnyIntersection<IntersectionBitSet>(entity, Vector2D(positionChange.x, 0), { Entity::GroupLabel::MAPTILES, Entity::GroupLabel::COLLIDERS })) &
|
||||||
@ -76,6 +78,7 @@ void TransformComponent::update()
|
|||||||
|
|
||||||
if (intersections.test((size_t)Direction::UP) || intersections.test((size_t)Direction::DOWN))
|
if (intersections.test((size_t)Direction::UP) || intersections.test((size_t)Direction::DOWN))
|
||||||
positionChange.y = 0;
|
positionChange.y = 0;
|
||||||
|
// [getAnyIntersection example code]
|
||||||
}
|
}
|
||||||
|
|
||||||
position += positionChange;
|
position += positionChange;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user