Changed targeting system to use cone #1
|
@ -0,0 +1,4 @@
|
||||||
|
[gd_resource type="ConcavePolygonShape" format=2]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
data = PoolVector3Array( 0, 0, 10, 0.9511, 0.309, 0, 1, 0, 0, 0, 0, 10, 0.809, 0.5878, 0, 0.9511, 0.309, 0, 0, 0, 10, 0.5878, 0.809, 0, 0.809, 0.5878, 0, 0, 0, 10, 0.309, 0.9511, 0, 0.5878, 0.809, 0, 0, 0, 10, 0, 1, 0, 0.309, 0.9511, 0, 0, 0, 10, -0.309, 0.9511, 0, 0, 1, 0, 0, 0, 10, -0.5878, 0.809, 0, -0.309, 0.9511, 0, 0, 0, 10, -0.809, 0.5878, 0, -0.5878, 0.809, 0, 0, 0, 10, -0.9511, 0.309, 0, -0.809, 0.5878, 0, 0, 0, 10, -1, 0, 0, -0.9511, 0.309, 0, 0, 0, 10, -0.9511, -0.309, 0, -1, 0, 0, 0, 0, 10, -0.809, -0.5878, 0, -0.9511, -0.309, 0, 0, 0, 10, -0.5878, -0.809, 0, -0.809, -0.5878, 0, 0, 0, 10, -0.309, -0.9511, 0, -0.5878, -0.809, 0, 0, 0, 10, 0, -1, 0, -0.309, -0.9511, 0, 0, 0, 10, 0.309, -0.9511, 0, 0, -1, 0, 0, 0, 10, 0.5878, -0.809, 0, 0.309, -0.9511, 0, 0, 0, 10, 0.809, -0.5878, 0, 0.5878, -0.809, 0, 0, 0, 10, 0.9511, -0.309, 0, 0.809, -0.5878, 0, 0, 0, 10, 1, 0, 0, 0.9511, -0.309, 0, 0.9511, 0.309, 0, 0.9511, -0.309, 0, 1, 0, 0, 0.9511, 0.309, 0, 0.809, -0.5878, 0, 0.9511, -0.309, 0, 0.809, 0.5878, 0, 0.809, -0.5878, 0, 0.9511, 0.309, 0, 0.809, 0.5878, 0, 0.5878, -0.809, 0, 0.809, -0.5878, 0, 0.5878, 0.809, 0, 0.5878, -0.809, 0, 0.809, 0.5878, 0, 0.5878, 0.809, 0, 0.309, -0.9511, 0, 0.5878, -0.809, 0, 0.309, 0.9511, 0, 0.309, -0.9511, 0, 0.5878, 0.809, 0, 0.309, 0.9511, 0, 0, -1, 0, 0.309, -0.9511, 0, 0, 1, 0, 0, -1, 0, 0.309, 0.9511, 0, 0, 1, 0, -0.309, -0.9511, 0, 0, -1, 0, -0.309, 0.9511, 0, -0.309, -0.9511, 0, 0, 1, 0, -0.309, 0.9511, 0, -0.5878, -0.809, 0, -0.309, -0.9511, 0, -0.5878, 0.809, 0, -0.5878, -0.809, 0, -0.309, 0.9511, 0, -0.5878, 0.809, 0, -0.809, -0.5878, 0, -0.5878, -0.809, 0, -0.809, 0.5878, 0, -0.809, -0.5878, 0, -0.5878, 0.809, 0, -0.809, 0.5878, 0, -0.9511, -0.309, 0, -0.809, -0.5878, 0, -0.9511, 0.309, 0, -0.9511, -0.309, 0, -0.809, 0.5878, 0, -0.9511, -0.309, 0, -0.9511, 0.309, 0, -1, 0, 0 )
|
|
@ -1,6 +1,7 @@
|
||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=4 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Scripts/Player.gd" type="Script" id=1]
|
[ext_resource path="res://Scripts/Player.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://Models/cone-collision.tres" type="Shape" id=2]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape" id=1]
|
[sub_resource type="CapsuleShape" id=1]
|
||||||
radius = 0.15
|
radius = 0.15
|
||||||
|
@ -20,3 +21,11 @@ transform = Transform( 2.65431e-15, 1.62921e-08, 0.1, 0.1, -1.62921e-08, 0, 1.62
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.769, 0 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.769, 0 )
|
||||||
enabled = true
|
enabled = true
|
||||||
cast_to = Vector3( 0, 500, 0 )
|
cast_to = Vector3( 0, 500, 0 )
|
||||||
|
|
||||||
|
[node name="Cone" type="Area" parent="GunContainer"]
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="GunContainer/Cone"]
|
||||||
|
transform = Transform( 25, 0, 1.81899e-12, 4.54747e-13, -4.07302e-06, -100, 5.42101e-20, 25, -1.62921e-05, -1.49012e-08, 1000, -1.33014e-11 )
|
||||||
|
shape = ExtResource( 2 )
|
||||||
|
[connection signal="body_entered" from="GunContainer/Cone" to="." method="_on_player_enter_firing_arc"]
|
||||||
|
[connection signal="body_exited" from="GunContainer/Cone" to="." method="_on_player_exit_firing_arc"]
|
||||||
|
|
|
@ -15,4 +15,5 @@ __meta__ = {
|
||||||
|
|
||||||
[node name="ExitTimer" type="Timer" parent="."]
|
[node name="ExitTimer" type="Timer" parent="."]
|
||||||
one_shot = true
|
one_shot = true
|
||||||
|
|
||||||
[connection signal="timeout" from="ExitTimer" to="." method="end_game"]
|
[connection signal="timeout" from="ExitTimer" to="." method="end_game"]
|
||||||
|
|
|
@ -36,10 +36,12 @@ func _process(delta : float) -> void:
|
||||||
player.calculate_plans()
|
player.calculate_plans()
|
||||||
|
|
||||||
func generate_translation() -> Vector3:
|
func generate_translation() -> Vector3:
|
||||||
return Vector3(rand_range(-5,5),rand_range(-5,5),rand_range(-5,5))
|
#return Vector3(rand_range(-5,5),rand_range(-5,5),rand_range(-5,5))
|
||||||
|
return Vector3(0,0,rand_range(-5,5))
|
||||||
|
|
||||||
func generate_rotation() -> Vector3:
|
func generate_rotation() -> Vector3:
|
||||||
return Vector3(rand_range(-1,1),rand_range(-1,1),rand_range(-1,1)).normalized()
|
#return Vector3(rand_range(-1,1),rand_range(-1,1),rand_range(-1,1)).normalized()
|
||||||
|
return Vector3(0,0,1)
|
||||||
|
|
||||||
func play_full_plans():
|
func play_full_plans():
|
||||||
for player in players.values():
|
for player in players.values():
|
||||||
|
|
|
@ -14,6 +14,8 @@ var weapons_plan : Plan = Plan.new()
|
||||||
|
|
||||||
var is_ready : bool = false
|
var is_ready : bool = false
|
||||||
var running_plan : bool = false
|
var running_plan : bool = false
|
||||||
|
var was_running_plan : bool = false
|
||||||
|
var using_full_plan : bool = false
|
||||||
var plan_time : float = 0.0
|
var plan_time : float = 0.0
|
||||||
|
|
||||||
var health : float = 100.0
|
var health : float = 100.0
|
||||||
|
@ -38,9 +40,10 @@ var end_linear_velocity : Vector3 = Vector3.ZERO
|
||||||
var end_rotational_velocity : Vector3 = Vector3.ZERO
|
var end_rotational_velocity : Vector3 = Vector3.ZERO
|
||||||
var end_health : float = 100.0
|
var end_health : float = 100.0
|
||||||
var end_energy : float = 100.0
|
var end_energy : float = 100.0
|
||||||
|
|
||||||
var energy : float = 100.0
|
var energy : float = 100.0
|
||||||
|
|
||||||
|
var players_in_firing_arc = []
|
||||||
|
|
||||||
func init():
|
func init():
|
||||||
last_rotation = get_rotation()
|
last_rotation = get_rotation()
|
||||||
last_translation = get_translation()
|
last_translation = get_translation()
|
||||||
|
@ -114,13 +117,29 @@ func _get_all_weapons_elements():
|
||||||
func _physics_process(delta : float) -> void:
|
func _physics_process(delta : float) -> void:
|
||||||
if !enable_physics:
|
if !enable_physics:
|
||||||
return
|
return
|
||||||
|
|
||||||
if !running_plan:
|
if !running_plan:
|
||||||
if waiting_for_completion:
|
if waiting_for_completion:
|
||||||
send_all_plans()
|
send_all_plans()
|
||||||
waiting_for_completion = false
|
waiting_for_completion = false
|
||||||
translation = last_translation
|
translation = last_translation
|
||||||
rotation = last_rotation
|
rotation = last_rotation
|
||||||
|
was_running_plan = false
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if !was_running_plan:
|
||||||
|
players_in_firing_arc = $GunContainer/Cone.get_overlapping_bodies()
|
||||||
|
if using_full_plan:
|
||||||
|
set_linear_velocity(initial_velocity)
|
||||||
|
set_angular_velocity(initial_rotational_velocity)
|
||||||
|
set_translation(initial_translation)
|
||||||
|
set_rotation(initial_rotation)
|
||||||
|
else:
|
||||||
|
set_linear_velocity(end_linear_velocity)
|
||||||
|
set_angular_velocity(end_rotational_velocity)
|
||||||
|
set_translation(end_translation)
|
||||||
|
set_rotation(end_rotation)
|
||||||
|
was_running_plan = true
|
||||||
var all_thrust_elements = _get_all_thrust_elements()
|
var all_thrust_elements = _get_all_thrust_elements()
|
||||||
var current_thrust_element : ThrustElement = _get_current_plan_element(all_thrust_elements)
|
var current_thrust_element : ThrustElement = _get_current_plan_element(all_thrust_elements)
|
||||||
if current_thrust_element == null:
|
if current_thrust_element == null:
|
||||||
|
@ -147,10 +166,19 @@ func _physics_process(delta : float) -> void:
|
||||||
plan_time += delta
|
plan_time += delta
|
||||||
|
|
||||||
func fire(delta : float, time : float) -> void:
|
func fire(delta : float, time : float) -> void:
|
||||||
|
var closest_enemy = null
|
||||||
|
var distance_of_closest = -1
|
||||||
|
for player in players_in_firing_arc:
|
||||||
|
if player.id == id or !player.is_alive:
|
||||||
|
continue
|
||||||
|
var player_distance : float = (player.translation - translation).length()
|
||||||
|
if distance_of_closest == -1 or player_distance < distance_of_closest:
|
||||||
|
closest_enemy = player
|
||||||
|
distance_of_closest = player_distance
|
||||||
|
|
||||||
energy -= delta * BASE_ENERGY_USAGE
|
energy -= delta * BASE_ENERGY_USAGE
|
||||||
if $GunContainer/RayCast.is_colliding():
|
if closest_enemy != null:
|
||||||
var target : RigidBody = $GunContainer/RayCast.get_collider()
|
closest_enemy.take_damage(BASE_DPS * delta, time)
|
||||||
target.take_damage(BASE_DPS * delta, time)
|
|
||||||
|
|
||||||
func take_damage(damage : float, time : float) -> void:
|
func take_damage(damage : float, time : float) -> void:
|
||||||
health -= damage
|
health -= damage
|
||||||
|
@ -159,6 +187,7 @@ func take_damage(damage : float, time : float) -> void:
|
||||||
|
|
||||||
func die(time : float) -> void:
|
func die(time : float) -> void:
|
||||||
is_alive = false
|
is_alive = false
|
||||||
|
$GunContainer/Cone.monitoring = false
|
||||||
if !has_died:
|
if !has_died:
|
||||||
if report_death_to_arena():
|
if report_death_to_arena():
|
||||||
finish_game()
|
finish_game()
|
||||||
|
@ -171,24 +200,20 @@ func play_all_plans():
|
||||||
get_parent().play_full_plans()
|
get_parent().play_full_plans()
|
||||||
|
|
||||||
func play_full_plan():
|
func play_full_plan():
|
||||||
set_linear_velocity(initial_velocity)
|
using_full_plan = true
|
||||||
set_angular_velocity(initial_rotational_velocity)
|
|
||||||
set_translation(initial_translation)
|
|
||||||
set_rotation(initial_rotation)
|
|
||||||
running_plan = true
|
running_plan = true
|
||||||
plan_time = 0.0
|
plan_time = 0.0
|
||||||
is_alive = true
|
is_alive = true
|
||||||
|
$GunContainer/Cone.monitoring = true
|
||||||
$CollisionShape.disabled = false
|
$CollisionShape.disabled = false
|
||||||
|
|
||||||
func play_last_plan():
|
func play_last_plan():
|
||||||
set_linear_velocity(end_linear_velocity)
|
using_full_plan = false
|
||||||
set_angular_velocity(end_rotational_velocity)
|
|
||||||
set_translation(end_translation)
|
|
||||||
set_rotation(end_rotation)
|
|
||||||
running_plan = true
|
running_plan = true
|
||||||
plan_time = 5 * turn_number
|
plan_time = 5 * turn_number
|
||||||
if !has_died:
|
if !has_died:
|
||||||
is_alive = true
|
is_alive = true
|
||||||
|
$GunContainer/Cone.monitoring = true
|
||||||
$CollisionShape.disabled = false
|
$CollisionShape.disabled = false
|
||||||
|
|
||||||
func calculate_plans():
|
func calculate_plans():
|
||||||
|
@ -209,3 +234,9 @@ func report_death_to_arena() -> bool:
|
||||||
|
|
||||||
func finish_game() -> void:
|
func finish_game() -> void:
|
||||||
get_parent().finish_game()
|
get_parent().finish_game()
|
||||||
|
|
||||||
|
func _on_player_enter_firing_arc(body):
|
||||||
|
players_in_firing_arc.append(body)
|
||||||
|
|
||||||
|
func _on_player_exit_firing_arc(body):
|
||||||
|
players_in_firing_arc.erase(body)
|
||||||
|
|
|
@ -44,6 +44,7 @@ config/icon="res://icon.png"
|
||||||
|
|
||||||
[physics]
|
[physics]
|
||||||
|
|
||||||
|
3d/physics_engine="GodotPhysics"
|
||||||
3d/default_gravity=0.0
|
3d/default_gravity=0.0
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
Loading…
Reference in New Issue