From c8175822042fbc2831c6be88ef728d04f5b03de3 Mon Sep 17 00:00:00 2001 From: Lukas Moungos Date: Sat, 10 Dec 2022 21:42:41 +0100 Subject: [PATCH] Better Anim --- scripts/Logic/Game.gd | 127 +++++++++++++++++++++++++++---------- scripts/Logic/MapNode.gd | 7 ++ scripts/Modules/Storage.gd | 2 +- 3 files changed, 101 insertions(+), 35 deletions(-) diff --git a/scripts/Logic/Game.gd b/scripts/Logic/Game.gd index 7b3e39c..a779606 100644 --- a/scripts/Logic/Game.gd +++ b/scripts/Logic/Game.gd @@ -3,19 +3,15 @@ class_name Game const CHILL = 0 const FIGHTING = 1 - +const SHOOT = 2 +const FOUGHT = 3 #Signals -signal ammo_pickup signal shoot -var fight_state = CHILL - -var t = 0.0 - +#Variables @onready var p1_train = $Train1 as Train @onready var p2_train = $Train2 as Train - @onready var StartNode = $StartNode var p1_node : MapNode var p2_node : MapNode @@ -24,7 +20,15 @@ var initial_pos_p1 : Vector3 var initial_pos_p2 : Vector3 var initial_camera_pos: Vector3 +var fight_state = CHILL +var t = 0.0 + +var active_pickups = [] +var active_map_nodes = 0 + func _ready(): + getMapSize(StartNode, true) + initial_camera_pos = $Camera3D.position initial_pos_p1 = p1_train.position initial_pos_p2 = p2_train.position @@ -32,9 +36,26 @@ func _ready(): p2_node = StartNode p2_train.get_node("CharacterBody3D").is_player1 = false p2_train.is_P1 = false - p1_train.current_speed = 8 p1_train.hit.connect(_on_hit_player) p2_train.hit.connect(_on_hit_player) + p1_train.current_speed = 3 + +func getMapSize(node, is_start): + if node == StartNode && not is_start: + return + if(node is TurnMapNode): + getMapSize(node.turn_node, false) + node.turnEvent.connect(_on_turn_event) + getMapSize(node.next, false) + active_map_nodes += 2 + else: + getMapSize(node.next, false) + active_map_nodes += 1 + + +func _on_turn_event(): + # + pass func _on_hit_player(player1,dmg): @@ -44,6 +65,18 @@ func _on_hit_player(player1,dmg): p1_train.current_speed -= dmg func _process(delta): + if(active_pickups.size() < 1): + fillPickups() + + #SIMULATION + mapSimulation(delta) + fightSimulation() + +func fillPickups(): + pass + + +func mapSimulation(delta): p1_train.current_distance += p1_train.current_speed * delta p2_train.current_distance += p2_train.current_speed * delta p1_train.distance_from_start += p1_train.current_speed * delta @@ -53,7 +86,7 @@ func _process(delta): p1_train.distance_from_start = 0 if(p2_node == StartNode && p2_train.distance_from_start > 15): p2_train.distance_from_start = 0 - + if(p1_train.current_distance >= p1_node.LENGTH): var distance_delta = p1_train.current_distance - p1_node.LENGTH p1_node = p1_node._on_train_exit(p1_train) @@ -63,28 +96,37 @@ func _process(delta): var distance_delta = p2_train.current_distance - p2_node.LENGTH p2_node = p2_node._on_train_exit(p2_train) p2_train.current_distance = distance_delta - - if(p1_node == p2_node && p1_train.current_distance - p2_train.current_distance < 2): + $Control/VSlider.value = p1_train.distance_from_start + $Control/VSlider2.value = p2_train.distance_from_start + +func fightSimulation(): + #FIGHT SIMULATION + print(p1_train.current_distance - p2_train.current_distance) + if(p1_node == p2_node && abs(p1_train.current_distance - p2_train.current_distance) < 0.5): if(fight_state == CHILL): fight_state = FIGHTING var tween = create_tween() tween.set_trans(Tween.TRANS_EXPO) tween.set_ease(Tween.EASE_OUT) - var new_pos_p1 = p1_train.position + Vector3(-30,0,-15) - var new_pos_p2 = p2_train.position + Vector3(30,0,-15) - tween.tween_property($Camera3D, "position", initial_camera_pos + Vector3(0,80,20), 1.4) + var speed_differene = p1_train.current_speed - p2_train.current_speed tween.set_parallel() - tween.tween_property(p1_train, "position",new_pos_p1, 1) - tween.tween_property(p2_train, "position",new_pos_p2, 1) - tween.tween_property($Control/Panel, "custom_minimum_size", Vector2(0,0), 1) - tween.tween_property($Control/VSlider,"scale",Vector2(0,0),1) - tween.tween_property($Control/VSlider2,"scale",Vector2(0,0),1) - p1_train.current_speed *= 0.5 - p2_train.current_speed *= 0.5 - - - - elif(fight_state == FIGHTING): + tween.tween_property($Camera3D, "position", initial_camera_pos + Vector3(0,80,20), 1.4) + if(speed_differene < 0): + var new_pos_p1 = p1_train.position + Vector3(-30 ,0,+30) + tween.tween_property(p1_train, "position",new_pos_p1, 0.5) + var new_pos_p2 = p2_train.position + Vector3(30,0,-30) + tween.tween_property(p2_train, "position",new_pos_p2, 0.5) + else: + var new_pos_p2 = p2_train.position + Vector3(30,0, +30) + tween.tween_property(p2_train, "position",new_pos_p2, 0.5) + var new_pos_p1 = p1_train.position + Vector3(-30 ,0,-30) + tween.tween_property(p1_train, "position",new_pos_p1, 0.5) + + tween.tween_property($Control/Panel, "custom_minimum_size", Vector2(0,0), 0.6) + tween.tween_property($Control/VSlider,"scale",Vector2(0,0),0.6) + tween.tween_property($Control/VSlider2,"scale",Vector2(0,0),0.6) + tween.tween_callback(approach).set_delay(0.5) + elif(fight_state == FOUGHT): fight_state = CHILL var tween = create_tween() tween.set_trans(Tween.TRANS_EXPO) @@ -96,14 +138,31 @@ func _process(delta): tween.tween_property($Control/Panel, "custom_minimum_size", Vector2(15,0), 1) tween.tween_property($Control/VSlider,"scale",Vector2(1,1),1) tween.tween_property($Control/VSlider2,"scale",Vector2(1,1),1) - p1_train.current_speed *= 2 - p2_train.current_speed *= 2 - - - if Input.is_action_pressed("test"): - emit_signal("shoot") - - $Control/VSlider.value = p1_train.distance_from_start - $Control/VSlider2.value = p2_train.distance_from_start +func approach(): + var tween = create_tween() + tween.set_trans(Tween.TRANS_EXPO) + tween.set_ease(Tween.EASE_OUT) + tween.set_parallel() + var speed_differene = p1_train.current_speed - p2_train.current_speed + if(speed_differene < 0): + tween.tween_property(p1_train, "position", Vector3(p1_train.position.x, p1_train.position.y, p2_train.position.z), 0.7) + else: + tween.tween_property(p2_train, "position", Vector3(p2_train.position.x, p2_train.position.y, p1_train.position.z), 0.7) + emit_signal("shoot") + tween.tween_callback(fight).set_delay(1) + +func fight(): + var tween = create_tween() + tween.set_trans(Tween.TRANS_EXPO) + tween.set_ease(Tween.EASE_IN_OUT) + tween.set_parallel() + var speed_differene = p1_train.current_speed - p2_train.current_speed + if(speed_differene < 0): + tween.tween_property(p1_train, "position", Vector3(p1_train.position.x, p1_train.position.y, p2_train.position.z - 90), 0.7) + else: + tween.tween_property(p2_train, "position", Vector3(p2_train.position.x, p2_train.position.y, p1_train.position.z - 90), 0.7) + emit_signal("shoot") + tween.tween_callback(func(): fight_state = FOUGHT).set_delay(0.7) + diff --git a/scripts/Logic/MapNode.gd b/scripts/Logic/MapNode.gd index 30135d3..254448e 100644 --- a/scripts/Logic/MapNode.gd +++ b/scripts/Logic/MapNode.gd @@ -3,9 +3,16 @@ class_name MapNode const LENGTH = 10 const PICKUP = 0 + +const NONE = 0 +const COAL = 1 +const GUNPOWDER = 2 +const CANNONBALL_LIGHT = 3 + var previous : MapNode var current_trains = [] +var current_pickup = NONE func _on_train_entered(train): current_trains.append(train) diff --git a/scripts/Modules/Storage.gd b/scripts/Modules/Storage.gd index 88ab922..ddd98e1 100644 --- a/scripts/Modules/Storage.gd +++ b/scripts/Modules/Storage.gd @@ -12,7 +12,7 @@ enum TYPE {AMMO, GUNPOWDER, COAL} #------------Methods-------------# func _ready(): var root = get_tree().root.get_child(0) - root.ammo_pickup.connect(_on_signal_storing) + #root.ammo_pickup.connect(_on_signal_storing) maxStashValue = 5 currentStashValue = 5