* Ajout d'un mode infini (pour nos hard core gamers) * Ajout d'un message de découverte d'un nouvel outil * Séparation de la pelle en deux outils : la pioche et la fourche * Amélioration de la lisibilité des capsules d'énergies * Changement léger des texture du sol et de la pierre * Correction d'un bug lors du clic frénétique sur le porte de sortie du vaisseau * Ajout d'un icône de recharge * Fix de la mutation Ancien qui ne s'améliorait pas au niveau 4 + début de dev des artefacts avec un distributeur
110 lines
3.2 KiB
GDScript
110 lines
3.2 KiB
GDScript
@tool
|
|
extends Node3D
|
|
class_name VendingMachine3d
|
|
|
|
const LINE_OBJECT_NUMBER = 5
|
|
const LINE_OBJECT_SEPARATION = Vector3.LEFT * 0.2
|
|
const FALLING_OBJECT_LINE_SHIFT = Vector3.FORWARD * 0.3
|
|
|
|
@export_tool_button("Update", "Callable") var update_action = update
|
|
|
|
@export_tool_button("Fall Object 1", "Callable") var fall_object_1_action = fall_object_1
|
|
@export_tool_button("Fall Object 1", "Callable") var fall_object_2_action = fall_object_2
|
|
|
|
@export var object_1_scene : PackedScene = null : set = set_object_1_scene
|
|
@export var object_2_scene : PackedScene = null : set = set_object_2_scene
|
|
@export var screen_1_hide : bool = true : set = set_screen_1_hide
|
|
@export var screen_2_hide : bool = true : set = set_screen_2_hide
|
|
|
|
# func _input(_e):
|
|
# if Input.is_action_just_pressed("action"):
|
|
# fall_object([
|
|
# %Line1,
|
|
# %Line2,
|
|
# %Line3,
|
|
# %Line4
|
|
# ].pick_random())
|
|
|
|
func _ready():
|
|
update()
|
|
|
|
func update():
|
|
set_object_1_scene()
|
|
set_object_2_scene()
|
|
set_screen_1_hide()
|
|
set_screen_2_hide()
|
|
|
|
func set_object_1_scene(scene := object_1_scene):
|
|
if scene and is_node_ready():
|
|
fill_lines(%Line1, scene.instantiate())
|
|
fill_lines(%Line2, scene.instantiate())
|
|
object_1_scene = scene
|
|
|
|
func set_object_2_scene(scene := object_2_scene):
|
|
if scene and is_node_ready():
|
|
fill_lines(%Line3, scene.instantiate())
|
|
fill_lines(%Line4, scene.instantiate())
|
|
object_2_scene = scene
|
|
|
|
func set_screen_1_hide(v := screen_1_hide):
|
|
screen_1_hide = v
|
|
if is_node_ready():
|
|
%HideScreen1.visible = v
|
|
|
|
func set_screen_2_hide(v := screen_2_hide):
|
|
screen_2_hide = v
|
|
if is_node_ready():
|
|
%HideScreen2.visible = v
|
|
|
|
func fall_object_1():
|
|
fall_object([
|
|
%Line1,
|
|
%Line2
|
|
].pick_random())
|
|
|
|
func fall_object_2():
|
|
fall_object([
|
|
%Line3,
|
|
%Line4
|
|
].pick_random())
|
|
|
|
func fall_object(from_line : Node3D):
|
|
if len(from_line.get_children()):
|
|
var falling_object = create_falling_object()
|
|
|
|
var object = from_line.get_children().pick_random() as Node3D
|
|
falling_object.global_position = object.global_position + FALLING_OBJECT_LINE_SHIFT
|
|
|
|
var falling_model = object.duplicate()
|
|
falling_model.position = Vector3.ZERO
|
|
falling_object.add_child(falling_model)
|
|
falling_object.freeze = false
|
|
object.queue_free()
|
|
|
|
%FallingObjects.add_child(falling_object)
|
|
|
|
func clear_falling_objects():
|
|
for c in %FallingObjects.get_children():
|
|
c.queue_free()
|
|
|
|
func create_falling_object() -> RigidBody3D:
|
|
var falling_object = RigidBody3D.new()
|
|
var falling_collider = CollisionShape3D.new()
|
|
var falling_shape = SphereShape3D.new()
|
|
falling_shape.radius = 0.08
|
|
falling_collider.shape = falling_shape
|
|
falling_object.add_child(falling_collider)
|
|
falling_object.gravity_scale = 0.2
|
|
|
|
return falling_object
|
|
|
|
func fill_lines(line : Node3D, object : Node3D):
|
|
for c in line.get_children():
|
|
c.queue_free()
|
|
|
|
for i in range(LINE_OBJECT_NUMBER):
|
|
var new_object = object.duplicate()
|
|
line.add_child(new_object)
|
|
new_object.position = i * LINE_OBJECT_SEPARATION
|
|
|