blur camera
This commit is contained in:
@@ -36,12 +36,10 @@ func _ready() -> void:
|
||||
# Creiamo l'interfaccia a schermo!
|
||||
_crea_ui_gps()
|
||||
|
||||
print("✅ Generatore a Distretti Dinamici Pronto.")
|
||||
print("✅ Generatore a Distretti Dinamici Pronto (Versione Ottimizzata).")
|
||||
print("Premere il tasto 'B' per abilitare/disabilitare il terzo bioma.")
|
||||
|
||||
# --- NUOVA FUNZIONE: CREA LE SCRITTE A SCHERMO ---
|
||||
# --- NUOVA FUNZIONE: CREA LE SCRITTE A SCHERMO (CORRETTA) ---
|
||||
# --- NUOVA FUNZIONE: CREA LE SCRITTE A SCHERMO ---
|
||||
# --- CREA LE SCRITTE A SCHERMO ---
|
||||
func _crea_ui_gps() -> void:
|
||||
var canvas = CanvasLayer.new()
|
||||
canvas.layer = 10
|
||||
@@ -59,18 +57,18 @@ func _crea_ui_gps() -> void:
|
||||
|
||||
# --- SCRITTA BIOMA ATTUALE (Titolo) ---
|
||||
lbl_bioma = Label.new()
|
||||
lbl_bioma.add_theme_font_size_override("font_size", 10) # <--- QUI CAMBI LA GRANDEZZA (Prima era 26)
|
||||
lbl_bioma.add_theme_font_size_override("font_size", 10)
|
||||
lbl_bioma.add_theme_color_override("font_color", Color(1, 0.9, 0.4))
|
||||
lbl_bioma.add_theme_color_override("font_outline_color", Color.BLACK)
|
||||
lbl_bioma.add_theme_constant_override("outline_size", 3) # Ho ridotto anche il bordo nero per non impastare il testo piccolo
|
||||
lbl_bioma.add_theme_constant_override("outline_size", 3)
|
||||
lbl_bioma.text = "📍 Avvio GPS..."
|
||||
vbox.add_child(lbl_bioma)
|
||||
|
||||
# --- SCRITTA METRI MANCANTI (Sottotitolo) ---
|
||||
lbl_distanza = Label.new()
|
||||
lbl_distanza.add_theme_font_size_override("font_size", 8) # <--- QUI CAMBI LA GRANDEZZA (Prima era 20)
|
||||
lbl_distanza.add_theme_font_size_override("font_size", 8)
|
||||
lbl_distanza.add_theme_color_override("font_outline_color", Color.BLACK)
|
||||
lbl_distanza.add_theme_constant_override("outline_size", 3) # Bordo ridotto proporzionalmente
|
||||
lbl_distanza.add_theme_constant_override("outline_size", 3)
|
||||
lbl_distanza.text = "Calcolo tragitto..."
|
||||
vbox.add_child(lbl_distanza)
|
||||
|
||||
@@ -93,9 +91,14 @@ func _physics_process(_delta: float) -> void:
|
||||
|
||||
if pos_attuale != ultima_pos_griglia_treno:
|
||||
ultima_pos_griglia_treno = pos_attuale
|
||||
|
||||
# 1. Genera i nuovi chunk davanti al treno
|
||||
_genera_attorno_al_treno(pos_attuale)
|
||||
|
||||
# Il treno ha fatto 20 metri (ha cambiato cella), quindi aggiorniamo il GPS a schermo!
|
||||
# 2. Pulisce i chunk vecchi dietro al treno (OTTIMIZZAZIONE)
|
||||
_pulisci_chunk_lontani(pos_attuale)
|
||||
|
||||
# 3. Aggiorna il GPS a schermo
|
||||
_radar_bioma_treno()
|
||||
|
||||
func _genera_attorno_al_treno(centro: Vector2i) -> void:
|
||||
@@ -185,12 +188,16 @@ func _piazza_bioma_compatibile(pos_griglia: Vector2i) -> void:
|
||||
add_child(nuovo_chunk)
|
||||
nuovo_chunk.position = Vector3(pos_griglia.x * dimensione_chunk, 0, pos_griglia.y * dimensione_chunk)
|
||||
nuovo_chunk.rotation.y = scelto.rotazione * (-PI / 2.0)
|
||||
scacchiera[pos_griglia] = {"tipo": "bioma", "uscite": scelto.uscite}
|
||||
|
||||
# MODIFICA: Salviamo il riferimento al nodo per poterlo eliminare in futuro
|
||||
scacchiera[pos_griglia] = {"tipo": "bioma", "uscite": scelto.uscite, "nodo": nuovo_chunk}
|
||||
else:
|
||||
var backup = catalogo_zona[0].instantiate()
|
||||
add_child(backup)
|
||||
backup.position = Vector3(pos_griglia.x * dimensione_chunk, 0, pos_griglia.y * dimensione_chunk)
|
||||
scacchiera[pos_griglia] = {"tipo": "bioma", "uscite": {"nord":false, "est":false, "sud":false, "ovest":false}}
|
||||
|
||||
# MODIFICA: Salviamo il riferimento al nodo
|
||||
scacchiera[pos_griglia] = {"tipo": "bioma", "uscite": {"nord":false, "est":false, "sud":false, "ovest":false}, "nodo": backup}
|
||||
|
||||
func _richiede_connessione(pos_vicino: Vector2i, lato_richiesto: String) -> int:
|
||||
if not scacchiera.has(pos_vicino): _registra_cella_con_laser(pos_vicino)
|
||||
@@ -208,16 +215,13 @@ func _get_nome_bioma(valore: float) -> String:
|
||||
elif valore < 0.4: return "Foresta-Altro"
|
||||
else: return "Altro (Deserto/Neve)"
|
||||
|
||||
# --- AGGIORNAMENTO GPS A SCHERMO ---
|
||||
# --- AGGIORNAMENTO GPS A SCHERMO ---
|
||||
func _radar_bioma_treno() -> void:
|
||||
# SICUREZZA: Controlliamo che il treno esista davvero prima di leggerne la posizione!
|
||||
if path_treno == null or path_treno.curve == null or path_treno.treno_istanziato == null:
|
||||
return
|
||||
|
||||
var pos_treno = path_treno.treno_istanziato.global_position
|
||||
var grid_x = roundi(pos_treno.x / dimensione_chunk)
|
||||
# ... il resto del codice rimane identico ...
|
||||
var grid_z = roundi(pos_treno.z / dimensione_chunk)
|
||||
var valore_attuale = generatore_rumore.get_noise_2d(grid_x, grid_z)
|
||||
var bioma_attuale = _get_nome_bioma(valore_attuale)
|
||||
@@ -242,10 +246,37 @@ func _radar_bioma_treno() -> void:
|
||||
prossimo_bioma = bioma_futuro
|
||||
break
|
||||
|
||||
# MODIFICA: Invece di usare print, aggiorniamo l'interfaccia a schermo!
|
||||
if lbl_bioma and lbl_distanza:
|
||||
lbl_bioma.text = bioma_attuale
|
||||
if prossimo_bioma != "":
|
||||
lbl_distanza.text = str(distanza_cambio) + "m ➔ " + prossimo_bioma
|
||||
else:
|
||||
lbl_distanza.text = "Nessun cambio nei prossimi 600m"
|
||||
|
||||
# --- NUOVA FUNZIONE: SPAZZINO DEI CHUNK LONTANI ---
|
||||
func _pulisci_chunk_lontani(centro_attuale: Vector2i) -> void:
|
||||
var celle_da_rimuovere = []
|
||||
var margine_sicurezza = 2 # Eliminiamo solo i chunk fuori dal raggio visivo + 2
|
||||
|
||||
for pos_griglia in scacchiera.keys():
|
||||
var cella = scacchiera[pos_griglia]
|
||||
|
||||
if cella["tipo"] == "ostacolo":
|
||||
continue
|
||||
|
||||
var dist_x = abs(pos_griglia.x - centro_attuale.x)
|
||||
var dist_z = abs(pos_griglia.y - centro_attuale.y)
|
||||
|
||||
# Se il chunk è troppo lontano dalla telecamera...
|
||||
if dist_x > raggio_visivo + margine_sicurezza or dist_z > raggio_visivo + margine_sicurezza:
|
||||
|
||||
# 1. Distruggiamo il modello 3D per liberare memoria video
|
||||
if cella.has("nodo") and is_instance_valid(cella["nodo"]):
|
||||
cella["nodo"].queue_free()
|
||||
|
||||
# 2. Ci segniamo questa posizione per rimuoverla dalla logica
|
||||
celle_da_rimuovere.append(pos_griglia)
|
||||
|
||||
# 3. Puliamo la scacchiera (liberando memoria RAM)
|
||||
for pos in celle_da_rimuovere:
|
||||
scacchiera.erase(pos)
|
||||
|
||||
Reference in New Issue
Block a user