Allow for taking damage from overcharging and running away

pull/1/head
DAMO238 2020-09-27 16:25:46 +01:00
parent 40b23a78a0
commit 3bd16f4460
5 changed files with 82 additions and 13 deletions

View File

@ -3,17 +3,18 @@
[ext_resource path="res://Scripts/Player.gd" type="Script" id=1] [ext_resource path="res://Scripts/Player.gd" type="Script" id=1]
[sub_resource type="CapsuleShape" id=1] [sub_resource type="CapsuleShape" id=1]
radius = 0.1 radius = 0.15
height = 0.5 height = 0.6
[node name="Player" type="RigidBody"] [node name="Player" type="RigidBody"]
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="CollisionShape" type="CollisionShape" parent="."] [node name="CollisionShape" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, 0.519, 0, 0, 0, 1, 0, 0, -0.034 )
shape = SubResource( 1 ) shape = SubResource( 1 )
[node name="GunContainer" type="Spatial" parent="."] [node name="GunContainer" type="Spatial" parent="."]
transform = Transform( 2.65431e-15, 1.62921e-08, 0.1, 0.1, -1.62921e-08, 0, 1.62921e-08, 0.1, -1.62921e-08, 0, -0.22, 0.383 ) transform = Transform( 2.65431e-15, 1.62921e-08, 0.1, 0.1, -1.62921e-08, 0, 1.62921e-08, 0.1, -1.62921e-08, 0, -0.022, 0.383 )
[node name="RayCast" type="RayCast" parent="GunContainer"] [node name="RayCast" type="RayCast" parent="GunContainer"]
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 )

View File

@ -14,6 +14,8 @@ func init() -> void:
add_child(players[player_id]) add_child(players[player_id])
players[player_id].set_translation(generate_translation()) players[player_id].set_translation(generate_translation())
players[player_id].set_rotation(generate_rotation()) players[player_id].set_rotation(generate_rotation())
players[player_id].set_linear_velocity(Vector3.ZERO)
players[player_id].set_angular_velocity(Vector3.ZERO)
get_parent().console_print('Player Coords: ' + String(players[player_id].get_translation()) + String(players[player_id].get_rotation()) ) get_parent().console_print('Player Coords: ' + String(players[player_id].get_translation()) + String(players[player_id].get_rotation()) )
rpc('place_player', player_id, players[player_id].get_translation(), players[player_id].get_rotation()) rpc('place_player', player_id, players[player_id].get_translation(), players[player_id].get_rotation())
players[player_id].init() players[player_id].init()
@ -21,10 +23,11 @@ func init() -> void:
func _process(delta : float) -> void: func _process(delta : float) -> void:
var all_ready = true var all_ready = true
for player in players.values(): for player in players.values():
if !player.is_ready and player.is_alive: if !player.is_ready and !player.has_died:
all_ready = false all_ready = false
if all_ready: if all_ready:
for player in players.values(): for player in players.values():
if player.is_alive:
player.is_ready = false player.is_ready = false
player.calculate_plans() player.calculate_plans()

View File

@ -2,6 +2,10 @@ extends RigidBody
const TIME_STEP : float = 0.01 const TIME_STEP : float = 0.01
const BASE_DPS : float = 300.0 const BASE_DPS : float = 300.0
const BASE_ENERGY_USAGE : float = 75.0
const BASE_ENERGY_REGEN : float = 150.0
const BASE_OVERCHARGE_DAMAGE : float = 5.0
const OOB_DAMAGE : float = 100.0
var thrust_plan : Plan = Plan.new() var thrust_plan : Plan = Plan.new()
var weapons_plan : Plan = Plan.new() var weapons_plan : Plan = Plan.new()
@ -13,6 +17,9 @@ var plan_time : float = 0.0
var health : float = 100.0 var health : float = 100.0
var is_alive : bool = true var is_alive : bool = true
var time_of_death : float = -1 var time_of_death : float = -1
var has_died : bool = false
var turn_number : int = 0
var initial_translation : Vector3 = get_translation() var initial_translation : Vector3 = get_translation()
var initial_rotation : Vector3 = get_rotation() var initial_rotation : Vector3 = get_rotation()
@ -23,6 +30,13 @@ var last_rotation : Vector3 = get_rotation()
var enable_physics : bool = false var enable_physics : bool = false
var waiting_for_completion : bool = false var waiting_for_completion : bool = false
var end_translation : Vector3 = Vector3.ZERO
var end_rotation : Vector3 = Vector3.ZERO
var end_linear_velocity : Vector3 = Vector3.ZERO
var end_rotational_velocity : Vector3 = Vector3.ZERO
var energy : float = 100.0
func init(): func init():
last_rotation = get_rotation() last_rotation = get_rotation()
last_translation = get_translation() last_translation = get_translation()
@ -53,7 +67,13 @@ func send_all_plans() -> void:
for element in weapons_plan.current_elements: for element in weapons_plan.current_elements:
rpc("add_weapons_element", element.time, element.firing) rpc("add_weapons_element", element.time, element.firing)
get_parent().get_parent().console_print("Time of death is " + String(time_of_death) + " with health " + String(health) + ".") get_parent().get_parent().console_print("Time of death is " + String(time_of_death) + " with health " + String(health) + ".")
rpc("r_end_turn", time_of_death) end_translation = self.translation
end_rotation = self.rotation
end_linear_velocity = self.linear_velocity
end_rotational_velocity = self.angular_velocity
get_parent().get_parent().console_print("Starting parameters are: linear velocity = " + String(end_linear_velocity) + ", rotational_velocity = " + String(end_rotational_velocity) + ", position = " + String(end_translation) + ", rotation = " + String(end_rotation))
rpc("r_end_turn", time_of_death, end_translation, end_rotation, end_linear_velocity, end_rotational_velocity)
turn_number += 1
thrust_plan.new_turn() thrust_plan.new_turn()
weapons_plan.new_turn() weapons_plan.new_turn()
@ -111,21 +131,26 @@ func _physics_process(delta : float) -> void:
return return
if current_weapons_element.firing and is_alive: if current_weapons_element.firing and is_alive:
fire(delta, plan_time) fire(delta, plan_time)
elif energy < 100:
energy += BASE_ENERGY_REGEN * delta
calculate_other_damage(delta, plan_time)
plan_time += delta plan_time += delta
func fire(delta : float, time : float) -> void: func fire(delta : float, time : float) -> void:
energy -= delta * BASE_ENERGY_USAGE
if $GunContainer/RayCast.is_colliding(): if $GunContainer/RayCast.is_colliding():
var target : RigidBody = $GunContainer/RayCast.get_collider() var target : RigidBody = $GunContainer/RayCast.get_collider()
target.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:
get_parent().get_parent().console_print("tmp")
health -= damage health -= damage
if health < 0: if health < 0 and is_alive:
self.die(time) self.die(time)
func die(time : float) -> void: func die(time : float) -> void:
has_died = true
is_alive = false is_alive = false
$CollisionShape.disabled = true $CollisionShape.disabled = true
time_of_death = time time_of_death = time
@ -143,6 +168,26 @@ func play_full_plan():
is_alive = true is_alive = true
$CollisionShape.disabled = false $CollisionShape.disabled = false
func play_last_plan():
set_linear_velocity(end_linear_velocity)
set_angular_velocity(end_rotational_velocity)
set_translation(end_translation)
set_rotation(end_rotation)
running_plan = true
plan_time = 5 * turn_number
if !has_died:
is_alive = true
$CollisionShape.disabled = false
func calculate_plans(): func calculate_plans():
if turn_number == 0:
play_full_plan() play_full_plan()
else:
play_last_plan()
waiting_for_completion = true waiting_for_completion = true
func calculate_other_damage(delta : float, time : float):
if (translation.length_squared() > 100):
take_damage(OOB_DAMAGE * delta, time)
if energy < 0:
take_damage(-energy * BASE_OVERCHARGE_DAMAGE * delta, time)

View File

@ -10,6 +10,8 @@ var peer : NetworkedMultiplayerENet = null
var ids = [] var ids = []
var console_output : TextEdit = null var console_output : TextEdit = null
var ready_ids = [] var ready_ids = []
var name_dict = {}
var color_dict = {}
func _ready() -> void: func _ready() -> void:
peer = NetworkedMultiplayerENet.new() peer = NetworkedMultiplayerENet.new()
@ -53,6 +55,20 @@ func start_game() -> void:
add_child(arena) add_child(arena)
arena.init() arena.init()
console_print('Starting Game...') console_print('Starting Game...')
# Called every frame. 'delta' is the elapsed time since the previous frame. send_name_dict()
#func _process(delta): send_color_dict()
# pass
func send_name_dict() -> void:
for element in name_dict.keys():
rpc("add_name_to_dict", element, name_dict[element])
remote func set_display_name(id : int, display_name : String) -> void:
name_dict[id] = display_name
func send_color_dict() -> void:
for element in color_dict.keys():
rpc("add_color_to_dict", element, color_dict[element])
remote func set_player_color(id : int, color : Color) -> void:
console_print("Setting color of " + String(id) + " to " + String(color))
color_dict[id] = color

View File

@ -42,6 +42,10 @@ config/name="Server"
run/main_scene="res://Scenes/RootNode.tscn" run/main_scene="res://Scenes/RootNode.tscn"
config/icon="res://icon.png" config/icon="res://icon.png"
[physics]
3d/default_gravity=0.0
[rendering] [rendering]
environment/default_environment="res://default_env.tres" environment/default_environment="res://default_env.tres"