Files
experiment-adventure-ai/plans/cutscene_graph_edit_changes.md
2025-08-01 08:34:51 -07:00

169 lines
4.6 KiB
Markdown
Executable File

# CutsceneGraphEdit Changes for New Resource Structure
## Overview
This document describes the changes needed in CutsceneGraphEdit.gd to work with the new CutsceneResource data structure.
## Current Issues
The current CutsceneGraphEdit.gd has several areas that need updating:
1. Uses old node structure with "name" instead of "id"
2. Uses old connection structure
3. Has methods for parallel connections that are no longer needed
4. Save/load methods use the old structure
## Required Changes
### 1. Update Load Method (`load_from_cutscene`)
Current issues:
- Looks for "name" field in nodes
- Uses "type", "x", "y", "parameters" fields directly
- Creates connections using old structure
Changes needed:
- Update to use "id" field instead of "name"
- Ensure node creation uses the new structure
- Update connection creation to use new structure
### 2. Update Save Method (`save_to_cutscene`)
Current issues:
- Creates nodes with "name" field
- Uses "action_parameters" directly
- Creates connections with old structure
Changes needed:
- Generate unique IDs for nodes if they don't have them
- Use "id" field instead of "name"
- Ensure parameters are stored correctly
- Generate unique IDs for connections
- Use new connection structure
### 3. Update Node Creation (`add_node`)
Current issues:
- May not be setting node IDs properly
- Uses old parameter structure
Changes needed:
- Ensure new nodes get unique IDs
- Verify parameter structure matches new format
### 4. Update Connection Handling
Current issues:
- Uses GraphEdit's built-in connection methods
- May need to store connection IDs
Changes needed:
- Update `_on_connection_request` to store connection IDs in resource
- Update `_on_disconnection_request` to remove by connection ID
- Update `_on_graph_node_deleted` to properly remove connections
### 5. Remove Parallel Connection Methods
Methods to remove or modify:
- Any methods specifically handling parallel connections
- Update validation to work with new structure
## Implementation Plan
### 1. Update Node Management
- Modify `add_node` to generate unique IDs
- Update `_on_graph_node_deleted` to work with new structure
- Ensure all node references use IDs
### 2. Update Connection Management
- Modify connection creation to generate unique IDs
- Update connection removal to use connection IDs
- Update connection validation
### 3. Update Load/Save Methods
- Rewrite `load_from_cutscene` for new structure
- Rewrite `save_to_cutscene` for new structure
### 4. Update Helper Methods
- Update any helper methods that reference node names
- Update methods that handle connections
## Specific Code Changes
### In `load_from_cutscene`:
```gdscript
# OLD
for node_data in cutscene.nodes:
var node = add_node(node_data["type"], Vector2(node_data["x"], node_data["y"]))
if node:
node.name = node_data["name"]
# Set node parameters
for param_name in node_data["parameters"]:
node.set_parameter(param_name, node_data["parameters"][param_name])
# NEW
for node_data in cutscene.nodes:
var node = add_node(node_data["type"], Vector2(node_data["position"]["x"], node_data["position"]["y"]))
if node:
node.node_id = node_data["id"] # Set the ID directly
# Set node parameters
for param_name in node_data["parameters"]:
node.set_parameter(param_name, node_data["parameters"][param_name])
```
### In `save_to_cutscene`:
```gdscript
# OLD
var node_data = {
"name": child.name,
"type": child.node_type,
"x": child.position_offset.x,
"y": child.position_offset.y,
"parameters": child.action_parameters
}
# NEW
var node_data = {
"id": child.node_id,
"type": child.node_type,
"position": {
"x": child.position_offset.x,
"y": child.position_offset.y
},
"parameters": child.action_parameters
}
```
### Connection Updates:
```gdscript
# OLD
for connection in get_connection_list():
var connection_data = {
"from_node": connection["from_node"],
"from_port": connection["from_port"],
"to_node": connection["to_node"],
"to_port": connection["to_port"]
}
# NEW
for connection in get_connection_list():
var connection_data = {
"id": generate_unique_connection_id(), # New helper method
"from_node": connection["from_node"],
"from_port": connection["from_port"],
"to_node": connection["to_node"],
"to_port": connection["to_port"]
}
```
## Compatibility Considerations
- Need to handle loading of old format resources
- Should provide migration path in the resource itself
- May need version checking when loading resources