add new scene, bees, beehive picking, suit picking wip
This commit is contained in:
22
scripts/bee.gd
Normal file
22
scripts/bee.gd
Normal file
@@ -0,0 +1,22 @@
|
||||
class_name Bee
|
||||
extends Node3D
|
||||
|
||||
@export var speed: float = 1
|
||||
|
||||
var swarm: BeeSwarm
|
||||
var move_to_position: Vector3
|
||||
|
||||
func _ready() -> void:
|
||||
_pick_random_position()
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
_move(delta)
|
||||
|
||||
func _pick_random_position() -> void:
|
||||
move_to_position = swarm.position + swarm.get_random_point()
|
||||
|
||||
func _move(delta: float) -> void:
|
||||
global_transform.origin = global_transform.origin.lerp(move_to_position, speed * delta)
|
||||
look_at(move_to_position, Vector3.UP, true)
|
||||
if global_transform.origin.distance_to(move_to_position) < 0.1:
|
||||
_pick_random_position()
|
||||
1
scripts/bee.gd.uid
Normal file
1
scripts/bee.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b86w66wuvolyi
|
||||
55
scripts/bee_swarm.gd
Normal file
55
scripts/bee_swarm.gd
Normal file
@@ -0,0 +1,55 @@
|
||||
@tool
|
||||
class_name BeeSwarm
|
||||
extends Node3D
|
||||
|
||||
@export var bees_count: int = 10:
|
||||
set(count):
|
||||
bees_count = count
|
||||
if Engine.is_editor_hint():
|
||||
_spawn_bees()
|
||||
|
||||
@export var spawn_radius: float = 5.0:
|
||||
set(radius):
|
||||
spawn_radius = radius
|
||||
if Engine.is_editor_hint():
|
||||
_update_collision()
|
||||
_spawn_bees()
|
||||
|
||||
const BEE_INSTANCE = preload("res://scenes/bee.tscn")
|
||||
@onready var collision_shape: CollisionShape3D = $CollisionShape3D
|
||||
|
||||
func _ready() -> void:
|
||||
_update_collision()
|
||||
_spawn_bees()
|
||||
|
||||
func _update_collision() -> void:
|
||||
var shape: SphereShape3D = SphereShape3D.new()
|
||||
shape.radius = spawn_radius
|
||||
collision_shape.shape = shape
|
||||
|
||||
func _spawn_bees() -> void:
|
||||
_destroy_bees()
|
||||
for i in range(bees_count):
|
||||
var bee: Bee = BEE_INSTANCE.instantiate()
|
||||
bee.position = get_random_point()
|
||||
if not Engine.is_editor_hint():
|
||||
bee.swarm = self
|
||||
#bee.rotate_x(randf_range(deg_to_rad(-180), deg_to_rad(180)))
|
||||
bee.rotate_y(randf_range(deg_to_rad(-180), deg_to_rad(180)))
|
||||
bee.rotate_z(randf_range(deg_to_rad(-15), deg_to_rad(15)))
|
||||
add_child(bee)
|
||||
|
||||
func get_random_point() -> Vector3:
|
||||
var theta: float = randf_range(deg_to_rad(-180.0), deg_to_rad(180.0))
|
||||
var phi: float = randf_range(deg_to_rad(-180.0), deg_to_rad(180.0))
|
||||
var radius: float = randf_range(0.01, spawn_radius)
|
||||
var x = radius * sin(phi) * cos(theta)
|
||||
var y = radius * sin(phi) * sin(theta)
|
||||
var z = radius * cos(phi)
|
||||
return Vector3(x, y, z)
|
||||
|
||||
|
||||
func _destroy_bees() -> void:
|
||||
for child in get_children():
|
||||
if child is Bee:
|
||||
child.free()
|
||||
1
scripts/bee_swarm.gd.uid
Normal file
1
scripts/bee_swarm.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://2an1gqwu5v5c
|
||||
8
scripts/collector.gd
Normal file
8
scripts/collector.gd
Normal file
@@ -0,0 +1,8 @@
|
||||
class_name Collector
|
||||
extends Area3D
|
||||
|
||||
signal collected(body: Node3D)
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body.is_in_group("collectable"):
|
||||
collected.emit(body)
|
||||
1
scripts/collector.gd.uid
Normal file
1
scripts/collector.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://5fbo212vqvrp
|
||||
@@ -1,13 +1,9 @@
|
||||
extends Node3D
|
||||
@tool
|
||||
extends XRToolsStartXR
|
||||
|
||||
#signal focus_lost
|
||||
#signal focus_gained
|
||||
#signal pose_recentered
|
||||
var collector_count: int = 0
|
||||
|
||||
func _ready():
|
||||
var interface = XRServer.find_interface("OpenXR")
|
||||
if interface and interface.initialize():
|
||||
# turn off v-sync
|
||||
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
|
||||
|
||||
get_viewport().use_xr = true
|
||||
func _on_collector_collected(body: Node3D) -> void:
|
||||
body.free()
|
||||
print('something collected (' + str(collector_count) + ')')
|
||||
collector_count += 1
|
||||
|
||||
Reference in New Issue
Block a user