Compare commits

...

11 commits

20 changed files with 454 additions and 60 deletions

12
.gitignore vendored
View file

@ -5,10 +5,16 @@
# When configure fails, SCons outputs these # When configure fails, SCons outputs these
config.log config.log
.sconf_temp .sconf_temp
.config
# build artefacts
.cache/
*.o
compile_commands.json
engine/.github engine/.github
project/.godot project/.godot
build/PROJECT.pck build/authority.pck
build/PROJECT.x86_64 build/authority.x86_64
build/PROJECT.exe build/authority.exe
build.zip build.zip

3
.gitmodules vendored
View file

@ -0,0 +1,3 @@
[submodule "engine"]
path = engine
url = https://github.com/godotengine/godot.git

1
engine Submodule

@ -0,0 +1 @@
Subproject commit e531f3eb7b13a9adaaf5b15ac9b3aebc4c2030cd

View file

@ -1,34 +1,46 @@
set export set export
BUILD_NAME := "change_me" BUILD_NAME := "authority"
release_template_path_linux := `realpath engine/bin/godot.linuxbsd.template_release.x86_64.llvm`
release_template_path_windows := `realpath engine/bin/godot.windows.template_release.x86_64.llvm`
build: build: format
cd engine/ && scons target=editor symbols=yes optimization=debug dev_build=yes linker=mold use_llvm=yes compiledb=yes # Compiling Editor
cd engine/ && scons target=editor symbols=yes optimization=debug dev_build=yes linker=mold use_llvm=yes compiledb=yes custom_modules="../modules"
run: build run: build
# Running Editor
engine/bin/godot.linuxbsd.editor.dev.x86_64.llvm --editor --path project engine/bin/godot.linuxbsd.editor.dev.x86_64.llvm --editor --path project
release-linux: build release-linux: build
# Compiling Linux Release
cd engine/ && scons platform=linuxbsd target=template_release arch=x86_64 linker=mold use_llvm=yes compiledb=yes custom_modules="../modules" cd engine/ && scons platform=linuxbsd target=template_release arch=x86_64 linker=mold use_llvm=yes compiledb=yes custom_modules="../modules"
sed -i "s!{path}!{{release_template_path_linux}}!" project/export_presets.cfg # Preparing Build Environment
sed -i "s!templatepath!{{`realpath engine/bin/godot.linuxbsd.template_release.x86_64.llvm`}}!" project/export_presets.cfg
rm -rf build && mkdir build rm -rf build && mkdir build
engine/bin/godot.*.editor.dev.*.llvm --headless --export-release "Linux" project/project.godot && zip build.zip build/* engine/bin/godot.*.editor.dev.*.llvm --headless --export-release "Linux" project/project.godot && zip build.zip build/*
# Resetting Build Environment
touch build/.gitkeep touch build/.gitkeep
sed -i "s!{{release_template_path_linux}}!{path}!" project/export_presets.cfg sed -i "s!{{`realpath engine/bin/godot.linuxbsd.template_release.x86_64.llvm`}}!templatepath!" project/export_presets.cfg
# Completed Linux Release Build
release-windows: build release-windows: build
# Compiling Windows Release
cd engine/ && scons platform=windows target=template_release arch=x86_64 linker=mold use_llvm=yes compiledb=yes custom_modules="../modules" cd engine/ && scons platform=windows target=template_release arch=x86_64 linker=mold use_llvm=yes compiledb=yes custom_modules="../modules"
sed -i "s!{path}!{{release_template_path_windows}}!" project/export_presets.cfg # Preparing Build Environment
sed -i "s!templatepath!{{`realpath engine/bin/godot.windows.template_release.x86_64.llvm`}}!" project/export_presets.cfg
rm -rf build && mkdir build rm -rf build && mkdir build
engine/bin/godot.*.editor.dev.*.llvm --headless --export-release "Windows" project/project.godot && zip build.zip build/* engine/bin/godot.*.editor.dev.*.llvm --headless --export-release "Windows" project/project.godot && zip build.zip build/*
touch build/.gitkeep # Resetting Build Environment
sed -i "s!{{release_template_path_windows}}!{path}!" project/export_presets.cfg touch build/.gitkeep
sed -i "s!{{`realpath engine/bin/godot.windows.template_release.x86_64.llvm`}}!templatepath!" project/export_presets.cfg
# Completed Windows Release Build
initialize-template projectname: initialize-template projectname:
# Initializing Template {{projectname}}
sed -i -e "s/PROJECT/{{projectname}}/g" ./modules/PROJECT/register_types.h ./modules/PROJECT/register_types.cpp ./project/project.godot ./project/export_presets.cfg .gitignore sed -i -e "s/PROJECT/{{projectname}}/g" ./modules/PROJECT/register_types.h ./modules/PROJECT/register_types.cpp ./project/project.godot ./project/export_presets.cfg .gitignore
sed "s/change_me/{{projectname}}/" ./justfile sed "s/change_me/{{projectname}}/" ./justfile
mv ./modules/PROJECT ./modules/{{projectname}} mv ./modules/PROJECT ./modules/{{projectname}}
# Done Initializing, you will still have to update BUILD_NAME in your justfile
format:
# Formatting Custom Modules
clang-format -i $(find modules/ -iname '*.h' -o -iname '*.c' -o -iname '*.hpp' -o -iname '*.cpp' -o -iname '*.hxx' -o -iname '*.cxx')

238
modules/.clang-format Normal file
View file

@ -0,0 +1,238 @@
# Commented out parameters are those with the same value as base LLVM style.
# We can uncomment them if we want to change their value, or enforce the
# chosen value in case the base style changes (last sync: Clang 17.0.6).
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
# AlignArrayOfStructures: None
# AlignConsecutiveAssignments:
# Enabled: false
# AcrossEmptyLines: false
# AcrossComments: false
# AlignCompound: false
# PadOperators: true
# AlignConsecutiveBitFields:
# Enabled: false
# AcrossEmptyLines: false
# AcrossComments: false
# AlignCompound: false
# PadOperators: false
# AlignConsecutiveDeclarations:
# Enabled: false
# AcrossEmptyLines: false
# AcrossComments: false
# AlignCompound: false
# PadOperators: false
# AlignConsecutiveMacros:
# Enabled: false
# AcrossEmptyLines: false
# AcrossComments: false
# AlignCompound: false
# PadOperators: false
# AlignConsecutiveShortCaseStatements:
# Enabled: false
# AcrossEmptyLines: false
# AcrossComments: false
# AlignCaseColons: false
# AlignEscapedNewlines: Right
AlignOperands: DontAlign
AlignTrailingComments:
Kind: Never
OverEmptyLines: 0
# AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
# AllowShortBlocksOnASingleLine: Never
# AllowShortCaseLabelsOnASingleLine: false
# AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Inline
# AllowShortIfStatementsOnASingleLine: Never
# AllowShortLambdasOnASingleLine: All
# AllowShortLoopsOnASingleLine: false
# AlwaysBreakAfterDefinitionReturnType: None
# AlwaysBreakAfterReturnType: None
# AlwaysBreakBeforeMultilineStrings: false
# AlwaysBreakTemplateDeclarations: MultiLine
# AttributeMacros:
# - __capability
# BinPackArguments: true
# BinPackParameters: true
# BitFieldColonSpacing: Both
# BraceWrapping:
# AfterCaseLabel: false
# AfterClass: false
# AfterControlStatement: Never
# AfterEnum: false
# AfterFunction: false
# AfterNamespace: false
# AfterObjCDeclaration: false
# AfterStruct: false
# AfterUnion: false
# AfterExternBlock: false
# BeforeCatch: false
# BeforeElse: false
# BeforeLambdaBody: false
# BeforeWhile: false
# IndentBraces: false
# SplitEmptyFunction: true
# SplitEmptyRecord: true
# SplitEmptyNamespace: true
# BreakAfterAttributes: Never
# BreakAfterJavaFieldAnnotations: false
# BreakArrays: true
# BreakBeforeBinaryOperators: None
# BreakBeforeBraces: Attach
# BreakBeforeConceptDeclarations: Always
# BreakBeforeInlineASMColon: OnlyMultiline
# BreakBeforeTernaryOperators: true
BreakConstructorInitializers: AfterColon
# BreakInheritanceList: BeforeColon
# BreakStringLiterals: true
ColumnLimit: 0
# CommentPragmas: "^ IWYU pragma:"
# CompactNamespaces: false
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
# DerivePointerAlignment: false
# DisableFormat: false
# EmptyLineAfterAccessModifier: Never
# EmptyLineBeforeAccessModifier: LogicalBlock
# ExperimentalAutoDetectBinPacking: false
# FixNamespaceComments: true
# ForEachMacros:
# - foreach
# - Q_FOREACH
# - BOOST_FOREACH
# IfMacros:
# - KJ_IF_MAYBE
# IncludeBlocks: Preserve
IncludeCategories:
- Regex: ^".*"$
Priority: 1
- Regex: ^<.*\.h>$
Priority: 2
- Regex: ^<.*>$
Priority: 3
# IncludeIsMainRegex: (Test)?$
# IncludeIsMainSourceRegex: ""
# IndentAccessModifiers: false
# IndentCaseBlocks: false
IndentCaseLabels: true
# IndentExternBlock: AfterExternBlock
# IndentGotoLabels: true
# IndentPPDirectives: None
# IndentRequiresClause: true
IndentWidth: 4
# IndentWrappedFunctionNames: false
InsertBraces: true
# InsertNewlineAtEOF: false
# InsertTrailingCommas: None
# IntegerLiteralSeparator:
# Binary: 0
# BinaryMinDigits: 0
# Decimal: 0
# DecimalMinDigits: 0
# Hex: 0
# HexMinDigits: 0
JavaImportGroups:
- org.godotengine
- android
- androidx
- com.android
- com.google
- java
- javax
# JavaScriptQuotes: Leave
# JavaScriptWrapImports: true
# KeepEmptyLinesAtEOF: false
KeepEmptyLinesAtTheStartOfBlocks: false
# LambdaBodyIndentation: Signature
# Language: Cpp
# LineEnding: DeriveLF
# MacroBlockBegin: ""
# MacroBlockEnd: ""
# MaxEmptyLinesToKeep: 1
# NamespaceIndentation: None
# ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
# ObjCBreakBeforeNestedBlockParam: true
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: true
# PPIndentWidth: -1
PackConstructorInitializers: NextLine
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 19
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakOpenParenthesis: 0
# PenaltyBreakString: 1000
# PenaltyBreakTemplateDeclaration: 10
# PenaltyExcessCharacter: 1000000
# PenaltyIndentedWhitespace: 0
# PenaltyReturnTypeOnItsOwnLine: 60
# PointerAlignment: Right
# QualifierAlignment: Leave
# ReferenceAlignment: Pointer
# ReflowComments: true
# RemoveBracesLLVM: false
# RemoveParentheses: Leave
RemoveSemicolon: true
# RequiresClausePosition: OwnLine
# RequiresExpressionIndentation: OuterScope
# SeparateDefinitionBlocks: Leave
# ShortNamespaceLines: 1
# SortIncludes: CaseSensitive
# SortJavaStaticImport: Before
# SortUsingDeclarations: LexicographicNumeric
# SpaceAfterCStyleCast: false
# SpaceAfterLogicalNot: false
# SpaceAfterTemplateKeyword: true
# SpaceAroundPointerQualifiers: Default
# SpaceBeforeAssignmentOperators: true
# SpaceBeforeCaseColon: false
# SpaceBeforeCpp11BracedList: false
# SpaceBeforeCtorInitializerColon: true
# SpaceBeforeInheritanceColon: true
# SpaceBeforeJsonColon: false
# SpaceBeforeParens: ControlStatements
# SpaceBeforeParensOptions:
# AfterControlStatements: true
# AfterForeachMacros: true
# AfterFunctionDeclarationName: false
# AfterFunctionDefinitionName: false
# AfterIfMacros: true
# AfterOverloadedOperator: false
# AfterRequiresInClause: false
# AfterRequiresInExpression: false
# BeforeNonEmptyParentheses: false
# SpaceBeforeRangeBasedForLoopColon: true
# SpaceBeforeSquareBrackets: false
# SpaceInEmptyBlock: false
# SpacesBeforeTrailingComments: 1
# SpacesInAngles: Never
# SpacesInContainerLiterals: true
SpacesInLineCommentPrefix:
Minimum: 0 # We want a minimum of 1 for comments, but allow 0 for disabled code.
Maximum: -1
# SpacesInParens: Never
# SpacesInParensOptions:
# InConditionalStatements: false
# InCStyleCasts: false
# InEmptyParentheses: false
# Other: false
# SpacesInSquareBrackets: false
Standard: c++20
# StatementAttributeLikeMacros:
# - Q_EMIT
# StatementMacros:
# - Q_UNUSED
# - QT_REQUIRE_VERSION
TabWidth: 4
UseTab: Always
# VerilogBreakBetweenInstancePorts: true
# WhitespaceSensitiveMacros:
# - BOOST_PP_STRINGIZE
# - CF_SWIFT_NAME
# - NS_SWIFT_NAME
# - PP_STRINGIZE
# - STRINGIZE

View file

@ -1,16 +0,0 @@
#ifndef GODOT_EXTRA_MACROS_H
#define GODOT_EXTRA_MACROS_H
#define BIND_GET_SET(m_property)\
ClassDB::bind_method(D_METHOD("set_" #m_property, #m_property), &self_type::set_##m_property);\
ClassDB::bind_method(D_METHOD("get_" #m_property), &self_type::get_##m_property)
#define BIND_HPROPERTY(m_type, m_property, ...)\
BIND_GET_SET(m_property);\
ADD_PROPERTY(PropertyInfo(m_type, #m_property, __VA_ARGS__), "set_" #m_property, "get_" #m_property)
#define BIND_PROPERTY(m_type, m_property)\
BIND_GET_SET(m_property);\
ADD_PROPERTY(PropertyInfo(m_type, #m_property), "set_" #m_property, "get_" #m_property)
#endif // !GODOT_EXTRA_MACROS_H

View file

@ -1,15 +0,0 @@
#include "register_types.h"
#include "core/object/class_db.h"
void initialize_PROJECT_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
}
void uninitialize_PROJECT_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
}

View file

@ -1,9 +0,0 @@
#ifndef PROJECT_REGISTER_TYPES_H
#define PROJECT_REGISTER_TYPES_H
#include "modules/register_module_types.h"
void initialize_PROJECT_module(ModuleInitializationLevel p_level);
void uninitialize_PROJECT_module(ModuleInitializationLevel p_level);
#endif // !PROJECT_REGISTER_TYPES_H

Binary file not shown.

View file

@ -0,0 +1,24 @@
#include "game_state.h"
#include "macros.h"
void GameState::_bind_methods() {
BIND_PROPERTY(Variant::STRING, locale_uid);
BIND_PROPERTY(Variant::STRING, locale_entrance_path);
}
void GameState::set_locale_uid(String const &value) {
this->locale_uid = value;
}
String GameState::get_locale_uid() const {
return this->locale_uid;
}
void GameState::set_locale_entrance_path(String const &value) {
this->locale_uid = value;
}
String GameState::get_locale_entrance_path() const {
return this->locale_uid;
}

View file

@ -0,0 +1,21 @@
#ifndef GAME_STATE_H
#define GAME_STATE_H
#include "core/object/object.h"
#include "core/object/class_db.h"
class GameState : public Object {
GDCLASS(GameState, Object);
static void _bind_methods();
public:
static GameState *get_singleton();
void set_locale_uid(String const &value);
String get_locale_uid() const;
void set_locale_entrance_path(String const &value);
String get_locale_entrance_path() const;
private:
String locale_uid{""};
String locale_entrance_path{""};
};
#endif // !GAME_STATE_H

View file

@ -0,0 +1,49 @@
#include "locale_marker.h"
#include "authority/game_state.h"
#include "core/config/engine.h"
#include "core/input/input_enums.h"
#include "macros.h"
void LocaleMarker::_bind_methods() {
BIND_HPROPERTY(Variant::STRING, locale_scene, PROPERTY_HINT_FILE, "*.tscn,*.scn");
}
void LocaleMarker::_notification(int what) {
if(Engine::get_singleton()->is_editor_hint()) {
return;
}
switch(what) {
default: return;
case NOTIFICATION_READY:
this->ready();
return;
}
}
void LocaleMarker::ready() {
this->connect(this->sig_input_event, callable_mp(this, &self_type::on_input_event));
}
void LocaleMarker::on_input_event(Node *camera, Ref<InputEvent> event, Vector3 position, Vector3 normal, int shape_ind) {
Ref<InputEventMouseButton> clicked{event};
if(clicked.is_valid() && clicked->get_button_index() == MouseButton::LEFT) {
GameState::get_singleton()->set_locale_entrance_path(this->entrance_path);
GameState::get_singleton()->set_locale_uid(locale_scene);
}
}
void LocaleMarker::set_locale_scene(String const &path) {
this->locale_scene = path;
}
String LocaleMarker::get_locale_scene() const {
return this->locale_scene;
}
void LocaleMarker::set_entrance_path(String const &node_path) {
this->entrance_path = node_path;
}
String LocaleMarker::get_entrance_path() const {
return this->entrance_path;
}

View file

@ -0,0 +1,25 @@
#ifndef LOCALE_MARKER_H
#define LOCALE_MARKER_H
#include "core/input/input_event.h"
#include "scene/3d/physics/area_3d.h"
#include "scene/main/node.h"
class LocaleMarker : public Area3D {
GDCLASS(LocaleMarker, Area3D);
static void _bind_methods();
void _notification(int what);
void ready();
void on_input_event(Node *camera, Ref<InputEvent> event, Vector3 position, Vector3 normal, int shape_ind);
public:
void set_locale_scene(String const &value);
String get_locale_scene() const;
void set_entrance_path(String const &value);
String get_entrance_path() const;
private:
String locale_scene{"res://"};
String entrance_path{"%"};
String const sig_input_event{"input_event"};
};
#endif // !LOCALE_MARKER_H

View file

@ -0,0 +1,20 @@
#ifndef GODOT_EXTRA_MACROS_H
#define GODOT_EXTRA_MACROS_H
#define BIND_GET_SET(m_property) \
ClassDB::bind_method(D_METHOD("set_" #m_property, #m_property), \
&self_type::set_##m_property); \
ClassDB::bind_method(D_METHOD("get_" #m_property), \
&self_type::get_##m_property)
#define BIND_HPROPERTY(m_type, m_property, ...) \
BIND_GET_SET(m_property); \
ADD_PROPERTY(PropertyInfo(m_type, #m_property, __VA_ARGS__), \
"set_" #m_property, "get_" #m_property)
#define BIND_PROPERTY(m_type, m_property) \
BIND_GET_SET(m_property); \
ADD_PROPERTY(PropertyInfo(m_type, #m_property), "set_" #m_property, \
"get_" #m_property)
#endif // !GODOT_EXTRA_MACROS_H

View file

@ -0,0 +1,26 @@
#include "register_types.h"
#include "authority/game_state.h"
#include "core/config/engine.h"
#include "core/object/class_db.h"
GameState *game_state{nullptr};
void initialize_authority_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
GDREGISTER_CLASS(GameState);
game_state = memnew(GameState);
Engine::get_singleton()->add_singleton(Engine::Singleton("GameState", GameState::get_singleton()));
}
void uninitialize_authority_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
if(game_state) {
memdelete(game_state);
}
}

View file

@ -0,0 +1,9 @@
#ifndef authority_REGISTER_TYPES_H
#define authority_REGISTER_TYPES_H
#include "modules/register_module_types.h"
void initialize_authority_module(ModuleInitializationLevel p_level);
void uninitialize_authority_module(ModuleInitializationLevel p_level);
#endif // !authority_REGISTER_TYPES_H

View file

@ -9,7 +9,7 @@ custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="../build/PROJECT.x86_64" export_path="../build/authority.x86_64"
patches=PackedStringArray() patches=PackedStringArray()
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""
@ -21,7 +21,7 @@ script_export_mode=2
[preset.0.options] [preset.0.options]
custom_template/debug="" custom_template/debug=""
custom_template/release="{path}" custom_template/release="templatepath"
debug/export_console_wrapper=1 debug/export_console_wrapper=1
binary_format/embed_pck=false binary_format/embed_pck=false
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
@ -45,13 +45,13 @@ rm -rf \"{temp_dir}\""
name="Windows" name="Windows"
platform="Windows Desktop" platform="Windows Desktop"
runnable=true runnable=true
advanced_options=false advanced_options=true
dedicated_server=false dedicated_server=false
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="../build/PROJECT.exe" export_path="../build/authority.exe"
patches=PackedStringArray() patches=PackedStringArray()
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""
@ -63,7 +63,7 @@ script_export_mode=2
[preset.1.options] [preset.1.options]
custom_template/debug="" custom_template/debug=""
custom_template/release="{path}" custom_template/release="templatepath"
debug/export_console_wrapper=1 debug/export_console_wrapper=1
binary_format/embed_pck=false binary_format/embed_pck=false
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true

View file

@ -10,6 +10,6 @@ config_version=5
[application] [application]
config/name="PROJECT" config/name="authority"
config/features=PackedStringArray("4.4", "Forward Plus") config/features=PackedStringArray("4.4", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"