joeblox/gears/ball.gd

45 lines
1 KiB
GDScript

class_name Ball extends "gear.gd"
func gear_name():
return "Ball"
func gear_id():
return 1
func continuous():
return false
func kill_ball(ball):
ball.queue_free()
func make_ball(player):
var ball = RigidBody3D.new()
var cs = CollisionShape3D.new()
var timer = Timer.new()
cs.shape = SphereShape3D.new()
ball.name = "Ball"
ball.mass = 4
ball.position = Vector3.ZERO
ball.global_transform = Transform3D(
player.get_node("Pivot/Container").global_transform)
ball.set_collision_layer_value(1, false)
ball.set_collision_layer_value(3, true)
ball.set_collision_mask_value(3, true)
timer.one_shot = true
timer.autostart = true
timer.wait_time = 5
timer.timeout.connect(kill_ball.bind(ball))
var mesh = $GearMesh.duplicate()
mesh.position = Vector3.ZERO
ball.add_child(mesh)
ball.add_child(cs)
ball.add_child(timer)
return ball
func on_use(player):
var ball = make_ball(player)
var impulse = player.get_node("CameraGimbal").basis.z * -64
impulse.y = 4
ball.apply_central_impulse(impulse)
player.add_sibling(ball)