Enemy bullets deflect off of surfaces
This commit is contained in:
parent
825bc032da
commit
79c935a62f
22
Bullet.gd
22
Bullet.gd
@ -1,4 +1,4 @@
|
||||
extends Spatial
|
||||
extends KinematicBody
|
||||
|
||||
|
||||
var target := Vector3.ZERO
|
||||
@ -9,20 +9,20 @@ var velocity := Vector3.ZERO
|
||||
export var acceleration_factor = 5.0
|
||||
export var accelerating := false
|
||||
|
||||
|
||||
func _ready():
|
||||
$HitArea.connect("body_entered", self, "_on_hit_body")
|
||||
export var coefficient_of_restitution := 0.5
|
||||
|
||||
|
||||
func _on_hit_body(body):
|
||||
if body.name == "Player":
|
||||
print("Player hit!")
|
||||
|
||||
|
||||
func _process(delta):
|
||||
func _physics_process(delta):
|
||||
if accelerating:
|
||||
var direction = (target - global_transform.origin).normalized()
|
||||
acceleration += direction * acceleration_factor * delta
|
||||
velocity += acceleration
|
||||
|
||||
global_transform.origin += velocity * delta
|
||||
var collision = move_and_collide(velocity * delta)
|
||||
|
||||
if collision:
|
||||
var normal = collision.normal
|
||||
velocity = coefficient_of_restitution * (velocity - 2 * velocity.dot(normal) * normal)
|
||||
|
||||
if collision.collider.name == "Player":
|
||||
print("Player hit!")
|
||||
|
21
Bullet.tscn
21
Bullet.tscn
File diff suppressed because one or more lines are too long
@ -11,7 +11,7 @@ var bullet_scene = preload("res://Bullet.tscn")
|
||||
var bullet_velocity = 40.0
|
||||
|
||||
var target
|
||||
var velocity := Vector3(0.0, 5.0, 10.0)
|
||||
var velocity := Vector3(0.0, 1.0, 1.0)
|
||||
|
||||
|
||||
func _ready():
|
||||
@ -40,7 +40,7 @@ func shoot_bullet():
|
||||
var instance = bullet_scene.instance()
|
||||
get_tree().get_root().add_child(instance)
|
||||
|
||||
instance.global_transform.origin = global_transform.origin
|
||||
instance.global_transform.origin = global_transform.origin - global_transform.basis.z
|
||||
instance.velocity = velocity + (target - global_transform.origin).normalized() * bullet_velocity
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user