Add circle timer
This commit is contained in:
parent
79f41e7a41
commit
8c45591df9
17
scenes/circle_timer.tscn
Normal file
17
scenes/circle_timer.tscn
Normal file
@ -0,0 +1,17 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://assets/UI/Meter_Completion.png" type="Texture" id=1]
|
||||
[ext_resource path="res://shaders/circle_timer.gdshader" type="Shader" id=2]
|
||||
[ext_resource path="res://scripts/circle_timer.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=1]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource( 2 )
|
||||
shader_param/albedo = Color( 0, 1, 0.416667, 1 )
|
||||
shader_param/percent = 0.0
|
||||
|
||||
[node name="circle_timer" type="Sprite3D"]
|
||||
transform = Transform( 0.25, 0, 0, 0, 0.176777, 0.176777, 0, -0.176777, 0.176777, 0, 0, 0 )
|
||||
material_override = SubResource( 1 )
|
||||
texture = ExtResource( 1 )
|
||||
script = ExtResource( 3 )
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[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]
|
||||
@ -6,6 +6,7 @@
|
||||
[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://item_types/crystal.tres" type="Resource" id=6]
|
||||
[ext_resource path="res://scenes/circle_timer.tscn" type="PackedScene" id=7]
|
||||
|
||||
[node name="crafting_station" type="Spatial" groups=["damageable"]]
|
||||
script = ExtResource( 2 )
|
||||
@ -42,6 +43,9 @@ visible = false
|
||||
modulate = Color( 0, 0, 0, 1 )
|
||||
text = "Progress: 20%"
|
||||
|
||||
[node name="circle_timer" parent="." instance=ExtResource( 7 )]
|
||||
transform = Transform( -1.49012e-08, -0.176777, 0.176777, 0, 0.176777, 0.176777, -0.25, 7.45058e-09, -7.45058e-09, 0.722693, 1.42808, 0.107395 )
|
||||
|
||||
[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"]
|
||||
[connection signal="timeout" from="gen_timer" to="." method="_on_gen_timer_timeout"]
|
||||
[connection signal="item_dump_completed" from="item_dump" to="." method="_on_item_dump_item_dump_completed"]
|
||||
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scripts/hydroponics_station/hydroponics_station.gd" type="Script" id=2]
|
||||
@ -6,6 +6,7 @@
|
||||
[ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=4]
|
||||
[ext_resource path="res://scenes/item_dump.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://item_types/ingot.tres" type="Resource" id=6]
|
||||
[ext_resource path="res://scenes/circle_timer.tscn" type="PackedScene" id=7]
|
||||
|
||||
[node name="hydroponics_station" type="Spatial"]
|
||||
script = ExtResource( 2 )
|
||||
@ -35,6 +36,9 @@ omni_attenuation = 0.933034
|
||||
unique_name_in_owner = true
|
||||
items_required = [ ExtResource( 6 ) ]
|
||||
|
||||
[node name="circle_timer" parent="." instance=ExtResource( 7 )]
|
||||
transform = Transform( 0.25, 0, 0, 0, 0.176777, 0.176777, 0, -0.176777, 0.176777, 0, 1.42433, 0.280864 )
|
||||
|
||||
[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="timeout" from="grow_timer" to="." method="_on_grow_timer_timeout"]
|
||||
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=8 format=2]
|
||||
[gd_scene load_steps=11 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/coin_machine.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=2]
|
||||
@ -7,6 +7,14 @@
|
||||
[ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://item_types/gem.tres" type="Resource" id=6]
|
||||
[ext_resource path="res://item_types/ore.tres" type="Resource" id=7]
|
||||
[ext_resource path="res://scenes/circle_timer.tscn" type="PackedScene" id=8]
|
||||
[ext_resource path="res://shaders/circle_timer.gdshader" type="Shader" id=9]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=1]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource( 9 )
|
||||
shader_param/albedo = Color( 0, 1, 0.416667, 1 )
|
||||
shader_param/percent = 0.0
|
||||
|
||||
[node name="item_generator" type="Spatial"]
|
||||
transform = Transform( 1, 0, 3.57628e-07, 0, 1, 0, -3.57628e-07, 0, 1, 0.330428, 0, -8.57503 )
|
||||
@ -47,6 +55,10 @@ visible = false
|
||||
modulate = Color( 0, 0, 0, 1 )
|
||||
text = "Progress: 20%"
|
||||
|
||||
[node name="circle_timer" parent="." instance=ExtResource( 8 )]
|
||||
transform = Transform( 0.25, 0, 0, 0, 0.176777, 0.176777, 0, -0.176777, 0.176777, -1.49012e-07, 1.25146, 0.444146 )
|
||||
material_override = SubResource( 1 )
|
||||
|
||||
[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"]
|
||||
[connection signal="timeout" from="gen_timer" to="." method="_on_gen_timer_timeout"]
|
||||
[connection signal="item_dump_completed" from="item_dump" to="." method="_on_item_dump_item_dump_completed"]
|
||||
|
@ -417,11 +417,11 @@ transform = Transform( 0.502127, 2.91038e-11, 0.487718, 5.82077e-11, 0.7, -5.456
|
||||
grow_time = 30.0
|
||||
|
||||
[node name="hydroponics_station3" parent="Hydroponics_Room" instance=ExtResource( 11 )]
|
||||
transform = Transform( 0.502127, 3.7835e-10, 0.487718, 5.82077e-11, 0.700001, -1.04592e-10, -0.487718, 2.61934e-10, 0.502128, 1.79792, 0.00590622, -8.91695 )
|
||||
transform = Transform( 0.487718, 2.91038e-10, -0.502128, -4.46562e-10, 0.700001, -2.32831e-10, 0.502127, 3.49246e-10, 0.487718, 1.79792, 0.00590622, -8.91695 )
|
||||
grow_time = 30.0
|
||||
|
||||
[node name="hydroponics_station4" parent="Hydroponics_Room" instance=ExtResource( 11 )]
|
||||
transform = Transform( 0.502127, 3.7835e-10, 0.487718, 5.82077e-11, 0.700001, -2.37378e-10, -0.487718, 3.7835e-10, 0.502128, 3.28563, 0.006777, -7.36006 )
|
||||
transform = Transform( 0.487718, 3.7835e-10, -0.502128, -5.0477e-10, 0.700001, -2.32831e-10, 0.502127, 4.36557e-10, 0.487718, 3.28563, 0.006777, -7.36006 )
|
||||
grow_time = 30.0
|
||||
|
||||
[node name="book" parent="Hydroponics_Room" instance=ExtResource( 23 )]
|
||||
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=9 format=2]
|
||||
[gd_scene load_steps=12 format=2]
|
||||
|
||||
[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scripts/oven/oven.gd" type="Script" id=2]
|
||||
@ -7,10 +7,18 @@
|
||||
[ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://item_types/repair_kit.tres" type="Resource" id=6]
|
||||
[ext_resource path="res://item_types/ingot.tres" type="Resource" id=7]
|
||||
[ext_resource path="res://scenes/circle_timer.tscn" type="PackedScene" id=8]
|
||||
[ext_resource path="res://shaders/circle_timer.gdshader" type="Shader" id=9]
|
||||
|
||||
[sub_resource type="BoxShape" id=4]
|
||||
extents = Vector3( 0.648623, 1, 0.516904 )
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=5]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource( 9 )
|
||||
shader_param/albedo = Color( 0, 1, 0.416667, 1 )
|
||||
shader_param/percent = 0.0
|
||||
|
||||
[node name="oven" type="Spatial" groups=["damageable"]]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
@ -35,6 +43,10 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.868397 )
|
||||
[node name="cook_timer" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
|
||||
[node name="circle_timer" parent="." instance=ExtResource( 8 )]
|
||||
transform = Transform( 0.25, 0, 0, 0, 0.176777, 0.176777, 0, -0.176777, 0.176777, 0, 0.943779, 1.02976 )
|
||||
material_override = SubResource( 5 )
|
||||
|
||||
[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"]
|
||||
[connection signal="item_dump_completed" from="item_dump" to="." method="_on_item_dump_completed"]
|
||||
[connection signal="item_changed" from="item_holder" to="." method="_on_item_holder_item_changed"]
|
||||
|
24
scripts/circle_timer.gd
Normal file
24
scripts/circle_timer.gd
Normal file
@ -0,0 +1,24 @@
|
||||
extends Sprite3D
|
||||
|
||||
var timer: Timer
|
||||
|
||||
func _ready():
|
||||
material_override
|
||||
|
||||
func set_timer(p_timer: Timer):
|
||||
timer = p_timer
|
||||
update()
|
||||
|
||||
func clear_timer():
|
||||
timer = null
|
||||
update()
|
||||
|
||||
func _process(delta):
|
||||
update()
|
||||
|
||||
func update():
|
||||
if timer != null:
|
||||
visible = true
|
||||
material_override.set_shader_param("percent", timer.time_left / timer.wait_time)
|
||||
else:
|
||||
visible = false
|
@ -20,6 +20,7 @@ onready var gen_timer = $"%gen_timer"
|
||||
onready var progress_text = $"%progress_text"
|
||||
onready var item_dump = $"%item_dump"
|
||||
onready var status_light = $"%status_light"
|
||||
onready var circle_timer = $circle_timer
|
||||
|
||||
var item_slots = null
|
||||
var state = null
|
||||
|
@ -17,9 +17,11 @@ func enter_from(state):
|
||||
ctx.gen_timer.start()
|
||||
ctx.status_light.activate()
|
||||
ctx.progress_text.text = "Progress: 0%"
|
||||
ctx.circle_timer.set_timer(ctx.gen_timer)
|
||||
|
||||
func exit_to(state):
|
||||
ctx.gen_timer.stop()
|
||||
ctx.circle_timer.clear_timer()
|
||||
|
||||
func update(delta):
|
||||
var time_left : float = ctx.gen_timer.time_left
|
||||
|
@ -16,9 +16,10 @@ func enter_from(state):
|
||||
ctx.get_node("grow_timer").start()
|
||||
ctx.status_light.activate()
|
||||
ctx.item_dump.enabled = false
|
||||
ctx.get_node("circle_timer").set_timer(ctx.get_node("grow_timer"))
|
||||
|
||||
func exit_to(state):
|
||||
pass
|
||||
ctx.get_node("circle_timer").clear_timer()
|
||||
|
||||
func on_coin_machine_coin_requirement_met(player):
|
||||
assert(false, "coin machine should be disabled while growing")
|
||||
|
@ -20,6 +20,7 @@ onready var gen_timer = $"%gen_timer"
|
||||
onready var item_dump = $"%item_dump"
|
||||
onready var status_light = $"%status_light"
|
||||
onready var progress_text = $"%progress_text"
|
||||
onready var circle_timer = $circle_timer
|
||||
|
||||
var state = null
|
||||
var item_slots
|
||||
|
@ -17,9 +17,10 @@ func enter_from(state):
|
||||
ctx.status_light.activate()
|
||||
ctx.gen_timer.start()
|
||||
ctx.emit_signal("gen_started")
|
||||
ctx.circle_timer.set_timer(ctx.gen_timer)
|
||||
|
||||
func exit_to(state):
|
||||
pass
|
||||
ctx.circle_timer.clear_timer()
|
||||
|
||||
func update(delta):
|
||||
var time_left : float = ctx.gen_timer.time_left
|
||||
|
@ -17,9 +17,10 @@ func enter_from(state):
|
||||
|
||||
ctx.get_node("cook_timer").start()
|
||||
ctx.get_node("status_light").activate()
|
||||
ctx.get_node("circle_timer").set_timer(ctx.get_node("cook_timer"))
|
||||
|
||||
func exit_to(state):
|
||||
pass
|
||||
ctx.get_node("circle_timer").clear_timer()
|
||||
|
||||
func on_coin_machine_coin_requirement_met(player):
|
||||
assert(false, "coin machine should be disabled while growing")
|
||||
|
33
shaders/circle_timer.gdshader
Normal file
33
shaders/circle_timer.gdshader
Normal file
@ -0,0 +1,33 @@
|
||||
shader_type spatial;
|
||||
render_mode unshaded;
|
||||
|
||||
uniform vec4 albedo : hint_color;
|
||||
uniform float percent;
|
||||
const float PI = 3.14159;
|
||||
|
||||
vec3 circle(vec2 p) {
|
||||
float v = (1.0-smoothstep(0.49, 0.50, length(p))) * smoothstep(0.19, 0.2, length(p));
|
||||
return vec3(v, v,v);
|
||||
}
|
||||
|
||||
float atan2(in float y, in float x) {
|
||||
bool s = (abs(x) > abs(y));
|
||||
if (s) {
|
||||
return PI/2.0 - atan(x,y);
|
||||
} else {
|
||||
return atan(y,x);
|
||||
}
|
||||
}
|
||||
|
||||
float wipe(vec2 pos, float p_percent) {
|
||||
float angle = atan2(pos.y , pos.x);
|
||||
float alpha = step(p_percent *PI * 2.25, angle + PI);
|
||||
return alpha;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = UV;
|
||||
vec2 pos = UV - vec2(0.5, 0.5);
|
||||
ALBEDO = circle(pos) * albedo.xyz;
|
||||
ALPHA = circle(pos).x * wipe(pos, percent);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user