45 lines
1.3 KiB
GDScript
45 lines
1.3 KiB
GDScript
extends Node3D
|
|
|
|
@onready var tower_blueprint = preload("res://Towers/tower.tscn")
|
|
|
|
@onready var cam : Camera3D = $Camera3D
|
|
@onready var selector : Node3D = $Selector
|
|
|
|
|
|
#func _ready() -> void:
|
|
#$Spawner.spawn_next_wave()
|
|
|
|
func _process(delta: float) -> void:
|
|
handle_player_controls()
|
|
if Input.is_action_just_pressed("build"):
|
|
build_tower(tower_blueprint)
|
|
|
|
|
|
func handle_player_controls() -> void:
|
|
var space_state : PhysicsDirectSpaceState3D = get_world_3d().direct_space_state
|
|
var mouse_pos : Vector2 = get_viewport().get_mouse_position()
|
|
|
|
var origin : Vector3 = cam.project_ray_origin(mouse_pos)
|
|
var end : Vector3 = origin + cam.project_ray_normal(mouse_pos) * 100
|
|
var ray : PhysicsRayQueryParameters3D = PhysicsRayQueryParameters3D.create(origin, end)
|
|
ray.collide_with_bodies = true
|
|
|
|
var ray_result : Dictionary = space_state.intersect_ray(ray)
|
|
|
|
if ray_result.is_empty():
|
|
selector.visible = false
|
|
return
|
|
|
|
selector.visible = true
|
|
var collider : CollisionObject3D = ray_result.get("collider")
|
|
selector.global_position = collider.global_position
|
|
selector.global_position += Vector3(0.0,0.2,0.0)
|
|
|
|
|
|
func build_tower(scene : PackedScene) -> void:
|
|
if !selector.visible:
|
|
return
|
|
|
|
var temp_cannon : Tower = scene.instantiate()
|
|
add_child(temp_cannon)
|
|
temp_cannon.global_position = selector.global_position
|