proto3 initial commit
This commit is contained in:
131
proto3/godot/scenes/furniture/closet.gd
Normal file
131
proto3/godot/scenes/furniture/closet.gd
Normal file
@@ -0,0 +1,131 @@
|
||||
extends Spatial
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
enum {DOOR_OPEN, DOOR_CLOSED}
|
||||
var door_l_state = DOOR_CLOSED
|
||||
var door_r_state = DOOR_CLOSED
|
||||
var act_l_delay = 0.0
|
||||
var act_r_delay = 0.0
|
||||
var l_act = false
|
||||
var r_act = false
|
||||
var hide_delay = 4.0
|
||||
var hidden = false
|
||||
func activate_l_door(def):
|
||||
if def && door_l_state == DOOR_CLOSED:
|
||||
$closet/closet_door_left/AnimationPlayer.play("openning")
|
||||
door_l_state = DOOR_OPEN
|
||||
if !def && door_l_state == DOOR_OPEN:
|
||||
$closet/closet_door_left/AnimationPlayer.play_backwards("openning")
|
||||
door_l_state = DOOR_CLOSED
|
||||
func activate_r_door(def):
|
||||
if def && door_r_state == DOOR_CLOSED:
|
||||
$closet/closet_door_right/AnimationPlayer.play("openning_r")
|
||||
door_r_state = DOOR_OPEN
|
||||
if !def && door_r_state == DOOR_OPEN:
|
||||
$closet/closet_door_right/AnimationPlayer.play_backwards("openning_r")
|
||||
door_r_state = DOOR_CLOSED
|
||||
func _ready():
|
||||
add_to_group("closet")
|
||||
add_to_group("hide_spot")
|
||||
var ret = $left.connect("body_entered", self, "body_enter")
|
||||
assert(ret == OK)
|
||||
ret = $left.connect("body_exited", self, "body_exit")
|
||||
assert(ret == OK)
|
||||
ret = $right.connect("body_entered", self, "body_enter")
|
||||
assert(ret == OK)
|
||||
ret = $right.connect("body_exited", self, "body_exit")
|
||||
assert(ret == OK)
|
||||
ret = $Timer.connect("timeout", self, "free_character")
|
||||
assert(ret == OK)
|
||||
|
||||
func _process(delta):
|
||||
if l_act:
|
||||
act_l_delay += delta
|
||||
if act_l_delay >= 1.5:
|
||||
if door_l_state == DOOR_CLOSED:
|
||||
door_l_state = DOOR_OPEN
|
||||
l_act = false
|
||||
if r_act:
|
||||
act_l_delay += delta
|
||||
if act_l_delay >= 1.5:
|
||||
if door_l_state == DOOR_CLOSED:
|
||||
door_l_state = DOOR_OPEN
|
||||
r_act = false
|
||||
func free_character():
|
||||
var c = get_meta("hidden_character")
|
||||
c.remove_collision_exception_with($closet/closet_door_left/static_collision)
|
||||
c.remove_collision_exception_with($closet/closet_door_right/static_collision)
|
||||
c.remove_collision_exception_with($closet/static_collision)
|
||||
c.global_transform = $exit_spot.global_transform
|
||||
yield(get_tree().create_timer(0.1), "timeout")
|
||||
c.global_transform = $exit_spot.global_transform
|
||||
c.set_meta("smart_object", false)
|
||||
c.do_walk()
|
||||
hidden = false
|
||||
set_meta("hidden_character", null)
|
||||
func body_enter(body):
|
||||
if !body.is_in_group("characters"):
|
||||
return
|
||||
if body.get_meta("grabbing"):
|
||||
return
|
||||
# TODO
|
||||
if body.get_meta("grabbed"):
|
||||
return
|
||||
if !hidden:
|
||||
if body == global.player:
|
||||
print("CLOSET")
|
||||
activate_l_door(true)
|
||||
activate_r_door(true)
|
||||
elif body.has_meta("action"):
|
||||
var action = body.get_meta("action")
|
||||
if action == "hide":
|
||||
activate_l_door(true)
|
||||
activate_r_door(true)
|
||||
body.set_meta("smart_object", true)
|
||||
body.do_stop()
|
||||
set_meta("hidden_character", body)
|
||||
hidden = true
|
||||
yield(get_tree().create_timer(hide_delay), "timeout")
|
||||
body.add_collision_exception_with($closet/closet_door_left/static_collision)
|
||||
body.add_collision_exception_with($closet/closet_door_right/static_collision)
|
||||
body.add_collision_exception_with($closet/static_collision)
|
||||
body.global_transform = $hide_spot.global_transform
|
||||
yield(get_tree().create_timer(0.1), "timeout")
|
||||
body.global_transform = $hide_spot.global_transform
|
||||
yield(get_tree().create_timer(hide_delay), "timeout")
|
||||
activate_l_door(false)
|
||||
activate_r_door(false)
|
||||
else:
|
||||
return
|
||||
else:
|
||||
activate_l_door(true)
|
||||
activate_r_door(true)
|
||||
else:
|
||||
if body == get_meta("hidden_character"):
|
||||
return
|
||||
if body == global.player:
|
||||
activate_l_door(true)
|
||||
activate_r_door(true)
|
||||
$Timer.start(4.0)
|
||||
elif body.has_meta("action"):
|
||||
var action = body.get_meta("action")
|
||||
if action == "hide":
|
||||
return
|
||||
if action == "patrol":
|
||||
# var c = get_meta("hidden_character")
|
||||
activate_l_door(true)
|
||||
activate_r_door(true)
|
||||
$Timer.start(4.0)
|
||||
func body_exit(_body):
|
||||
pass
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
# pass
|
||||
Reference in New Issue
Block a user