initial commit
This commit is contained in:
79
scripts/spider.gd
Normal file
79
scripts/spider.gd
Normal file
@@ -0,0 +1,79 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
var player = null
|
||||
@export var health = 3
|
||||
@export var number_of_drops = 3
|
||||
|
||||
const SPEED = 3.0
|
||||
const MAX_LV = 10
|
||||
const MAX_AV = 10
|
||||
|
||||
@export var player_path : NodePath
|
||||
|
||||
@onready var nav_agent = $NavigationAgent3D
|
||||
@onready var target = $body/target
|
||||
@onready var movement_shape = $MovementShape
|
||||
|
||||
var stamina = load("res://assets/stamina_pickup.tscn")
|
||||
var ammo = load("res://assets/ammo_pickup.tscn")
|
||||
var jump = load("res://assets/jump_pickup.tscn")
|
||||
var die_particles = load("res://assets/die_particles.tscn")
|
||||
var particlespawn
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var rand_select
|
||||
var rand_item
|
||||
|
||||
func _ready():
|
||||
player = get_node(player_path)
|
||||
|
||||
func _process(delta):
|
||||
velocity = Vector3.ZERO
|
||||
|
||||
# Navigation
|
||||
nav_agent.set_target_position(player.global_transform.origin)
|
||||
var next_nav_point = nav_agent.get_next_path_position()
|
||||
velocity = (next_nav_point - global_transform.origin).normalized() * SPEED
|
||||
|
||||
|
||||
look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z), Vector3.UP)
|
||||
|
||||
move_and_slide()
|
||||
|
||||
|
||||
func _on_area_3d_body_part_hit(dam):
|
||||
health -= dam
|
||||
print("health: " + str(health))
|
||||
if health <= 0:
|
||||
|
||||
particlespawn = die_particles.instantiate()
|
||||
particlespawn.position = self.global_position
|
||||
particlespawn.transform.basis = self.global_transform.basis
|
||||
get_parent().add_child(particlespawn)
|
||||
|
||||
#pickup drop
|
||||
while number_of_drops > 0:
|
||||
var rand_selector = int(round(rng.randf_range(1,2)))
|
||||
var lv_x = rng.randf_range(-MAX_LV,MAX_LV)
|
||||
var lv_y = rng.randf_range(0,MAX_LV)
|
||||
var lv_z = rng.randf_range(-MAX_LV,MAX_LV)
|
||||
var av_x = rng.randf_range(-MAX_AV,MAX_AV)
|
||||
var av_y = rng.randf_range(-MAX_AV,MAX_AV)
|
||||
var av_z = rng.randf_range(-MAX_AV,MAX_AV)
|
||||
|
||||
match rand_selector:
|
||||
1:
|
||||
rand_select = stamina
|
||||
2:
|
||||
rand_select = ammo
|
||||
3:
|
||||
rand_select = jump
|
||||
# Random Item Drop
|
||||
rand_item = rand_select.instantiate()
|
||||
rand_item.position = self.global_position
|
||||
rand_item.transform.basis = self.global_transform.basis
|
||||
rand_item.linear_velocity += self.global_transform.basis * Vector3(lv_x,lv_y,lv_z)
|
||||
rand_item.angular_velocity += self.global_transform.basis * Vector3(av_x,av_y,av_z)
|
||||
get_parent().add_child(rand_item)
|
||||
number_of_drops -= 1
|
||||
|
||||
queue_free()
|
||||
Reference in New Issue
Block a user