spawner can now spawn 3d models

This commit is contained in:
Luca 2024-09-17 20:06:11 +02:00
parent ccd3ef577c
commit f025f89401
10 changed files with 59 additions and 34 deletions

View file

@ -1,38 +1,40 @@
extends Control
var touch_start: Vector2 = Vector2(0, 0)
var pressed: bool = false
var previous_position: Vector2 = Vector2(0,0)
var previous_position: Vector2 = Vector2(0, 0)
var touch_delta: Vector2 = Vector2(0, 0)
var current_delta: Vector2 = Vector2()
var dampening_factor: float = 0.1 # Lower values = more dampening (0-1 range)
var current_delta: Vector2 = Vector2(0, 0)
var dampening_factor: float = 0.8 # Lower values = more dampening (0-1 range)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
current_delta = lerp(current_delta, Vector2(0, 0), dampening_factor)
print(current_delta)
var t = clamp(dampening_factor * delta, 0.0, 1.0) # Clamp to 0-1 range
current_delta = lerp(current_delta, Vector2(0, 0), ease(t, -0.5)) # Use easing with lerp
# Simulate joystick motion using the dampened delta.
simulate_joystick_motion(JOY_AXIS_RIGHT_X, -current_delta.x * 0.1, 0)
# Debug: See the current delta
#print(current_delta)
func _on_gui_input(event: InputEvent) -> void:
# Filter touch or drag events only.
if event is not InputEventScreenTouch and event is not InputEventScreenDrag:
return
if event is InputEventScreenTouch and pressed == false and event.is_pressed() == true:
pressed = true
touch_start = event.position
#print("touch start")
if event is InputEventScreenTouch and pressed == true and event.is_pressed() == false:
pressed = false
#simulate_joystick_motion(JOY_AXIS_RIGHT_X, 0, 0)
#print("touch end")
if event is InputEventScreenTouch:
if event.is_pressed():
pressed = true
previous_position = event.position # Initialize previous position on touch start
else:
pressed = false
touch_delta = Vector2(0, 0) # Reset delta on touch release
if pressed and event is InputEventScreenDrag:
# Calculate the delta between the current and previous touch position.
touch_delta = event.position - previous_position
current_delta = touch_delta #lerp(current_delta, touch_delta, 1.0 - dampening_factor)
previous_position = event.position
current_delta = touch_delta * 0.5 # Update current delta with the new drag value
func simulate_joystick_motion(axis: int, value: float, device_id: int = 0) -> void:
var joystick_event = InputEventJoypadMotion.new()

13
scripts/monster.gd Normal file
View file

@ -0,0 +1,13 @@
class_name Monster
extends Node3D
@export var monster_stats: MonsterStats
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var model_instance = monster_stats.model.instantiate()
add_child(model_instance)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass

View file

@ -8,7 +8,7 @@ extends Node3D
@onready var spawn_timer: Timer = Timer.new()
# list that holds all spawnable monsters
@export var spawnable_monsters: Array[MonsterStats]
@export var spawnable_monsters: Array[PackedScene]
# the maximum amount of spawned monsters
# no monsters will spawn, when this number is reached
@ -48,17 +48,14 @@ func spawn() -> void:
var spawn_point_z = randf_range(-max_distance_spawn, max_distance_spawn)
# instantiate a monster .tscn scene
var monster_to_spawn = spawnable_monsters[0]
var monster_to_spawn = spawnable_monsters[0].instantiate()
# TODO: Replace this with actual instantiation of a walking monster
var mesh_instance = MeshInstance3D.new()
mesh_instance.mesh = BoxMesh.new()
# calculate the position of the monster and add the offset of the spawnpoint itself
var monster_position = Vector3(spawn_point_x, 0.2, spawn_point_z)
mesh_instance.position = monster_position + position
monster_to_spawn.position = monster_position + position
var debug_level_node = get_node("/root/Main/CurrentLevel/DebugLevel")
debug_level_node.add_child(mesh_instance)
debug_level_node.add_child(monster_to_spawn)
print("spawning mob")
# Called every frame. 'delta' is the elapsed time since the previous frame.