mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-19 08:53:46 +00:00
Add enemy creation and viewer functionality with filtering options
This commit is contained in:
parent
e735060f93
commit
18683c0680
32 changed files with 1009 additions and 411 deletions
|
|
@ -25,6 +25,8 @@ func _enter_tree() -> void:
|
|||
dock_instance.create_bullet_requested.connect(_on_create_bullet_requested)
|
||||
if dock_instance.has_signal("create_item_requested"):
|
||||
dock_instance.create_item_requested.connect(_on_create_item_requested)
|
||||
if dock_instance.has_signal("create_enemy_requested"):
|
||||
dock_instance.create_enemy_requested.connect(_on_create_enemy_requested)
|
||||
|
||||
# Add the dock to the editor (bottom dock area)
|
||||
add_control_to_bottom_panel(dock_instance, "Weapon Creator")
|
||||
|
|
@ -428,3 +430,85 @@ func _create_bullet_resource(path: String, bullet_data: Dictionary) -> bool:
|
|||
return false
|
||||
|
||||
return true
|
||||
|
||||
func _on_create_enemy_requested(enemy_data: Dictionary) -> void:
|
||||
var settings: Resource = null
|
||||
if ResourceLoader.exists(SETTINGS_PATH):
|
||||
settings = ResourceLoader.load(SETTINGS_PATH)
|
||||
if not settings:
|
||||
settings = WeaponCreatorSettings.new()
|
||||
|
||||
var enemy_name: String = enemy_data.get("enemy_name", "New Enemy")
|
||||
var enemy_key: String = enemy_data.get("enemy_key", "NEW_ENEMY")
|
||||
var is_3d: bool = enemy_data.get("is_3d", true)
|
||||
|
||||
var enemies_dir = settings.get("enemies_dir")
|
||||
var dimension_suffix = "_3D" if is_3d else "_2D"
|
||||
var enemy_resource_path: String = enemies_dir + enemy_key + dimension_suffix + ".tres"
|
||||
|
||||
dock_instance.call("add_log", "=== Starting Enemy Creation ===")
|
||||
dock_instance.call("add_log", "Enemy Name: " + enemy_name)
|
||||
dock_instance.call("add_log", "Enemy Key: " + enemy_key)
|
||||
dock_instance.call("add_log", "Mode: " + ("3D" if is_3d else "2D"))
|
||||
|
||||
if _create_enemy_resource(enemy_resource_path, enemy_data):
|
||||
dock_instance.call("add_log", "✓ Created EnemyResource at: " + enemy_resource_path, Color.GREEN)
|
||||
else:
|
||||
dock_instance.call("add_log", "✗ Failed to create EnemyResource", Color.RED)
|
||||
dock_instance.call("set_creation_complete")
|
||||
return
|
||||
|
||||
dock_instance.call("add_log", "=== Enemy Creation Complete ===", Color.CYAN)
|
||||
dock_instance.call("add_log", "Next steps:")
|
||||
dock_instance.call("add_log", "1. Add animation frames and sounds if needed")
|
||||
dock_instance.call("add_log", "2. Configure loot drops")
|
||||
dock_instance.call("add_log", "3. Test the enemy in-game")
|
||||
dock_instance.call("set_creation_complete")
|
||||
|
||||
get_editor_interface().get_resource_filesystem().scan()
|
||||
|
||||
func _create_enemy_resource(path: String, enemy_data: Dictionary) -> bool:
|
||||
if ResourceLoader.exists(path):
|
||||
dock_instance.call("add_log", "Warning: EnemyResource already exists at " + path, Color.YELLOW)
|
||||
return false
|
||||
|
||||
var enemy_script = load("res://Scripts/Resources/EnemyResource.cs")
|
||||
if enemy_script == null:
|
||||
dock_instance.call("add_log", "Error: Could not load EnemyResource.cs script", Color.RED)
|
||||
return false
|
||||
|
||||
var enemy_resource = Resource.new()
|
||||
enemy_resource.set_script(enemy_script)
|
||||
|
||||
enemy_resource.set("EnemyName", enemy_data.get("enemy_name", "New Enemy"))
|
||||
enemy_resource.set("EnemyKey", enemy_data.get("enemy_key", "NEW_ENEMY"))
|
||||
enemy_resource.set("PrefabPath", enemy_data.get("prefab_path", "res://Scenes/Actors/Generic_Enemy_FSM_3D.tscn"))
|
||||
enemy_resource.set("MaxHealth", enemy_data.get("max_health", 6.0))
|
||||
enemy_resource.set("MovementSpeed", enemy_data.get("movement_speed", 1.5))
|
||||
enemy_resource.set("MotivationReward", enemy_data.get("motivation_reward", 4.0))
|
||||
|
||||
var weapon_resource = enemy_data.get("weapon_resource", null)
|
||||
if weapon_resource:
|
||||
enemy_resource.set("Weapon", weapon_resource)
|
||||
|
||||
enemy_resource.set("PlayerDetectionRange", enemy_data.get("player_detection_range", 12.0))
|
||||
enemy_resource.set("ViewRange", enemy_data.get("view_range", 8.0))
|
||||
enemy_resource.set("AlarmReactRange", enemy_data.get("alarm_react_range", 20.0))
|
||||
enemy_resource.set("PlayerDisengageRange", enemy_data.get("player_disengage_range", 15.0))
|
||||
enemy_resource.set("StrafeSpeed", enemy_data.get("strafe_speed", 0.0))
|
||||
enemy_resource.set("MaxStrafeDistance", enemy_data.get("max_strafe_distance", 0.0))
|
||||
enemy_resource.set("MinStrafeDistance", enemy_data.get("min_strafe_distance", 0.0))
|
||||
enemy_resource.set("ResponseTime", enemy_data.get("response_time", 0.5))
|
||||
enemy_resource.set("PredictPlayer", enemy_data.get("predict_player", false))
|
||||
|
||||
var icon_sprite = enemy_data.get("icon_sprite", null)
|
||||
if icon_sprite:
|
||||
enemy_resource.set("IconSprite", icon_sprite)
|
||||
|
||||
var err = ResourceSaver.save(enemy_resource, path)
|
||||
if err != OK:
|
||||
dock_instance.call("add_log", "Error saving EnemyResource: " + str(err), Color.RED)
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue