## TeamData — Team definitions and resource for a tactical FPS. ## ## Defines the Team enum, named constants for team metadata, ## and a TeamData resource for per-team configuration. ## ## Usage: ## var team: Team = Team.COUNTER_TERRORIST ## var name: String = TeamData.get_team_name(team) ## var color: Color = TeamData.get_team_color(team) ## ## Persists across rounds (round-independent). ## ## Enum values follow Godot-friendly ordering: ## 0 = SPECTATOR (no team) ## 1 = COUNTER_TERRORIST ## 2 = TERRORIST extends Resource class_name TeamData # --------------------------------------------------------------------------- # Team enum # --------------------------------------------------------------------------- enum Team { SPECTATOR = 0, COUNTER_TERRORIST = 1, TERRORIST = 2, } # --------------------------------------------------------------------------- # Named constants # --------------------------------------------------------------------------- const TEAM_NAMES: Dictionary = { Team.SPECTATOR: "Spectator", Team.COUNTER_TERRORIST: "Counter-Terrorist", Team.TERRORIST: "Terrorist", } const TEAM_COLORS: Dictionary = { Team.SPECTATOR: Color(0.6, 0.6, 0.6, 1.0), Team.COUNTER_TERRORIST: Color(0.2, 0.5, 0.9, 1.0), # Blue Team.TERRORIST: Color(0.9, 0.3, 0.2, 1.0), # Red } ## Default starting money per player on each team. const STARTING_MONEY: Dictionary = { Team.COUNTER_TERRORIST: 800, Team.TERRORIST: 800, Team.SPECTATOR: 0, } ## Default spawn group suffixes used by SpawnManager when looking for markers. const TEAM_SPAWN_GROUPS: Dictionary = { Team.COUNTER_TERRORIST: "spawn_points_ct", Team.TERRORIST: "spawn_points_t", } # --------------------------------------------------------------------------- # Resource properties # --------------------------------------------------------------------------- ## The team this resource describes. @export var team_id: Team = Team.SPECTATOR ## Human-readable display name for this team. @export var display_name: String = "" ## Team colour (used for UI, minimap, etc.). @export var color: Color = Color.WHITE ## Default spawn group name to scan when placing this team on a map. @export var default_spawn_group: String = "" # --------------------------------------------------------------------------- # Static helpers # --------------------------------------------------------------------------- ## Return the human-readable name for a Team enum value. static func get_team_name(team: Team) -> String: return TEAM_NAMES.get(team, "Unknown") ## Return the colour for a Team enum value. static func get_team_color(team: Team) -> Color: return TEAM_COLORS.get(team, Color.WHITE) ## Return the starting money for a Team enum value. static func get_starting_money(team: Team) -> int: return STARTING_MONEY.get(team, 0) ## Return the spawn group name for a Team enum value. static func get_spawn_group(team: Team) -> String: return TEAM_SPAWN_GROUPS.get(team, "") ## Return true if the team is a playable team (not spectator). static func is_playable_team(team: Team) -> bool: return team == Team.COUNTER_TERRORIST or team == Team.TERRORIST ## Convert a string to a Team enum value. Returns SPECTATOR if unknown. static func from_string(name: String) -> Team: match name.to_lower(): "counter_terrorist", "counter-terrorist", "ct", "counterterrorist": return Team.COUNTER_TERRORIST "terrorist", "t": return Team.TERRORIST _: return Team.SPECTATOR ## Convert a Team enum value to its short string identifier. static func to_short_string(team: Team) -> String: match team: Team.COUNTER_TERRORIST: return "CT" Team.TERRORIST: return "T" _: return "SPEC"