Fixed some rpc calls with the player
parent
b5a55ff3bd
commit
1e89282734
|
@ -1,6 +1,13 @@
|
||||||
[gd_scene load_steps=2 format=2]
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Scripts/Player.gd" type="Script" id=1]
|
[ext_resource path="res://Scripts/Player.gd" type="Script" id=1]
|
||||||
|
|
||||||
[node name="Player" type="Spatial"]
|
[sub_resource type="CapsuleShape" id=1]
|
||||||
|
radius = 0.1
|
||||||
|
height = 0.5
|
||||||
|
|
||||||
|
[node name="Player" type="RigidBody"]
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
|
@ -9,13 +9,26 @@ func init() -> void:
|
||||||
for player_id in get_parent().ids:
|
for player_id in get_parent().ids:
|
||||||
get_parent().console_print('Placing player with id: ' + String(player_id))
|
get_parent().console_print('Placing player with id: ' + String(player_id))
|
||||||
players[player_id] = Player.instance()
|
players[player_id] = Player.instance()
|
||||||
|
players[player_id].set_name('player' + String(player_id))
|
||||||
add_child(players[player_id])
|
add_child(players[player_id])
|
||||||
players[player_id].translation = generate_translation()
|
players[player_id].set_translation(generate_translation())
|
||||||
players[player_id].rotation = generate_rotation()
|
players[player_id].set_rotation(generate_rotation())
|
||||||
rpc('place_player', player_id, players[player_id].translation, players[player_id].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())
|
||||||
|
players[player_id].init()
|
||||||
|
|
||||||
|
func _process(delta : float) -> void:
|
||||||
|
var all_ready = true
|
||||||
|
for player in players.values():
|
||||||
|
if !player.is_ready:
|
||||||
|
all_ready = false
|
||||||
|
if all_ready:
|
||||||
|
for player in players.values():
|
||||||
|
player.is_ready = false
|
||||||
|
player.send_thrust_plan()
|
||||||
|
|
||||||
func generate_translation() -> Vector3:
|
func generate_translation() -> Vector3:
|
||||||
return Vector3(0,0,0)
|
return Vector3(rand_range(-10,10),rand_range(-10,10),rand_range(-10,10))
|
||||||
|
|
||||||
func generate_rotation() -> Vector3:
|
func generate_rotation() -> Vector3:
|
||||||
return Vector3(0,0,1)
|
return Vector3(rand_range(-1,1),rand_range(-1,1),rand_range(-1,1)).normalized()
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
class_name Plan
|
||||||
|
|
||||||
|
const TURN_TIME : float = 5.0
|
||||||
|
|
||||||
|
var elements = [] # All elements of the plan thus far
|
||||||
|
var current_elements = [] # All elements of the next 5 seconds
|
||||||
|
|
||||||
|
func current_time() -> float:
|
||||||
|
var total_time : float = 0.0
|
||||||
|
for current_element in current_elements:
|
||||||
|
var _element : PlanElement = (current_element as PlanElement)
|
||||||
|
total_time += _element.time
|
||||||
|
return total_time
|
||||||
|
|
||||||
|
func add_element(element : PlanElement) -> bool:
|
||||||
|
var total_time : float = self.current_time()
|
||||||
|
if total_time + element.time > TURN_TIME:
|
||||||
|
return false
|
||||||
|
current_elements.append(element)
|
||||||
|
return true
|
||||||
|
|
||||||
|
func remove_last_element() -> void:
|
||||||
|
current_elements.pop_back()
|
||||||
|
|
||||||
|
func remove_all_elements() -> void:
|
||||||
|
current_elements.clear()
|
||||||
|
|
||||||
|
func new_turn() -> void:
|
||||||
|
for current_element in current_elements:
|
||||||
|
elements.push_back(current_elements.pop_back())
|
||||||
|
|
||||||
|
func sanity_check() -> bool:
|
||||||
|
# Returns true if sane and false if insane
|
||||||
|
var total_time : float = 0.0
|
||||||
|
for current_element in current_elements:
|
||||||
|
var element : PlanElement = (current_element as PlanElement)
|
||||||
|
total_time += element.time
|
||||||
|
if !element.sanity_check():
|
||||||
|
return false
|
||||||
|
if total_time > TURN_TIME:
|
||||||
|
return false
|
||||||
|
return true
|
|
@ -0,0 +1,6 @@
|
||||||
|
class_name PlanElement
|
||||||
|
|
||||||
|
var time = 0.0
|
||||||
|
|
||||||
|
func sanity_check() -> bool:
|
||||||
|
return true # Needs to overridden in child classes
|
|
@ -1 +1,71 @@
|
||||||
extends Spatial
|
extends RigidBody
|
||||||
|
|
||||||
|
const TIME_STEP : float = 0.01
|
||||||
|
|
||||||
|
var thrust_plan : Plan = Plan.new()
|
||||||
|
var is_ready : bool = false
|
||||||
|
var running_plan : bool = false
|
||||||
|
var plan_time : float = 0.0
|
||||||
|
var last_translation : Vector3 = get_translation()
|
||||||
|
var last_rotation : Vector3 = get_rotation()
|
||||||
|
var enable_physics : bool = false
|
||||||
|
|
||||||
|
func init():
|
||||||
|
last_rotation = get_rotation()
|
||||||
|
last_translation = get_translation()
|
||||||
|
enable_physics = true
|
||||||
|
|
||||||
|
remote func add_thrust_element(time: float, linear_thrust : Vector3, rotational_thrust : Vector3) -> void:
|
||||||
|
var element : ThrustElement = ThrustElement.new()
|
||||||
|
element.time = time
|
||||||
|
element.linear_thrust = linear_thrust
|
||||||
|
element.rotational_thrust = rotational_thrust
|
||||||
|
get_parent().get_parent().console_print("Adding thrust element with the following params: time = " + String(time) + ", lin = " + String(linear_thrust) + ", rot = " + String(rotational_thrust) + ".")
|
||||||
|
thrust_plan.add_element(element)
|
||||||
|
|
||||||
|
|
||||||
|
func send_thrust_plan() -> void:
|
||||||
|
get_parent().get_parent().console_print("Sending plan...")
|
||||||
|
for element in thrust_plan.current_elements:
|
||||||
|
rpc("add_thrust_element", element.time, element.linear_thrust, element.rotational_thrust)
|
||||||
|
rpc("r_end_turn")
|
||||||
|
thrust_plan.new_turn()
|
||||||
|
|
||||||
|
|
||||||
|
remote func end_turn() -> void:
|
||||||
|
get_parent().get_parent().console_print("Setting ready status to true...")
|
||||||
|
is_ready = true
|
||||||
|
|
||||||
|
|
||||||
|
func _get_current_plan_element(all_elements) -> PlanElement:
|
||||||
|
var summed_time : float = 0.0
|
||||||
|
for element in all_elements:
|
||||||
|
summed_time += element.time
|
||||||
|
if summed_time > plan_time:
|
||||||
|
return element
|
||||||
|
return null
|
||||||
|
|
||||||
|
func _get_all_thrust_elements():
|
||||||
|
var all_elements = []
|
||||||
|
all_elements = thrust_plan.elements
|
||||||
|
for element in thrust_plan.current_elements:
|
||||||
|
all_elements.append(element)
|
||||||
|
return all_elements
|
||||||
|
|
||||||
|
func _physics_process(delta : float) -> void:
|
||||||
|
if !enable_physics:
|
||||||
|
return
|
||||||
|
if !running_plan:
|
||||||
|
translation = last_translation
|
||||||
|
rotation = last_rotation
|
||||||
|
return
|
||||||
|
var all_thrust_elements = _get_all_thrust_elements()
|
||||||
|
var current_thrust_element : ThrustElement = _get_current_plan_element(all_thrust_elements)
|
||||||
|
if current_thrust_element == null:
|
||||||
|
last_translation = translation
|
||||||
|
last_rotation = rotation
|
||||||
|
running_plan = false
|
||||||
|
return
|
||||||
|
add_central_force(self.transform.basis.xform(current_thrust_element.linear_thrust))
|
||||||
|
add_torque(self.transform.basis.xform(current_thrust_element.rotational_thrust))
|
||||||
|
plan_time += delta
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
const MAX_PLAYERS : int = 1
|
const MAX_PLAYERS : int = 2
|
||||||
const PORT : int = 9374
|
const PORT : int = 9374
|
||||||
|
|
||||||
const Arena = preload("res://Scenes/Arena.tscn")
|
const Arena = preload("res://Scenes/Arena.tscn")
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
extends "res://Scripts/PlanElement.gd"
|
||||||
|
class_name ThrustElement
|
||||||
|
|
||||||
|
const MAX_LINEAR_THRUST : int = 1
|
||||||
|
const MAX_ROTATIONAL_THRUST : int = 1
|
||||||
|
|
||||||
|
var linear_thrust : Vector3 = Vector3(0, 0, 0)
|
||||||
|
var rotational_thrust : Vector3 = Vector3(0, 0, 0)
|
||||||
|
|
||||||
|
func sanity_check() -> bool:
|
||||||
|
if linear_thrust.length() > MAX_LINEAR_THRUST:
|
||||||
|
return false
|
||||||
|
if rotational_thrust.length() > MAX_ROTATIONAL_THRUST:
|
||||||
|
return false
|
||||||
|
return true
|
||||||
|
|
|
@ -8,9 +8,26 @@
|
||||||
|
|
||||||
config_version=4
|
config_version=4
|
||||||
|
|
||||||
_global_script_classes=[ ]
|
_global_script_classes=[ {
|
||||||
|
"base": "Reference",
|
||||||
|
"class": "Plan",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://Scripts/Plan.gd"
|
||||||
|
}, {
|
||||||
|
"base": "Reference",
|
||||||
|
"class": "PlanElement",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://Scripts/PlanElement.gd"
|
||||||
|
}, {
|
||||||
|
"base": "Reference",
|
||||||
|
"class": "ThrustElement",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://Scripts/ThrustElement.gd"
|
||||||
|
} ]
|
||||||
_global_script_class_icons={
|
_global_script_class_icons={
|
||||||
|
"Plan": "",
|
||||||
|
"PlanElement": "",
|
||||||
|
"ThrustElement": ""
|
||||||
}
|
}
|
||||||
|
|
||||||
[application]
|
[application]
|
||||||
|
|
Loading…
Reference in New Issue