Example project

# Conflicts:
#	.gitignore
This commit is contained in:
Lucas 2025-07-24 10:29:00 +02:00
parent 1513fd00dd
commit 7f4fe92271
No known key found for this signature in database
14 changed files with 145 additions and 0 deletions

2
.gitattributes vendored Normal file
View file

@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
# ---> Godot # ---> Godot
# Godot 4+ specific ignores # Godot 4+ specific ignores
.godot/ .godot/
/android/
# Godot-specific ignores # Godot-specific ignores
.import/ .import/

View file

@ -0,0 +1,11 @@
extends Node
var units = {}
var buildings = {}
func register_unit(data: Dictionary):
units[data["id"]] = data
func register_building(data: Dictionary):
buildings[data["id"]] = data

View file

@ -0,0 +1 @@
uid://chylch01h275w

58
autoload/ModLoader.gd Normal file
View file

@ -0,0 +1,58 @@
extends Node
var mod_paths := []
var mod_manifests := {}
const MODS_DIR := "res://mods"
func _ready():
load_mods(MODS_DIR)
load_mod_content()
func load_mods(base_path: String):
var dir := DirAccess.open(base_path)
if not dir:
push_error("No mods folder found.")
return
for folder in dir.get_directories():
var mod_path = base_path + "/" + folder
var manifest_path = mod_path + "/manifest.json"
if FileAccess.file_exists(manifest_path):
var manifest_file := FileAccess.open(manifest_path, FileAccess.READ)
var manifest : Dictionary = JSON.parse_string(manifest_file.get_as_text())
if typeof(manifest) == TYPE_DICTIONARY: # always true ?
mod_paths.append(mod_path)
mod_manifests[manifest["id"]] = manifest
print("Mod loaded: %s" % manifest["name"])
func load_units(units_path: String):
var dir := DirAccess.open(units_path)
if dir:
for file in dir.get_files():
if file.get_extension() == "json":
var file_path = units_path + "/" + file
var f := FileAccess.open(file_path, FileAccess.READ)
if f:
var data = JSON.parse_string(f.get_as_text())
if typeof(data) == TYPE_DICTIONARY:
ContentRegistry.register_unit(data)
print("Unit loaded: %s" % data["id"])
func load_buildings(buildings_path: String):
var dir := DirAccess.open(buildings_path)
if dir:
for file in dir.get_files():
if file.get_extension() == "json":
var file_path = buildings_path + "/" + file
var f := FileAccess.open(file_path, FileAccess.READ)
if f:
var data = JSON.parse_string(f.get_as_text())
if typeof(data) == TYPE_DICTIONARY:
ContentRegistry.register_building(data)
print("Building loaded: %s" % data["id"])
func load_mod_content():
for mod_path in mod_paths:
load_units(mod_path + "/units")
load_buildings(mod_path + "/buildings")

View file

@ -0,0 +1 @@
uid://c82sxdmgrv7lk

3
main/Label.tscn Normal file
View file

@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://label"]
[node name="Label" type="Label"]

9
main/Main.gd Normal file
View file

@ -0,0 +1,9 @@
extends Node
@onready var label := $Label
func _ready():
var unit_list = ContentRegistry.units.keys()
var building_list = ContentRegistry.buildings.keys()
label.text = "Loaded units: " + str(unit_list) + "\n" + "Loaded buildings: " + str(building_list)

1
main/Main.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://byy1qyojb5rwv

9
main/Main.tscn Normal file
View file

@ -0,0 +1,9 @@
[gd_scene load_steps=3 format=3 uid="uid://duto8i2373vdn"]
[ext_resource type="Script" uid="uid://byy1qyojb5rwv" path="res://main/Main.gd" id="1_qv31u"]
[ext_resource type="PackedScene" uid="uid://label" path="res://main/Label.tscn" id="2_wbnyf"]
[node name="Main" type="Node3D"]
script = ExtResource("1_qv31u")
[node name="Label" parent="." instance=ExtResource("2_wbnyf")]

View file

@ -0,0 +1,12 @@
{
"id": "barracks",
"name": "Barracks",
"description": "Trains melee units.",
"build_cost": {
"wood": 100,
"stone": 50
},
"build_time": 30,
"produces_units": ["soldier"]
}

View file

@ -0,0 +1,10 @@
{
"id": "base_content",
"name": "Core Vanilla Game",
"version": "1.0",
"description": "Factions, unités, bâtiments et cartes de base.",
"author": "TonStudio",
"dependencies": [],
"load_order": 0
}

View file

@ -0,0 +1,8 @@
{
"id": "soldier",
"name": "Soldier",
"health": 100,
"attack": 10,
"speed": 3.0
}

19
project.godot Normal file
View file

@ -0,0 +1,19 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
run/main_scene="uid://duto8i2373vdn"
config/features=PackedStringArray("4.4")
[autoload]
ModLoader="*res://autoload/ModLoader.gd"
ContentRegistry="*res://autoload/ContentRegistry.gd"