43 lines
1,019 B
GDScript
43 lines
1,019 B
GDScript
class_name Ball extends "gear.gd"
|
|
|
|
func gear_name():
|
|
return "Ball"
|
|
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)
|