Changed targeting system to use cone
							parent
							
								
									9c3f4a8a26
								
							
						
					
					
						commit
						e9048bc663
					
				| 
						 | 
					@ -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