новая структура проекта

This commit is contained in:
2026-04-20 21:04:25 +04:00
parent 1fe2a72ef1
commit 1a56b22e38
1932 changed files with 1886 additions and 22779 deletions
+80
View File
@@ -0,0 +1,80 @@
@tool
## Editor-time preview for a single ADT tile.
extends Node3D
const PREVIEW_NODE_NAME := "__adt_tile_preview__"
const ADT_BUILDER_SCRIPT := preload("res://addons/mpq_extractor/loaders/adt_builder.gd")
@export var extracted_dir: String = "res://data/extracted"
@export var map_name: String = "Azeroth"
@export var tile_x: int = 32
@export var tile_y: int = 48
@export var auto_rebuild_in_editor: bool = true
@export var reload_now: bool = false
var _last_signature := ""
var _rebuild_queued := false
func _ready() -> void:
set_process(true)
_queue_rebuild()
func _process(_delta: float) -> void:
if reload_now:
reload_now = false
_queue_rebuild()
if Engine.is_editor_hint() and auto_rebuild_in_editor:
var current_signature := _make_signature()
if current_signature != _last_signature:
_queue_rebuild()
func _queue_rebuild() -> void:
if _rebuild_queued or not is_inside_tree():
return
_rebuild_queued = true
call_deferred("_rebuild_preview")
func _rebuild_preview() -> void:
_rebuild_queued = false
_clear_preview()
_last_signature = _make_signature()
if not ClassDB.class_exists("ADTLoader"):
push_warning("ADTLoader not found. Rebuild GDExtension first.")
return
var abs_extracted := ProjectSettings.globalize_path(extracted_dir)
var adt_path := "%s/World/Maps/%s/%s_%d_%d.adt" % [
abs_extracted, map_name, map_name, tile_x, tile_y
]
if not FileAccess.file_exists(adt_path):
push_warning("ADT not found: %s" % adt_path)
return
var loader = ClassDB.instantiate("ADTLoader")
var data: Dictionary = loader.call("load_adt", adt_path)
if data.is_empty() or not data.has("chunks"):
push_warning("Failed to load ADT: %s" % adt_path)
return
var builder := ADT_BUILDER_SCRIPT.new()
var terrain: Node3D = builder.build_scene(data, abs_extracted)
terrain.name = PREVIEW_NODE_NAME
add_child(terrain)
func _clear_preview() -> void:
var preview := get_node_or_null(PREVIEW_NODE_NAME)
if preview:
remove_child(preview)
preview.free()
func _make_signature() -> String:
return "%s|%s|%d|%d" % [extracted_dir, map_name, tile_x, tile_y]
@@ -0,0 +1 @@
uid://cacewewk7xgw4
+30
View File
@@ -0,0 +1,30 @@
[gd_scene format=3 uid="uid://cbgbp30flxdgx"]
[ext_resource type="Script" uid="uid://cacewewk7xgw4" path="res://src/scenes/preview/adt_tile_preview.gd" id="1_preview"]
[ext_resource type="Script" uid="uid://bauggobg40psr" path="res://src/scenes/camera/fly_camera.gd" id="2_flycam"]
[sub_resource type="Sky" id="sky_1"]
[sub_resource type="Environment" id="env_1"]
background_mode = 2
sky = SubResource("sky_1")
ambient_light_source = 3
ambient_light_color = Color(1, 1, 1, 1)
ambient_light_energy = 0.5
[node name="ADTTilePreview" type="Node3D" unique_id=623058517]
script = ExtResource("1_preview")
[node name="Camera3D" type="Camera3D" parent="." unique_id=597499101]
transform = Transform3D(1, 0, 0, 0, 0.906308, 0.422618, 0, -0.422618, 0.906308, 18.5112, 168.016, 111.689)
current = true
far = 20000.0
script = ExtResource("2_flycam")
[node name="Sun" type="DirectionalLight3D" parent="." unique_id=697026372]
transform = Transform3D(0.866025, -0.353553, 0.353553, 0, 0.707107, 0.707107, -0.5, -0.612372, 0.612372, 0, 0, 0)
light_energy = 1.5
shadow_enabled = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1785163215]
environment = SubResource("env_1")