Added regression and advancement to TASable

This commit is contained in:
alex-kumpula 2023-11-11 17:23:00 -07:00
parent b3259e9585
commit 5f6e7a3e8e
9 changed files with 139 additions and 29 deletions

View File

@ -1,4 +1,4 @@
<Project Sdk="Godot.NET.Sdk/4.1.3"> <Project Sdk="Godot.NET.Sdk/4.1.1">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading> <EnableDynamicLoading>true</EnableDynamicLoading>

6
godot/Hurrmmm.csproj.old Normal file
View File

@ -0,0 +1,6 @@
<Project Sdk="Godot.NET.Sdk/4.1.3">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
</Project>

View File

@ -64,21 +64,33 @@ public partial class TAS_System : Node
[Signal] [Signal]
public delegate void FramesRegressedEventHandler(int startFrame, int endFrame); public delegate void FramesRegressedEventHandler(int startFrame, int endFrame);
[Signal]
public delegate void StartedIncrementingEventHandler();
[Signal]
public delegate void StoppedIncrementingEventHandler();
[Signal]
public delegate void FramesResetEventHandler();
public void StartIncrementingFrames() public void StartIncrementingFrames()
{ {
this.IsIncrementingFrames = true; this.IsIncrementingFrames = true;
EmitSignal(SignalName.StartedIncrementing);
} }
public void StopIncrementingFrames() public void StopIncrementingFrames()
{ {
this.IsIncrementingFrames = false; this.IsIncrementingFrames = false;
EmitSignal(SignalName.StoppedIncrementing);
} }
public void ResetFrameCount() public void ResetFrameCount()
{ {
this.CurrentFrame = 0; this.CurrentFrame = 0;
this.LastAdvancedFrame = 0; this.LastAdvancedFrame = 0;
EmitSignal(SignalName.FramesReset);
} }
// Returns how many frames it could successfully advance // Returns how many frames it could successfully advance
@ -122,14 +134,15 @@ public partial class TAS_System : Node
this.TimeSinceLastFrame = 0 + (this.TimeSinceLastFrame - this.FrameLength); this.TimeSinceLastFrame = 0 + (this.TimeSinceLastFrame - this.FrameLength);
} }
} }
// GD.Print(CurrentFrame);
} }
// public void Test()
// {
// GD.Print("test123");
// // EmitSignal(SignalName.TestSignal, "test456");
// }
public override void _Ready()
{
this.FrameLength = 0.1;
this.StartIncrementingFrames();
}
} }

View File

@ -1,33 +1,70 @@
using Godot; using Godot;
using System; using System;
using System.Collections.Generic;
using System.Globalization; using System.Globalization;
public partial class TASable : Node public partial class TASable : Node
{ {
Node3D _parent; [Export] RigidBody3D _assignedRigidBody3D;
public RigidBody3D AssignedRigidBody3D
{
get { return this._assignedRigidBody3D; }
}
public Dictionary<int, Vector3> framePositions = new Dictionary<int, Vector3>();
public virtual void SaveState(int frame)
{
this.framePositions[frame] = this.AssignedRigidBody3D.Position;
}
public virtual void LoadState(int frame)
{
this.AssignedRigidBody3D.Position = this.framePositions[frame];
}
public override void _Ready() public override void _Ready()
{ {
this._parent = this.GetParent<Node3D>();
TAS_System TAS = GetNode<TAS_System>("/root/TAS_System"); TAS_System TAS = GetNode<TAS_System>("/root/TAS_System");
TAS.FrameIncremented += this.OnFrameIncremented; TAS.FrameIncremented += this.OnFrameIncremented;
TAS.FramesAdvanced += this.OnFramesAdvanced; TAS.FramesAdvanced += this.OnFramesAdvanced;
TAS.FramesRegressed += this.OnFramesRegressed; TAS.FramesRegressed += this.OnFramesRegressed;
TAS.StartedIncrementing += this.OnStartedIncrementing;
TAS.StoppedIncrementing += this.OnStoppedIncrementing;
this.SaveState(0);
} }
public virtual void OnFrameIncremented(int newFrame) public virtual void OnFrameIncremented(int newFrame)
{ {
GD.Print($"Frame advanced to {newFrame}, called from node {_parent.Name}"); this.SaveState(newFrame);
GD.Print($"Frame advanced to {newFrame}, called from node {this.AssignedRigidBody3D.Name}");
} }
public virtual void OnFramesAdvanced(int startFrame, int endFrame) public virtual void OnFramesAdvanced(int startFrame, int endFrame)
{ {
GD.Print($"Frames advanced from {startFrame} to {endFrame}, called from node {_parent.Name}"); this.LoadState(endFrame);
GD.Print($"Frames advanced from {startFrame} to {endFrame}, called from node {this.AssignedRigidBody3D.Name}");
} }
public virtual void OnFramesRegressed(int startFrame, int endFrame) public virtual void OnFramesRegressed(int startFrame, int endFrame)
{ {
GD.Print($"Frames regressed from {startFrame} to {endFrame}, called from node {_parent.Name}"); this.LoadState(endFrame);
GD.Print($"Frames regressed from {startFrame} to {endFrame}, called from node {this.AssignedRigidBody3D.Name}");
}
public virtual void OnStartedIncrementing()
{
this.AssignedRigidBody3D.Freeze = false;
}
public virtual void OnStoppedIncrementing()
{
this.AssignedRigidBody3D.Freeze = true;
} }
} }

View File

@ -3,10 +3,12 @@ using System;
public partial class RegressButton : Button public partial class RegressButton : Button
{ {
TAS_System TAS;
// Called when the node enters the scene tree for the first time. // Called when the node enters the scene tree for the first time.
public override void _Ready() public override void _Ready()
{ {
TAS_System TAS = GetNode<TAS_System>("/root/TAS_System"); TAS = GetNode<TAS_System>("/root/TAS_System");
this.Pressed += () => { TAS.Regress(1); }; this.Pressed += () => { TAS.Regress(1); };
} }
@ -14,4 +16,17 @@ public partial class RegressButton : Button
{ {
this.Text = $"Current frame: {newFrame}"; this.Text = $"Current frame: {newFrame}";
} }
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
{
if (TAS.CurrentFrame == 0)
{
this.Disabled = true;
}
else
{
this.Disabled = false;
}
}
} }

View File

@ -14,6 +14,7 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
[node name="DEBUG" type="Control" parent="."] [node name="DEBUG" type="Control" parent="."]
layout_mode = 1 layout_mode = 1
@ -22,6 +23,7 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
mouse_filter = 2
[node name="Label" type="Label" parent="DEBUG"] [node name="Label" type="Label" parent="DEBUG"]
layout_mode = 1 layout_mode = 1

View File

@ -15,7 +15,7 @@ func toggle_mouse_lock():
func mouse_is_locked(): func mouse_is_locked():
return Input.mouse_mode == Input.MOUSE_MODE_CAPTURED return Input.mouse_mode == Input.MOUSE_MODE_CAPTURED
func _input(event): func _unhandled_input(event):
if event.is_action("charge") and Input.mouse_mode != Input.MOUSE_MODE_CAPTURED: if event.is_action("charge") and Input.mouse_mode != Input.MOUSE_MODE_CAPTURED:
lock_mouse() lock_mouse()
get_viewport().set_input_as_handled() get_viewport().set_input_as_handled()

View File

@ -1,7 +1,6 @@
[gd_scene load_steps=8 format=3 uid="uid://by3rnp88l4plx"] [gd_scene load_steps=7 format=3 uid="uid://by3rnp88l4plx"]
[ext_resource type="PackedScene" uid="uid://bua7f25rpewkp" path="res://small_room.glb" id="1_bo0jp"] [ext_resource type="PackedScene" uid="uid://bua7f25rpewkp" path="res://small_room.glb" id="1_bo0jp"]
[ext_resource type="PackedScene" uid="uid://cbp8c4kpmr0hk" path="res://control_scheme/is_targetable.tscn" id="2_d7v5s"]
[ext_resource type="PackedScene" uid="uid://drmb4sitb74fx" path="res://control_scheme/controller.tscn" id="3_0hshv"] [ext_resource type="PackedScene" uid="uid://drmb4sitb74fx" path="res://control_scheme/controller.tscn" id="3_0hshv"]
[ext_resource type="PackedScene" uid="uid://bjhii55pagkb5" path="res://TAS_system/is_TASable.tscn" id="3_srlbt"] [ext_resource type="PackedScene" uid="uid://bjhii55pagkb5" path="res://TAS_system/is_TASable.tscn" id="3_srlbt"]
[ext_resource type="Script" path="res://tests/TAS_system/TAS_test_001.cs" id="5_0ber1"] [ext_resource type="Script" path="res://tests/TAS_system/TAS_test_001.cs" id="5_0ber1"]
@ -14,26 +13,21 @@ ambient_light_energy = 0.5
[node name="small_room" instance=ExtResource("1_bo0jp")] [node name="small_room" instance=ExtResource("1_bo0jp")]
[node name="is_TASable" parent="table" index="0" instance=ExtResource("3_srlbt")] [node name="WorldEnvironment" type="WorldEnvironment" parent="." index="1"]
[node name="is_targetable" parent="grape" index="0" node_paths=PackedStringArray("attached_to") instance=ExtResource("2_d7v5s")]
attached_to = NodePath("..")
[node name="is_TASable" parent="grape" index="1" instance=ExtResource("3_srlbt")]
[node name="WorldEnvironment" type="WorldEnvironment" parent="." index="3"]
environment = SubResource("Environment_f0m14") environment = SubResource("Environment_f0m14")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="WorldEnvironment" index="0"] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="WorldEnvironment" index="0"]
transform = Transform3D(1, 0, 0, 0, 0.933762, 0.357895, 0, -0.357895, 0.933762, 0, 1.43864, 1.81738) transform = Transform3D(1, 0, 0, 0, 0.933762, 0.357895, 0, -0.357895, 0.933762, 0, 1.43864, 1.81738)
[node name="controller" parent="." index="4" node_paths=PackedStringArray("camera", "initial_target") instance=ExtResource("3_0hshv")] [node name="controller" parent="." index="2" node_paths=PackedStringArray("camera", "initial_target") instance=ExtResource("3_0hshv")]
camera = NodePath("Camera3D") camera = NodePath("Camera3D")
initial_target = NodePath("../grape") initial_target = NodePath("../table")
[node name="Camera3D" type="Camera3D" parent="controller" index="1"] [node name="Camera3D" type="Camera3D" parent="controller" index="1"]
[node name="TAS_test_001" type="Node" parent="." index="6"] [node name="is_TASable" parent="table" index="0" instance=ExtResource("3_srlbt")]
[node name="TAS_test_001" type="Node" parent="." index="4"]
script = ExtResource("5_0ber1") script = ExtResource("5_0ber1")
[node name="TAS UI" parent="." index="7" instance=ExtResource("6_au5mx")] [node name="TAS UI" parent="." index="5" instance=ExtResource("6_au5mx")]

View File

@ -0,0 +1,43 @@
[gd_scene load_steps=7 format=3 uid="uid://1wrwvnt1xuwr"]
[ext_resource type="PackedScene" uid="uid://bua7f25rpewkp" path="res://small_room.glb" id="1_m1abe"]
[ext_resource type="PackedScene" uid="uid://drmb4sitb74fx" path="res://control_scheme/controller.tscn" id="2_1yuny"]
[ext_resource type="PackedScene" uid="uid://c43pr474qofhl" path="res://physics/grape.tscn" id="3_kg8e8"]
[ext_resource type="PackedScene" uid="uid://bjhii55pagkb5" path="res://TAS_system/is_TASable.tscn" id="4_4hrbu"]
[ext_resource type="PackedScene" uid="uid://b1uf31ed6h0ir" path="res://UI/TAS UI/TAS UI.tscn" id="4_jskxr"]
[sub_resource type="Environment" id="Environment_f0m14"]
ambient_light_source = 2
ambient_light_color = Color(1, 1, 1, 1)
ambient_light_energy = 0.5
[node name="small_room" instance=ExtResource("1_m1abe")]
[node name="WorldEnvironment" type="WorldEnvironment" parent="." index="2"]
environment = SubResource("Environment_f0m14")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="WorldEnvironment" index="0"]
transform = Transform3D(1, 0, 0, 0, 0.933762, 0.357895, 0, -0.357895, 0.933762, 0, 1.43864, 1.81738)
[node name="controller" parent="." index="3" node_paths=PackedStringArray("camera", "initial_target") instance=ExtResource("2_1yuny")]
camera = NodePath("Camera3D")
initial_target = NodePath("../grape")
[node name="Camera3D" type="Camera3D" parent="controller" index="1"]
[node name="billiard" parent="." index="4" instance=ExtResource("3_kg8e8")]
[node name="grape" parent="." index="5" instance=ExtResource("3_kg8e8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.98064, 0.385236)
[node name="is_TASable" parent="grape" index="3" node_paths=PackedStringArray("_assignedRigidBody3D") instance=ExtResource("4_4hrbu")]
_assignedRigidBody3D = NodePath("..")
[node name="grape2" parent="." index="6" instance=ExtResource("3_kg8e8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.94627, 0)
continuous_cd = true
[node name="is_TASable" parent="grape2" index="3" node_paths=PackedStringArray("_assignedRigidBody3D") instance=ExtResource("4_4hrbu")]
_assignedRigidBody3D = NodePath("..")
[node name="TAS UI" parent="." index="7" instance=ExtResource("4_jskxr")]