diff --git a/db/MScene.gd b/db/MScene.gd index ca76e36..dfff4c1 100644 --- a/db/MScene.gd +++ b/db/MScene.gd @@ -50,6 +50,9 @@ func set_lock(value): func mesh(): return m_mesh +func tween(): + return m_mesh + "/Tween" + func set_mesh(value): m_mesh = value diff --git a/db/ahog.json b/db/ahog.json index 89f9e0b..6856e80 100644 --- a/db/ahog.json +++ b/db/ahog.json @@ -36,4 +36,4 @@ "data":["0","Dagger","Dagger","0","Dagger","0","1","0","Fiole","Fiole1","0","Fioles/Fiole1","1","3","0","Fiole","Fiole2","0","Fioles/Fiole2","1","3","0","Fiole","Fiole3","0","Fioles/FioleSocle/Fiole3","1","3","0","Spyglass","Spyglass","0","Spyglass","2","1","0","Coins","Coin1","0","Coins/Coin1","3","3","0","Coins","Coin2","0","Coins/Coin2","3","3","0","Coins","Coin3","0","Coins/Coin3","3","3","0","Weapon Gun","Weapon","0","Weapon","4","1","0","Apple","Apple1","0","Apples/Apple1","5","4","0","Apple","Apple2","0","Apples/Apple2","5","4","0","Apple","Apple3","0","Apples/Apple3","5","4","0","Apple","Apple4","0","Apples/Apple4","5","4","0","Beer","Beer","0","Beer","6","1","0","SuperDagger","Gadder","1","sm_super_dager","0","1"] } ] -} +} \ No newline at end of file diff --git a/project.godot b/project.godot index 9b71199..ecd5b1b 100644 --- a/project.godot +++ b/project.godot @@ -219,6 +219,7 @@ gddb_types="*res://addons/godot_db_manager/core/GDDBTypes.gd" gddb_globals="*res://addons/godot_db_manager/core/GDDBGlobals.gd" Setting="*res://scripts/Setting.gd" Event="*res://scripts/Event.gd" +GlobalAnimation="*res://scripts/Animation.gd" [display] diff --git a/scenes/levels/Levels.gd b/scenes/levels/Levels.gd index 133e781..b1223f3 100644 --- a/scenes/levels/Levels.gd +++ b/scenes/levels/Levels.gd @@ -41,6 +41,7 @@ func _load_meshes(): if scene_detail.key() != null: meshes[scene_detail.key()] = scene_detail + create_dissolve_mesh(scene_detail.key()) func _load_back_button(): var _back = $Quit/TextureButton.connect("pressed", Event, "_on_main_scene_pressed") @@ -101,36 +102,19 @@ func _configure_button_object(button, scene, label): button.set_meta("counted", 0) func _create_animation_slide(node, name): - var animation = Animation.new() - var track_index = animation.add_track(Animation.TYPE_BEZIER) - var node_element = String(node.get_path()) + ":rect_position:x" - - animation.track_set_path(track_index, node_element) - animation.bezier_track_insert_key(track_index, 0.0, 0.0, Vector2(-0.25, 0), Vector2(0.031, 190.492)) - animation.bezier_track_insert_key(track_index, 1.0, 170, Vector2(-0.349, 2.576), Vector2(0.25, 0)) - - $ListObjects/AnimationPlayer.add_animation(name, animation) + $ListObjects/AnimationPlayer.add_animation(name, GlobalAnimation.level_hud_slide(node)) func _create_animation_warning(node, name): - var animation = Animation.new() - var track_index = animation.add_track(Animation.TYPE_BEZIER) - var node_element = String(node.get_path()) + ":rect_position:x" - - animation.track_set_path(track_index, node_element) - animation.bezier_track_insert_key(track_index, 0.0, 0.0, Vector2(-0.25, 0), Vector2(0, 78.1)) - animation.bezier_track_insert_key(track_index, 0.2, 34.9, Vector2(-0.25, 0), Vector2(0, -66)) - animation.bezier_track_insert_key(track_index, 0.4, 12.1, Vector2(0, 73.2), Vector2(0, -124.8)) - animation.bezier_track_insert_key(track_index, 0.6, -41.9, Vector2(-0.095, 109.2), Vector2(0.062, -58.8)) - animation.bezier_track_insert_key(track_index, 0.8, 13.3, Vector2(-0.188, 93.6), Vector2(0.196, 104.4)) - animation.bezier_track_insert_key(track_index, 1.0, 0.0, Vector2(-0.155, -135.5), Vector2(0.25, 0)) - - $ListObjects/AnimationPlayer.add_animation(name, animation) + $ListObjects/AnimationPlayer.add_animation(name, GlobalAnimation.level_hud_warning(node)) func _process(_delta): _check_dissolve_mesh() _check_change_angle_camera() _check_victory_condition() +func create_dissolve_mesh(key): + _node_to_mesh(key).get_surface_material(0).set_shader_param("dissolve_amount", 0.0) + func _check_dissolve_mesh(): # Event dissolve in object searched by gamer for key in meshes: @@ -138,10 +122,10 @@ func _check_dissolve_mesh(): if meshes[key].tick_reference() == 0: meshes[key].set_tick_reference(OS.get_ticks_msec()) _node_object_list(key) + GlobalAnimation.start_dissolve(_node_to_tween(key), _node_to_mesh(key).get_surface_material(0)) if OS.get_ticks_msec() < meshes[key].tick_reference() + TIME_MAX: meshes[key].set_value(meshes[key].value() + 0.01) - _node_to_mesh(key).get_surface_material(0).set("shader_param/dissolve_amount", meshes[key].value()) else: _clean_mesh(key) @@ -226,28 +210,34 @@ func _check_victory_condition(): func _node_to_mesh(key): return get_node(meshes[key].mesh()) - + +func _node_to_tween(key): + return get_node(meshes[key].tween()) + func _node_to_area(key): return get_node(meshes[key].mesh()+"/Area") func _node_object_list(key): var animation_played = null + var name = null for child in $ListObjects/ListContainer.get_children(): - if child.get_meta("name") == meshes[key].label(): - child.set_meta("counted", child.get_meta("counted") + 1) - - if child.get_meta("counter") == child.get_meta("counted"): - animation_played = child.get_meta("name") - else: - var diff = child.get_meta("counter") - child.get_meta("counted") - var txt = child.get_meta("name") - if diff != 1: - txt = txt + " " + String(diff) - animation_played = child.get_meta("animation") - child.get_node("Label").set_text(txt) - - $ListObjects/AnimationPlayer.queue(animation_played) + if child.has_meta("name"): + name = var2str(child.get_meta("name")) + if name == meshes[key].label(): + child.set_meta("counted", child.get_meta("counted") + 1) + + if child.get_meta("counter") == child.get_meta("counted"): + animation_played = name + else: + var diff = child.get_meta("counter") - child.get_meta("counted") + var txt = name + if diff != 1: + txt = txt + " " + String(diff) + animation_played = child.get_meta("animation") + child.get_node("Label").set_text(txt) + + $ListObjects/AnimationPlayer.queue(animation_played) func _input(event): if event is InputEventMouseButton or event is InputEventScreenTouch: diff --git a/scenes/levels/warcraft/WarCraft.exr b/scenes/levels/warcraft/WarCraft.exr index 492acea..3a59798 100644 Binary files a/scenes/levels/warcraft/WarCraft.exr and b/scenes/levels/warcraft/WarCraft.exr differ diff --git a/scenes/levels/warcraft/WarCraft.tscn b/scenes/levels/warcraft/WarCraft.tscn index 99d96e5..0210906 100644 --- a/scenes/levels/warcraft/WarCraft.tscn +++ b/scenes/levels/warcraft/WarCraft.tscn @@ -185,6 +185,8 @@ collision_mask = 2 transform = Transform( 1, 2.98023e-08, -4.47035e-08, -2.98023e-08, -8.9407e-08, 1, -1.19209e-07, -1, -1.49012e-07, 0, 0.0801148, -2.98023e-08 ) shape = SubResource( 3 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Fioles/Fiole1" index="1"] + [node name="Fiole2" type="MeshInstance" parent="HiddenObjectsItems/Fioles" index="1"] transform = Transform( 0.655275, 0.636944, -0.4061, 0.670978, -0.243833, 0.700239, 0.346993, -0.731333, -0.587153, -4.19531, -0.894133, 2.66915 ) use_in_baked_light = true @@ -199,6 +201,8 @@ collision_mask = 2 transform = Transform( 1, 5.96046e-08, -8.9407e-08, 2.98023e-08, -8.9407e-08, 1, -8.9407e-08, -1, 0, 2.38419e-07, 0.0823998, -1.19209e-07 ) shape = SubResource( 4 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Fioles/Fiole2" index="1"] + [node name="FioleSocle" type="MeshInstance" parent="HiddenObjectsItems/Fioles" index="2"] transform = Transform( 0.6773, -1.86265e-09, 0.735707, -0.0293841, 0.999202, 0.0270513, -0.73512, -0.03994, 0.67676, -2.27881, -0.11528, -1.23929 ) use_in_baked_light = true @@ -218,6 +222,8 @@ collision_mask = 2 transform = Transform( 1, 2.08616e-07, -7.45058e-08, -5.96046e-08, -1.49012e-07, 1, 5.96046e-08, -1, -1.04308e-07, -1.78814e-07, 0.0560231, 0 ) shape = SubResource( 5 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Fioles/FioleSocle/Fiole3" index="1"] + [node name="Dagger" type="MeshInstance" parent="HiddenObjectsItems" index="1"] transform = Transform( -0.625025, -0.777847, 0.0655765, 0, 0.0840072, 0.996466, -0.780606, 0.622816, -0.0525065, 0.69073, -0.117415, 0.830941 ) use_in_baked_light = true @@ -231,6 +237,8 @@ collision_mask = 2 transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.0802139, 0 ) shape = SubResource( 6 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Dagger" index="1"] + [node name="Spyglass" type="MeshInstance" parent="HiddenObjectsItems" index="2"] transform = Transform( 0.652362, 0.137749, 0.63579, -0.234678, 0.889605, 0.0480562, -0.606736, -0.195981, 0.665013, -2.884, -0.292075, -0.429783 ) use_in_baked_light = true @@ -244,6 +252,8 @@ collision_mask = 2 transform = Transform( 1, 0, 2.98023e-08, 1.86265e-09, 1, 3.72529e-09, 0, 5.58794e-09, 1, 2.38419e-07, -1.19209e-07, 0.0177531 ) shape = SubResource( 7 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Spyglass" index="1"] + [node name="Beer" type="MeshInstance" parent="HiddenObjectsItems" index="3"] transform = Transform( 0.996658, -0.053142, 0.0620432, 0.0548108, 0.998171, -0.0255105, -0.060574, 0.0288258, 0.997748, -2.8842, 0.173697, 1.98168 ) use_in_baked_light = true @@ -258,6 +268,8 @@ collision_mask = 2 transform = Transform( 1, 0, -1.61817e-08, 1.83936e-08, -4.28408e-08, 1, 0, -1, -4.65661e-08, 9.53674e-07, 0.0746492, 2.38419e-07 ) shape = SubResource( 8 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Beer" index="1"] + [node name="Weapon" type="MeshInstance" parent="HiddenObjectsItems" index="4"] transform = Transform( 0.540284, -0.813497, 0.215212, -0.009216, 0.250018, 0.968198, -0.841432, -0.525085, 0.127583, -2.7508, -0.359206, 1.19589 ) use_in_baked_light = true @@ -271,6 +283,8 @@ collision_mask = 2 transform = Transform( -1.49012e-07, 0, 1, -1, -1.49012e-08, 0, 3.72529e-08, -1, -5.21541e-08, 0.0388942, 0.0484145, -8.19564e-08 ) shape = SubResource( 9 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Weapon" index="1"] + [node name="Apples" type="Spatial" parent="HiddenObjectsItems" index="5"] [node name="Apple1" type="MeshInstance" parent="HiddenObjectsItems/Apples" index="0"] @@ -286,6 +300,8 @@ collision_mask = 2 transform = Transform( -1.45286e-07, -2.98023e-08, 1, -1, -1.11759e-08, 0, 1.86265e-08, -1, -8.9407e-08, -1.90735e-06, 0.00575864, 0 ) shape = SubResource( 10 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Apples/Apple1" index="1"] + [node name="Apple2" type="MeshInstance" parent="HiddenObjectsItems/Apples" index="1"] transform = Transform( -0.190449, 0, 0.981697, 0, 1, 0, -0.981697, 0, -0.190449, -1.71166, -0.0869397, -1.29534 ) use_in_baked_light = true @@ -299,6 +315,8 @@ collision_mask = 2 transform = Transform( -1.49012e-07, 4.47035e-08, 1, -1, -1.49012e-08, 0, 3.72529e-08, -1, -1.49012e-08, -4.76837e-07, -0.00566041, 0 ) shape = SubResource( 11 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Apples/Apple2" index="1"] + [node name="Apple3" type="MeshInstance" parent="HiddenObjectsItems/Apples" index="2"] transform = Transform( 0.823731, 0.226496, -0.519776, -0.248954, 0.96813, 0.0273319, 0.509401, 0.106886, 0.853865, -0.718663, -0.36046, 1.92043 ) use_in_baked_light = true @@ -312,6 +330,8 @@ collision_mask = 2 transform = Transform( -1.71363e-07, 0, 1, -1, -3.72529e-08, 1.49012e-08, 2.98023e-08, -1, -1.19209e-07, -3.57628e-07, 0.0142345, 2.38419e-07 ) shape = SubResource( 12 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Apples/Apple3" index="1"] + [node name="Apple4" type="MeshInstance" parent="HiddenObjectsItems/Apples" index="3"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.38775, -0.940515, 0.233058 ) use_in_baked_light = true @@ -325,6 +345,8 @@ collision_mask = 2 transform = Transform( -1.49012e-07, 0, 1, -1, -1.49012e-08, 0, 3.72529e-08, -1, -5.21541e-08, -4.76837e-07, 0.00115258, -1.17347e-07 ) shape = SubResource( 13 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Apples/Apple4" index="1"] + [node name="Coins" type="Spatial" parent="HiddenObjectsItems" index="6"] [node name="Coin1" type="MeshInstance" parent="HiddenObjectsItems/Coins" index="0"] @@ -341,6 +363,8 @@ collision_mask = 2 transform = Transform( 1, -4.65661e-08, 0, -1.38185e-07, 0.999999, 3.14321e-08, 4.17233e-07, -4.19095e-09, 1, 0.0276761, 0.00212932, 0.0336302 ) shape = SubResource( 14 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Coins/Coin1" index="1"] + [node name="Coin2" type="MeshInstance" parent="HiddenObjectsItems/Coins" index="1"] transform = Transform( 0.250245, 2.79397e-09, -0.968183, 0.0456076, 0.99889, 0.0117882, 0.967108, -0.0471065, 0.249967, 0.752443, -0.000386238, 1.36745 ) layers = 3 @@ -356,6 +380,8 @@ collision_mask = 2 transform = Transform( 1, 0, 2.98023e-08, 7.45058e-09, 1, -9.31323e-10, 5.96046e-08, 0, 1, 0.0499306, 1.19209e-07, 0.0191208 ) shape = SubResource( 15 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Coins/Coin2" index="1"] + [node name="Coin3" type="MeshInstance" parent="HiddenObjectsItems/Coins" index="2"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.74641, -0.885448, -0.198129 ) use_in_baked_light = true @@ -370,6 +396,8 @@ collision_mask = 2 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0358186, 0, 0.0109152 ) shape = SubResource( 16 ) +[node name="Tween" type="Tween" parent="HiddenObjectsItems/Coins/Coin3" index="1"] + [node name="MainSceneProps" type="Spatial" parent="." index="6"] [node name="sm_book" parent="MainSceneProps" index="0" instance=ExtResource( 33 )] @@ -525,7 +553,7 @@ cell_center_y = false cell_center_z = false baked_meshes = [ SubResource( 17 ) ] data = { -"cells": PoolIntArray( 0, 0, 536870912, 65531, 0, 3, 65532, 0, 0, 65533, 0, 0, 65534, 0, 0, 65535, 0, 0, 0, 1, 0, 65531, 1, 3, 65532, 1, 536870912, 65533, 1, 0, 65534, 1, 0, 65535, 1, 0, 0, 2, 0, 65531, 2, 3, 65532, 2, 0, 65533, 2, 0, 65534, 2, 0, 65535, 2, 1073741824, 0, 65533, 0, 65532, 65533, 0, 65533, 65533, 0, 65534, 65533, 0, 65535, 65533, 536870912, 0, 65534, 536870912, 65531, 65534, 3, 65532, 65534, 0, 65533, 65534, 1610612736, 65534, 65534, 536870912, 65535, 65534, 0, 0, 65535, 0, 65531, 65535, 1073741827, 65532, 65535, 0, 65533, 65535, 0, 65534, 65535, 0, 65535, 65535, 0 ) +"cells": PoolIntArray( 0, 0, 536870912, 65531, 0, 536870915, 65532, 0, 536870912, 65533, 0, 0, 65534, 0, 0, 65535, 0, 536870912, 0, 1, 536870912, 65531, 1, 536870915, 65532, 1, 0, 65533, 1, 0, 65534, 1, 536870912, 65535, 1, 0, 0, 2, 0, 65531, 2, 536870915, 65532, 2, 536870912, 65533, 2, 536870912, 65534, 2, 536870912, 65535, 2, 536870912, 0, 65533, 0, 65532, 65533, 0, 65533, 65533, 536870912, 65534, 65533, 536870912, 65535, 65533, 536870912, 0, 65534, 536870912, 65531, 65534, 536870915, 65532, 65534, 536870912, 65533, 65534, 536870912, 65534, 65534, 536870912, 65535, 65534, 536870912, 0, 65535, 536870912, 65531, 65535, 3, 65532, 65535, 0, 65533, 65535, 0, 65534, 65535, 0, 65535, 65535, 0 ) } __meta__ = { "_editor_clip_": 0, diff --git a/scripts/Animation.gd b/scripts/Animation.gd new file mode 100644 index 0000000..4152be5 --- /dev/null +++ b/scripts/Animation.gd @@ -0,0 +1,37 @@ +extends Node + +var current_material = null + +func level_hud_slide(node): + var animation = Animation.new() + var track_index = animation.add_track(Animation.TYPE_BEZIER) + var node_element = String(node.get_path()) + ":rect_position:x" + + animation.track_set_path(track_index, node_element) + animation.bezier_track_insert_key(track_index, 0.0, 0.0, Vector2(-0.25, 0), Vector2(0.031, 190.492)) + animation.bezier_track_insert_key(track_index, 1.0, 170, Vector2(-0.349, 2.576), Vector2(0.25, 0)) + + return animation + +func level_hud_warning(node): + var animation = Animation.new() + var track_index = animation.add_track(Animation.TYPE_BEZIER) + var node_element = String(node.get_path()) + ":rect_position:x" + + animation.track_set_path(track_index, node_element) + animation.bezier_track_insert_key(track_index, 0.0, 0.0, Vector2(-0.25, 0), Vector2(0, 78.1)) + animation.bezier_track_insert_key(track_index, 0.2, 34.9, Vector2(-0.25, 0), Vector2(0, -66)) + animation.bezier_track_insert_key(track_index, 0.4, 12.1, Vector2(0, 73.2), Vector2(0, -124.8)) + animation.bezier_track_insert_key(track_index, 0.6, -41.9, Vector2(-0.095, 109.2), Vector2(0.062, -58.8)) + animation.bezier_track_insert_key(track_index, 0.8, 13.3, Vector2(-0.188, 93.6), Vector2(0.196, 104.4)) + animation.bezier_track_insert_key(track_index, 1.0, 0.0, Vector2(-0.155, -135.5), Vector2(0.25, 0)) + + return animation + +func start_dissolve(node, material): + current_material = material + node.interpolate_method(self, "animate_dissolve", 0, 1, 1.5, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT) + node.start() + +func animate_dissolve(progress: float) -> void: + current_material.set_shader_param("dissolve_amount", ease(progress, 0.4))