4.6 KiB
4.6 KiB
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:
- Uses old node structure with "name" instead of "id"
- Uses old connection structure
- Has methods for parallel connections that are no longer needed
- 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_requestto store connection IDs in resource - Update
_on_disconnection_requestto remove by connection ID - Update
_on_graph_node_deletedto 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_nodeto generate unique IDs - Update
_on_graph_node_deletedto 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_cutscenefor new structure - Rewrite
save_to_cutscenefor 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:
# 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:
# 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:
# 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