Feature pour l'alpha 1.3
* 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
This commit is contained in:
109
gui/vending_machine/scripts/vending_machine_3d.gd
Normal file
109
gui/vending_machine/scripts/vending_machine_3d.gd
Normal file
@@ -0,0 +1,109 @@
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user