Added the item balloons to show on broken machines

This commit is contained in:
akshay 2022-08-20 23:02:40 -04:00
parent 5e857e478e
commit 002ffef1e8
16 changed files with 1240 additions and 52 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -74,6 +74,11 @@ _global_script_classes=[ {
"language": "GDScript", "language": "GDScript",
"path": "res://scripts/Interface.gd" "path": "res://scripts/Interface.gd"
}, { }, {
"base": "Spatial",
"class": "ItemBalloon",
"language": "GDScript",
"path": "res://scripts/item_balloon.gd"
}, {
"base": "Resource", "base": "Resource",
"class": "ItemType", "class": "ItemType",
"language": "GDScript", "language": "GDScript",
@ -108,6 +113,7 @@ _global_script_class_icons={
"DialogicUtil": "", "DialogicUtil": "",
"HistoryRow": "", "HistoryRow": "",
"Interface": "", "Interface": "",
"ItemBalloon": "",
"ItemType": "", "ItemType": "",
"Recipe": "", "Recipe": "",
"RecipeDB": "", "RecipeDB": "",

View File

@ -13,10 +13,7 @@ start_broken = true
[node name="item_dump" parent="." instance=ExtResource( 1 )] [node name="item_dump" parent="." instance=ExtResource( 1 )]
unique_name_in_owner = true unique_name_in_owner = true
item_type_0 = ExtResource( 4 ) items_required = [ ExtResource( 4 ), ExtResource( 5 ) ]
item_count_0 = 1
item_type_1 = ExtResource( 5 )
item_count_1 = 1
[node name="coin_machine" parent="." instance=ExtResource( 3 )] [node name="coin_machine" parent="." instance=ExtResource( 3 )]
unique_name_in_owner = true unique_name_in_owner = true

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=1] [ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=1]
[ext_resource path="res://scripts/crafting_station/crafting_station.gd" type="Script" id=2] [ext_resource path="res://scripts/crafting_station/crafting_station.gd" type="Script" id=2]
@ -6,7 +6,6 @@
[ext_resource path="res://scenes/item_dump.tscn" type="PackedScene" id=4] [ext_resource path="res://scenes/item_dump.tscn" type="PackedScene" id=4]
[ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=5] [ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=5]
[ext_resource path="res://item_types/crystal.tres" type="Resource" id=6] [ext_resource path="res://item_types/crystal.tres" type="Resource" id=6]
[ext_resource path="res://item_types/ore.tres" type="Resource" id=7]
[node name="crafting_station" type="Spatial" groups=["damageable"]] [node name="crafting_station" type="Spatial" groups=["damageable"]]
script = ExtResource( 2 ) script = ExtResource( 2 )
@ -29,8 +28,6 @@ one_shot = true
[node name="item_dump" parent="." instance=ExtResource( 4 )] [node name="item_dump" parent="." instance=ExtResource( 4 )]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.366242, 0, 0 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.366242, 0, 0 )
item_type_0 = ExtResource( 7 )
item_count_0 = 2
[node name="status_light" parent="." instance=ExtResource( 5 )] [node name="status_light" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true unique_name_in_owner = true

View File

@ -33,8 +33,7 @@ omni_attenuation = 0.933034
[node name="item_dump" parent="." instance=ExtResource( 5 )] [node name="item_dump" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true unique_name_in_owner = true
item_type_0 = ExtResource( 6 ) items_required = [ ExtResource( 6 ) ]
item_count_0 = 1
[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"] [connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"]
[connection signal="item_changed" from="item_holder" to="." method="_on_item_holder_item_changed"] [connection signal="item_changed" from="item_holder" to="." method="_on_item_holder_item_changed"]

65
scenes/item_balloon.tscn Normal file
View File

@ -0,0 +1,65 @@
[gd_scene load_steps=13 format=2]
[ext_resource path="res://scripts/item_balloon.gd" type="Script" id=1]
[ext_resource path="res://assets/item_balloon/item_balloon.glb" type="PackedScene" id=2]
[ext_resource path="res://scenes/item.tscn" type="PackedScene" id=3]
[ext_resource path="res://item_types/ingot.tres" type="Resource" id=4]
[sub_resource type="AnimationNodeAnimation" id=1]
animation = "Balloon Bounce"
[sub_resource type="AnimationNodeAnimation" id=2]
animation = "Balloon Idle"
[sub_resource type="AnimationNodeAnimation" id=3]
animation = "Balloon Reset"
[sub_resource type="AnimationNodeStateMachineTransition" id=4]
[sub_resource type="AnimationNodeStateMachineTransition" id=5]
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachineTransition" id=6]
switch_mode = 2
auto_advance = true
[sub_resource type="AnimationNodeStateMachine" id=7]
states/bounce/node = SubResource( 1 )
states/bounce/position = Vector2( 653, 152.25 )
states/idle/node = SubResource( 2 )
states/idle/position = Vector2( 358, 151.875 )
states/reset/node = SubResource( 3 )
states/reset/position = Vector2( 495, 279.5 )
transitions = [ "idle", "bounce", SubResource( 4 ), "bounce", "reset", SubResource( 5 ), "reset", "idle", SubResource( 6 ) ]
start_node = "idle"
[sub_resource type="AnimationNodeStateMachinePlayback" id=8]
[node name="item_balloon" instance=ExtResource( 2 )]
script = ExtResource( 1 )
[node name="ItemSpawn" type="BoneAttachment" parent="Armature/Skeleton" index="1"]
transform = Transform( -1, 0, -8.74228e-08, -8.96342e-08, 0, 1.0253, 0, 1, 0, 0, -0.013823, 0 )
bone_name = "Item"
[node name="attached_item" parent="Armature/Skeleton/ItemSpawn" index="0" instance=ExtResource( 3 )]
unique_name_in_owner = true
transform = Transform( 1, 0, -2.37178e-09, 0, 1, 0, -2.37177e-09, 0, 1.02713, 1.6173e-08, 0, -0.184997 )
item_type = ExtResource( 4 )
[node name="AnimationPlayer" parent="." index="1"]
autoplay = "Balloon Idle"
[node name="AnimationTree" type="AnimationTree" parent="." index="2"]
unique_name_in_owner = true
tree_root = SubResource( 7 )
anim_player = NodePath("../AnimationPlayer")
active = true
parameters/playback = SubResource( 8 )
[node name="bounce_timer" type="Timer" parent="." index="3"]
unique_name_in_owner = true
one_shot = true
[connection signal="timeout" from="bounce_timer" to="." method="_on_bounce_timer_timeout"]

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=3 format=2] [gd_scene load_steps=4 format=2]
[ext_resource path="res://scripts/item_dump.gd" type="Script" id=1] [ext_resource path="res://scripts/item_dump.gd" type="Script" id=1]
[ext_resource path="res://scenes/item_balloon.tscn" type="PackedScene" id=2]
[sub_resource type="BoxShape" id=1] [sub_resource type="BoxShape" id=1]
@ -11,3 +12,22 @@ script = ExtResource( 1 )
[node name="CollisionShape" type="CollisionShape" parent="."] [node name="CollisionShape" type="CollisionShape" parent="."]
shape = SubResource( 1 ) shape = SubResource( 1 )
[node name="one_item" type="Spatial" parent="."]
unique_name_in_owner = true
transform = Transform( 0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 2.50434, 0 )
[node name="one_item_balloon" parent="one_item" instance=ExtResource( 2 )]
unique_name_in_owner = true
[node name="two_item" type="Spatial" parent="."]
unique_name_in_owner = true
transform = Transform( 0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0.514625, 0 )
[node name="two_item_balloon1" parent="two_item" instance=ExtResource( 2 )]
unique_name_in_owner = true
transform = Transform( 0.901009, -0.433801, 0, 0.433801, 0.901009, 0, 0, 0, 1, -1, 2.691, 0 )
[node name="two_item_balloon2" parent="two_item" instance=ExtResource( 2 )]
unique_name_in_owner = true
transform = Transform( 0.901009, 0.433801, 0, -0.433801, 0.901009, 0, 0, 0, 1, 1, 2.691, 0 )

View File

@ -28,8 +28,7 @@ one_shot = true
[node name="item_dump" parent="." instance=ExtResource( 4 )] [node name="item_dump" parent="." instance=ExtResource( 4 )]
unique_name_in_owner = true unique_name_in_owner = true
item_type_0 = ExtResource( 6 ) items_required = [ ExtResource( 6 ) ]
item_count_0 = 1
[node name="status_light" parent="." instance=ExtResource( 5 )] [node name="status_light" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true unique_name_in_owner = true

View File

@ -18,12 +18,9 @@ script = ExtResource( 2 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.621351, 0 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.621351, 0 )
[node name="item_dump" parent="." instance=ExtResource( 4 )] [node name="item_dump" parent="." instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.733121, 0 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.117529, 0 )
collision_mask = 0 collision_mask = 0
item_type_0 = ExtResource( 6 ) items_required = [ ExtResource( 7 ), ExtResource( 6 ) ]
item_count_0 = 1
item_type_1 = ExtResource( 7 )
item_count_1 = 1
[node name="item_holder" parent="." instance=ExtResource( 1 )] [node name="item_holder" parent="." instance=ExtResource( 1 )]
unique_name_in_owner = true unique_name_in_owner = true

View File

@ -509,13 +509,13 @@ xfade_time = 0.1
states/idle/node = SubResource( 12 ) states/idle/node = SubResource( 12 )
states/idle/position = Vector2( 357, 120.556 ) states/idle/position = Vector2( 357, 120.556 )
states/run/node = SubResource( 13 ) states/run/node = SubResource( 13 )
states/run/position = Vector2( 589, 120.926 ) states/run/position = Vector2( 589, 120.491 )
transitions = [ "idle", "run", SubResource( 14 ), "run", "idle", SubResource( 15 ) ] transitions = [ "idle", "run", SubResource( 14 ), "run", "idle", SubResource( 15 ) ]
start_node = "idle" start_node = "idle"
graph_offset = Vector2( -363, -189 ) graph_offset = Vector2( -81, -148 )
[sub_resource type="AnimationNodeBlendTree" id=9] [sub_resource type="AnimationNodeBlendTree" id=9]
graph_offset = Vector2( -371.661, 122.494 ) graph_offset = Vector2( -415.444, 83.8956 )
nodes/Activate/node = SubResource( 22 ) nodes/Activate/node = SubResource( 22 )
nodes/Activate/position = Vector2( 373.333, 200 ) nodes/Activate/position = Vector2( 373.333, 200 )
nodes/Animation/node = SubResource( 10 ) nodes/Animation/node = SubResource( 10 )
@ -527,7 +527,7 @@ nodes/Blink/position = Vector2( 120, 200 )
nodes/Move/node = SubResource( 16 ) nodes/Move/node = SubResource( 16 )
nodes/Move/position = Vector2( -146.667, 200 ) nodes/Move/position = Vector2( -146.667, 200 )
nodes/output/position = Vector2( 586.667, 200 ) nodes/output/position = Vector2( 586.667, 200 )
node_connections = [ "output", 0, "Activate", "Activate", 0, "Blink", "Activate", 1, "Animation 2", "Blink", 0, "Move", "Blink", 1, "Animation" ] node_connections = [ "Blink", 0, "Move", "Blink", 1, "Animation", "Activate", 0, "Blink", "Activate", 1, "Animation 2", "output", 0, "Activate" ]
[sub_resource type="AnimationNodeStateMachinePlayback" id=17] [sub_resource type="AnimationNodeStateMachinePlayback" id=17]
@ -714,7 +714,7 @@ mesh = SubResource( 1 )
skin = SubResource( 2 ) skin = SubResource( 2 )
[node name="head_bone" type="BoneAttachment" parent="model_transform/DungMan/Armature/Skeleton" index="1"] [node name="head_bone" type="BoneAttachment" parent="model_transform/DungMan/Armature/Skeleton" index="1"]
transform = Transform( 1, -2.21304e-16, -1.10964e-17, 1.63982e-18, -0.0426856, 0.999088, -2.21576e-16, -0.999088, -0.0426856, -3.31142e-16, -0.0537476, -1.50833 ) transform = Transform( 1, -2.215e-16, -8.74829e-18, 1.05956e-18, -0.0346883, 0.999398, -2.21671e-16, -0.999398, -0.0346883, -3.32827e-16, -0.0101955, -1.49897 )
bone_name = "Item" bone_name = "Item"
[node name="ItemSpawn" type="Spatial" parent="model_transform/DungMan/Armature/Skeleton/head_bone"] [node name="ItemSpawn" type="Spatial" parent="model_transform/DungMan/Armature/Skeleton/head_bone"]

View File

@ -24,11 +24,8 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.02357, 0.126143 )
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.26269, 0.778543, -0.31761 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.26269, 0.778543, -0.31761 )
[node name="item_dump" parent="." instance=ExtResource( 4 )] [node name="item_dump" parent="." instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 9.53674e-07, 0.993049, 0.0943546 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.86102e-06, 0.0492492, 0.709089 )
item_type_0 = ExtResource( 11 ) items_required = [ ExtResource( 5 ), ExtResource( 11 ) ]
item_count_0 = 1
item_type_1 = ExtResource( 5 )
item_count_1 = 1
[node name="game_canvas" type="CanvasLayer" parent="."] [node name="game_canvas" type="CanvasLayer" parent="."]
layer = 0 layer = 0

35
scripts/item_balloon.gd Normal file
View File

@ -0,0 +1,35 @@
extends Spatial
class_name ItemBalloon
const ItemScene = preload("res://scenes/item.tscn")
onready var anim_tree : AnimationTree = $"%AnimationTree"
onready var bounce_timer : Timer = $"%bounce_timer"
onready var attached_item = $"%attached_item"
var anim_playback : AnimationNodeStateMachinePlayback = null
var is_bouncing : bool = false
# Called when the node enters the scene tree for the first time.
func _ready():
anim_playback = anim_tree["parameters/playback"]
anim_playback.travel("idle")
bounce_timer.one_shot = true
func attach_item(item : Resource):
attached_item.set_item_type(item)
func bounce():
if is_bouncing:
return
is_bouncing = true
anim_playback.travel("bounce")
bounce_timer.start(anim_playback.get_current_length())
func _on_bounce_timer_timeout():
pass
# assert(is_bouncing)
# anim_playback.start("Balloon Reset")
# anim_playback.travel("Ballon Idle")
# is_bouncing = false

View File

@ -2,51 +2,62 @@ extends Spatial
signal item_dump_completed signal item_dump_completed
signal item_dumped signal item_dumped
# Godot is not configurable enough (without great pains)
# to make this look less dumb
export var item_type_0: Resource
export var item_count_0: int
export var item_type_1: Resource
export var item_count_1: int
export var item_type_2: Resource
export var item_count_2: int
var remaining := {}
export var enabled = true export var enabled = true
export (Array,Resource) var items_required
onready var one_item_node : Spatial = $"%one_item"
onready var two_item_node : Spatial = $"%two_item"
onready var one_item_balloon : ItemBalloon = $"%one_item_balloon"
onready var two_item_balloon1 : ItemBalloon = $"%two_item_balloon1"
onready var two_item_balloon2 : ItemBalloon = $"%two_item_balloon2"
var items_remaining = []
func _ready(): func _ready():
assert(items_required.size() <= 2)
reset() reset()
update_item_balloons()
func reset(): func reset():
remaining.clear() items_remaining.clear()
if item_type_0 and item_count_0 > 0: for item in items_required:
remaining[item_type_0] = item_count_0 assert(item != null)
if item_type_1 and item_count_1 > 0: items_remaining.push_back(item)
remaining[item_type_1] = item_count_1
if item_type_2 and item_count_2 > 0:
remaining[item_type_2] = item_count_2
func on_player_interact(player) -> bool: func on_player_interact(player) -> bool:
if not enabled: if not enabled:
return false return false
if remaining.empty(): if items_remaining.empty():
return false return false
if not player.has_item(): if not player.has_item():
return false return false
if not remaining.has(player.item_in_hand.item_type): if not items_remaining.has(player.item_in_hand.item_type):
return false return false
assert(remaining[player.item_in_hand.item_type] > 0, "remaining dictionary should always erase keys with a value of 0")
# Remove the player's item and mark off the item on the remaining list # Remove the player's item and mark off the item on the remaining list
var item = player.drop_item_in_hand() var item = player.drop_item_in_hand()
remaining[item.item_type] -= 1 items_remaining.erase(item.item_type)
if remaining[item.item_type] <= 0:
remaining.erase(item.item_type)
item.queue_free() item.queue_free()
emit_signal("item_dumped") emit_signal("item_dumped")
update_item_balloons()
# Check if everything's been checked off # Check if everything's been checked off
if remaining.empty(): if items_remaining.empty():
emit_signal("item_dump_completed") emit_signal("item_dump_completed")
return true return true
func update_item_balloons():
if items_remaining.size() == 0:
one_item_node.visible = false
two_item_node.visible = false
elif items_remaining.size() == 1:
one_item_node.visible = true
two_item_node.visible = false
one_item_balloon.attach_item(items_remaining[0])
else:
one_item_node.visible = false
two_item_node.visible = true
two_item_balloon1.attach_item(items_remaining[0])
two_item_balloon2.attach_item(items_remaining[1])