TowerDefense/Globals/Game.gd
2025-09-03 20:52:14 +02:00

97 lines
3 KiB
GDScript

@tool
class_name Game
## COLORS ##
enum COLOR { HEALTH, ENERGY, SELECTED, SECONDARY, BACKGROUND_PANEL }
const COLOR_HEALTH : Color = Color(0.921569, 0.419608, 0.415686, 1)
const COLOR_ENERGY : Color = Color(0.921569, 0.890196, 0.415686, 1)
const COLOR_SELECTED : Color = Color(0.721569, 0.600196, 0.355686, 1)
const COLOR_SECONDARY : Color = Color(0.341, 0.082, 0.094, 0.0)
const COLOR_BACKGROUND_PANEL : Color = Color(0.933, 0.933, 0.933, 1)
const COLOR_FALLBACK : Color = Color(0.341176, 0.0823529, 0.0941176, 0)
static func getColor(color : COLOR) -> Color :
match color:
COLOR.HEALTH : return COLOR_HEALTH
COLOR.ENERGY : return COLOR_ENERGY
COLOR.SELECTED : return COLOR_SELECTED
COLOR.SECONDARY : return COLOR_SECONDARY
COLOR.BACKGROUND_PANEL : return COLOR_BACKGROUND_PANEL
_: return COLOR_FALLBACK
## END COLORS ##
const SCENE_DIR_PATTERN : String = "res://\\w+/(Scenes|Map \\d+)/$"
const SCENE_FILE_PATTERN : String = "([^/]*)\\.tscn$"
const RESOURCE_FILE_PATTERN : String = "([^/]*)\\.tres$"
const TOWER_DIR : String = "res://Towers/Scenes/"
const ENEMY_DIR : String = "res://Enemies/Scenes/"
const LEVEL_DIR : String = "res://Levels/"
static var towers : Dictionary
static var enmies : Dictionary
enum RESOURCE_TYPE { TOWER, ENEMY, LEVEL }
static func _static_init() -> void:
preloadSceneInGlobal(towers, RESOURCE_TYPE.TOWER)
#preloadSceneInGlobal(enemies, ENEMY_DIR)
## [color=crimson][b]WARNING :[/b] Work only with the [enum RESOURCE_TYPE] [param TOWER][/color]
static func preloadSceneInGlobal(property: Dictionary, type: RESOURCE_TYPE) -> void:
if type != RESOURCE_TYPE.TOWER:
return
var files : Array[String] = getPackedScenesPaths(type)
for file in files:
var scene = load(file)
if scene:
property.set(EnhancedResource.getPackedSceneProperty(scene, "tower_type"), scene)
property.sort()
static func getPackedScenesPaths(type: RESOURCE_TYPE) -> Array[String]:
return getFileFromDir(getDirFromType(type), SCENE_FILE_PATTERN, SCENE_DIR_PATTERN)
static func getResourcesPaths(type: RESOURCE_TYPE) -> Array[String]:
if type == RESOURCE_TYPE.LEVEL:
return getFileFromDir(getDirFromType(type), RESOURCE_FILE_PATTERN, LEVEL_DIR)
return []
static func getDirFromType(type: RESOURCE_TYPE) -> String:
match type:
RESOURCE_TYPE.TOWER: return TOWER_DIR
RESOURCE_TYPE.ENEMY: return ENEMY_DIR
RESOURCE_TYPE.LEVEL: return LEVEL_DIR
_: return ""
static func getFileFromDir(path : String, regexPattern : String, pathRegexPattern : String = "") -> Array[String]:
var files : Array[String]
var regex : RegEx = RegEx.create_from_string(regexPattern)
var pathRegex : RegEx = RegEx.create_from_string(pathRegexPattern)
var dir : DirAccess = DirAccess.open(path)
if pathRegexPattern:
for subDir in dir.get_directories():
subDir = path + subDir + "/"
if pathRegex.search(subDir):
files.append_array(getFileFromDir(subDir, regexPattern, pathRegexPattern))
for file in dir.get_files():
if regex.search(file) && pathRegex.search(path):
files.append(path + file)
return files