codanna 0.9.19

Code Intelligence for Large Language Models
Documentation
@tool
## Entry point for the GDScript demo project.
class_name GameManager
extends Node

const LevelRegistry := preload("./levels/level_registry.gd")
const PlayerScene := preload("./characters/hero.gd")
const HudScene := preload("./ui/hud.gd")
const MathUtils := preload("./utils/math_utils.gd")

signal stage_loaded(stage_name)
signal player_joined(player_name)

enum StageDifficulty { EASY, NORMAL, HARD }

const MAX_PLAYERS := 4
@export var starting_stage := "intro"
var players: Array = []
var current_stage := ""
var difficulty := StageDifficulty.EASY
var difficulty_scale := 1.0

func _ready() -> void:
	initialize()
	_connect_stage_events()

func initialize() -> void:
	current_stage = "intro"
	players.clear()
	difficulty = StageDifficulty.EASY
	difficulty_scale = calculate_difficulty(0.25)
	_load_stage(current_stage)

func _connect_stage_events() -> void:
	var level_registry = LevelRegistry.new()
	level_registry.stage_started.connect(_on_stage_started)
	level_registry.stage_completed.connect(_on_stage_completed)

func _load_stage(stage_name: String) -> void:
	var level_registry = LevelRegistry.new()
	level_registry.load(stage_name)
	emit_signal("stage_loaded", stage_name)

func register_player(player_name: String) -> void:
	if players.size() >= MAX_PLAYERS:
		push_warning("Maximum player count reached")
		return
	players.append(player_name)
	emit_signal("player_joined", player_name)

func spawn_player(player_name: String) -> Node:
	var hero: Node = PlayerScene.new()
	hero.setup(player_name)
	var normalized := float(players.size()) / float(MAX_PLAYERS)
	hero.sprint(1.0 + MathUtils.clamp01(normalized))
	return hero

func build_hud() -> Control:
	var hud = HudScene.new()
	hud.setup(players)
	return hud

func describe_stage(stage_name: String) -> String:
	match stage_name:
		"intro":
			return "Tutorial encounter"
		"forest":
			return "Whispering Forest"
		"castle":
			return "Frozen Keep"
		_:
			return "Unknown"

class StageStats:
	var name := ""
	var enemies_defeated := 0
	var completion_time := 0.0

	func _init(new_name := "unknown"):
		name = new_name
		completion_time = 0.0

	func summary() -> String:
		return "%s | Enemies: %d | Time: %.2f" % [name, enemies_defeated, completion_time]

func _on_stage_started(stage_name: String) -> void:
	var stats := StageStats.new()
	stats.name = stage_name
	stats.enemies_defeated = 0
	stats.completion_time = 0.0
	var weight := 0.0
	match stage_name:
		"intro":
			weight = 0.1
		"forest":
			weight = 0.5
		"castle":
			weight = 0.9
		_:
			weight = 0.3

	difficulty_scale = calculate_difficulty(weight)
	print("Stage started:", stats.summary())


func _on_stage_completed(stage_name: String, elapsed: float) -> void:
	print("Stage completed:", stage_name, "in", elapsed)

func debug_print_players() -> void:
	for name in players:
		print("Player:", name)

func calculate_difficulty(weight: float) -> float:
	var adjusted := weight
	var counter := 0
	while counter < 3:
		adjusted = MathUtils.clamp01(adjusted + 0.05)
		counter += 1

	return MathUtils.lerp_value(0.75, 1.5, adjusted)