first commit

This commit is contained in:
2025-11-24 23:10:55 -06:00
commit 8315fa51c9
279 changed files with 74600 additions and 0 deletions

View File

@@ -0,0 +1,204 @@
extends Node
## Settings Service
##
## Singleton service for application configuration.
## Stores URLs, feature flags, and other runtime settings.
##
## Usage:
## Settings.get_api_url()
## Settings.get_web_url()
## Settings.set_environment("production")
# Environment types
enum Env {
DEVELOPMENT,
STAGING,
PRODUCTION
}
# Current environment
var _current_environment: int = Env.DEVELOPMENT
# URL Configuration
var _api_urls := {
Env.DEVELOPMENT: "http://localhost:5000",
Env.STAGING: "https://staging-api.codeofconquest.com",
Env.PRODUCTION: "https://api.codeofconquest.com"
}
var _web_urls := {
Env.DEVELOPMENT: "http://localhost:8000", # Flask serves web pages in dev
Env.STAGING: "https://staging.codeofconquest.com",
Env.PRODUCTION: "https://www.codeofconquest.com"
}
# Feature flags
var _features := {
"enable_debug_logging": true,
"enable_analytics": false,
"enable_multiplayer": false,
"max_characters_per_user": 5
}
# User preferences (persisted)
var _preferences := {
"remember_login": true,
"auto_save": true,
"sound_enabled": true,
"music_enabled": true,
"sound_volume": 0.8,
"music_volume": 0.6
}
# Save file configuration
const SETTINGS_FILE_PATH := "user://settings.save"
const SETTINGS_VERSION := 1
func _ready() -> void:
_load_settings()
_detect_environment()
print("[Settings] Service initialized")
print("[Settings] Environment: %s" % _environment_to_string(_current_environment))
print("[Settings] API URL: %s" % get_api_url())
print("[Settings] Web URL: %s" % get_web_url())
## Get current API base URL
func get_api_url() -> String:
return _api_urls.get(_current_environment, _api_urls[Env.DEVELOPMENT])
## Get current web frontend base URL
func get_web_url() -> String:
return _web_urls.get(_current_environment, _web_urls[Env.DEVELOPMENT])
## Get current environment
func get_environment() -> int:
return _current_environment
## Set environment (for testing/switching)
func set_environment(env: int) -> void:
_current_environment = env
print("[Settings] Environment changed to: %s" % _environment_to_string(env))
print("[Settings] API URL: %s" % get_api_url())
print("[Settings] Web URL: %s" % get_web_url())
## Check if a feature is enabled
func is_feature_enabled(feature_name: String) -> bool:
return _features.get(feature_name, false)
## Get feature value
func get_feature(feature_name: String, default: Variant = null) -> Variant:
return _features.get(feature_name, default)
## Set feature flag (for testing/debugging)
func set_feature(feature_name: String, value: Variant) -> void:
_features[feature_name] = value
print("[Settings] Feature updated: %s = %s" % [feature_name, value])
## Get user preference
func get_preference(key: String, default: Variant = null) -> Variant:
return _preferences.get(key, default)
## Set user preference
func set_preference(key: String, value: Variant) -> void:
_preferences[key] = value
print("[Settings] Preference updated: %s = %s" % [key, value])
_save_settings()
## Get all preferences
func get_all_preferences() -> Dictionary:
return _preferences.duplicate()
## Auto-detect environment based on OS and build flags
func _detect_environment() -> void:
# Check for --production command line argument
var args := OS.get_cmdline_args()
if "--production" in args:
_current_environment = Env.PRODUCTION
return
if "--staging" in args:
_current_environment = Env.STAGING
return
# Default to development
_current_environment = Env.DEVELOPMENT
## Save settings to disk
func _save_settings() -> void:
var save_data := {
"version": SETTINGS_VERSION,
"preferences": _preferences,
"timestamp": Time.get_unix_time_from_system()
}
var file := FileAccess.open(SETTINGS_FILE_PATH, FileAccess.WRITE)
if file == null:
push_error("[Settings] Failed to open settings file for writing: %s" % FileAccess.get_open_error())
return
file.store_string(JSON.stringify(save_data))
file.close()
print("[Settings] Settings saved to %s" % SETTINGS_FILE_PATH)
## Load settings from disk
func _load_settings() -> void:
if not FileAccess.file_exists(SETTINGS_FILE_PATH):
print("[Settings] No settings file found, using defaults")
return
var file := FileAccess.open(SETTINGS_FILE_PATH, FileAccess.READ)
if file == null:
push_error("[Settings] Failed to open settings file for reading: %s" % FileAccess.get_open_error())
return
var json_string := file.get_as_text()
file.close()
var json := JSON.new()
var parse_error := json.parse(json_string)
if parse_error != OK:
push_error("[Settings] Failed to parse settings file")
return
var save_data: Dictionary = json.data
# Check version
if save_data.get("version", 0) != SETTINGS_VERSION:
print("[Settings] Settings file version mismatch, using defaults")
return
# Restore preferences
var saved_prefs = save_data.get("preferences", {})
for key in saved_prefs:
_preferences[key] = saved_prefs[key]
print("[Settings] Settings loaded from %s" % SETTINGS_FILE_PATH)
## Convert environment enum to string
func _environment_to_string(env: int) -> String:
match env:
Env.DEVELOPMENT:
return "Development"
Env.STAGING:
return "Staging"
Env.PRODUCTION:
return "Production"
_:
return "Unknown"