Added weapons systems
parent
256be6d741
commit
8b05248180
|
@ -9,6 +9,7 @@ panorama = ExtResource( 1 )
|
|||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
ambient_light_color = Color( 0.117647, 0.117647, 0.117647, 1 )
|
||||
ambient_light_energy = 10.16
|
||||
fog_sun_amount = 0.1
|
||||
ss_reflections_enabled = true
|
||||
glow_enabled = true
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=14 format=2]
|
||||
[gd_scene load_steps=17 format=2]
|
||||
|
||||
[ext_resource path="res://Scripts/Player.gd" type="Script" id=1]
|
||||
[ext_resource path="res://Models/Arrow.obj" type="ArrayMesh" id=2]
|
||||
|
@ -10,6 +10,9 @@
|
|||
[ext_resource path="res://Images/TurnEndBanner.png" type="Texture" id=8]
|
||||
[ext_resource path="res://Animations/TurnEndBanner.anim" type="Animation" id=9]
|
||||
[ext_resource path="res://Models/spaceship-gun.tscn" type="PackedScene" id=10]
|
||||
[ext_resource path="res://Images/BatteryBolt.png" type="Texture" id=11]
|
||||
[ext_resource path="res://Images/BatteryFilling.png" type="Texture" id=12]
|
||||
[ext_resource path="res://Images/BatteryBackground.png" type="Texture" id=13]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.15
|
||||
|
@ -438,6 +441,7 @@ anims/ShowEndTurnBanner = ExtResource( 9 )
|
|||
|
||||
[node name="GunContainer" type="Spatial" parent="."]
|
||||
transform = Transform( -4.37114e-09, 4.37114e-09, 0.1, 0.1, -4.37114e-09, 4.37114e-09, 4.37114e-09, 0.1, -4.37114e-09, 0, -0.0222926, 0.382747 )
|
||||
visible = false
|
||||
|
||||
[node name="spaceship-gun" parent="GunContainer" instance=ExtResource( 10 )]
|
||||
transform = Transform( 1, 0, 1.64203e-15, 0, 1, 0, 1.64203e-15, 0, 1, 4.47035e-08, 0.811224, -3.54597e-08 )
|
||||
|
@ -445,14 +449,91 @@ transform = Transform( 1, 0, 1.64203e-15, 0, 1, 0, 1.64203e-15, 0, 1, 4.47035e-0
|
|||
[node name="RayCast" type="RayCast" parent="GunContainer"]
|
||||
transform = Transform( 1, 0, 1.64203e-15, 0, 1, 0, 1.64203e-15, 0, 1, 7.45058e-08, 1.76881, -7.73171e-08 )
|
||||
enabled = true
|
||||
cast_to = Vector3( 0, 1, 0 )
|
||||
cast_to = Vector3( 0, 500, 0 )
|
||||
|
||||
[node name="CSGCylinder" type="CSGCylinder" parent="GunContainer/RayCast"]
|
||||
transform = Transform( 1, 0, 1.64203e-15, 0, 1, 0, 1.64203e-15, 0, 1, 7.45058e-08, 1.445, -6.3163e-08 )
|
||||
visible = false
|
||||
transform = Transform( 1, 0, 1.64203e-15, 0, 1, 0, 1.64203e-15, 0, 1, 0, 1, 0 )
|
||||
material_override = SubResource( 3 )
|
||||
radius = 0.09
|
||||
height = 2.0
|
||||
sides = 32
|
||||
|
||||
[node name="WeaponsPanel" type="Panel" parent="."]
|
||||
visible = false
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_top = -300.0
|
||||
margin_right = 300.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Background" type="TextureRect" parent="WeaponsPanel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_top = -75.0
|
||||
margin_right = 100.0
|
||||
margin_bottom = 75.0
|
||||
texture = ExtResource( 13 )
|
||||
expand = true
|
||||
|
||||
[node name="Filling" type="TextureRect" parent="WeaponsPanel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_top = -75.0
|
||||
margin_right = 100.0
|
||||
margin_bottom = 75.0
|
||||
texture = ExtResource( 12 )
|
||||
expand = true
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="FillingBlocker" type="ColorRect" parent="WeaponsPanel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = 14.0
|
||||
margin_top = -55.0
|
||||
margin_right = 87.0
|
||||
margin_bottom = -55.0
|
||||
color = Color( 0, 0, 0, 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Bolt" type="TextureRect" parent="WeaponsPanel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = 17.4106
|
||||
margin_top = -59.1193
|
||||
margin_right = 102.411
|
||||
margin_bottom = 72.8807
|
||||
texture = ExtResource( 11 )
|
||||
expand = true
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="WeaponsSwitch" type="CheckButton" parent="WeaponsPanel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -100.0
|
||||
margin_top = -40.0
|
||||
margin_right = -30.0
|
||||
margin_bottom = 40.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
[connection signal="value_changed" from="MainPanel/TimeBar" to="." method="_on_TimeBar_value_changed"]
|
||||
[connection signal="pressed" from="MainPanel/AddButton" to="." method="_on_AddButton_pressed"]
|
||||
[connection signal="pressed" from="MainPanel/PlayButton" to="." method="_on_PlayButton_pressed"]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
extends RigidBody
|
||||
|
||||
var thrust_plan : Plan = Plan.new()
|
||||
var weapons_plan : Plan = Plan.new()
|
||||
var is_local : bool = false
|
||||
var running_plan : bool = false
|
||||
var plan_time : float = 0.0
|
||||
|
@ -16,6 +17,8 @@ var round_time : float = 0.0
|
|||
var end_of_round_translation : Vector3 = get_translation()
|
||||
var end_of_round_rotation : Vector3 = get_rotation()
|
||||
|
||||
var time_of_death : float = -1
|
||||
|
||||
onready var arrow_obj : Spatial = $ArrowContainer
|
||||
onready var arrow_scale_obj : Spatial = $ArrowContainer/ArrowScaleContainer
|
||||
onready var rotate_arrow_obj : Spatial = $RotateArrowContainer
|
||||
|
@ -37,12 +40,18 @@ func init() -> void:
|
|||
if is_local:
|
||||
$MainPanel.visible = true
|
||||
$ThrustPanel.visible = true
|
||||
$WeaponsPanel.visible = true
|
||||
|
||||
func send_thrust_plan() -> void:
|
||||
for element in thrust_plan.current_elements:
|
||||
get_parent().get_parent().console_print('Sending data = ' + String(element.time) + String(element.linear_thrust) + String(element.rotational_thrust))
|
||||
rpc_id(1, "add_thrust_element", element.time, element.linear_thrust, element.rotational_thrust)
|
||||
|
||||
func send_weapons_plan() -> void:
|
||||
for element in weapons_plan.current_elements:
|
||||
get_parent().get_parent().console_print('Sending data = ' + String(element.time) + String(element.firing))
|
||||
rpc_id(1, "add_weapons_element", element.time, element.firing)
|
||||
|
||||
remote func add_thrust_element(time: float, linear_thrust : Vector3, rotational_thrust : Vector3) -> void:
|
||||
if is_local:
|
||||
return
|
||||
|
@ -53,8 +62,18 @@ remote func add_thrust_element(time: float, linear_thrust : Vector3, rotational_
|
|||
get_parent().get_parent().console_print(String(is_local) + ": Adding thrust element with the following params: time = " + String(time) + ", lin = " + String(linear_thrust) + ", rot = " + String(rotational_thrust) + ".")
|
||||
thrust_plan.add_element(element)
|
||||
|
||||
remote func r_end_turn() -> void:
|
||||
remote func add_weapons_element(time : float, firing : bool) -> void:
|
||||
if is_local:
|
||||
return
|
||||
var element : WeaponsElement = WeaponsElement.new()
|
||||
element.time = time
|
||||
element.firing = firing
|
||||
get_parent().get_parent().console_print(String(is_local) + ": Adding weapons element with the following params: time = " + String(time) + ", firing = " + String(firing))
|
||||
weapons_plan.add_element(element)
|
||||
|
||||
remote func r_end_turn(r_time_of_death : float) -> void:
|
||||
self._on_PlayButton_pressed()
|
||||
time_of_death = r_time_of_death
|
||||
if is_local:
|
||||
$MainPanel/EndTurnButton.disabled = false
|
||||
$MainPanel/TimeBar.value = 0
|
||||
|
@ -62,10 +81,11 @@ remote func r_end_turn() -> void:
|
|||
$TurnEndBanner/AnimationPlayer.play()
|
||||
return
|
||||
thrust_plan.new_turn()
|
||||
weapons_plan.new_turn()
|
||||
|
||||
func _on_TimeBar_value_changed(value : float) -> void:
|
||||
var min_time : float = thrust_plan.current_time()
|
||||
get_parent().get_parent().console_print(String(is_local) + ": Current plan time is " + String(min_time))
|
||||
#get_parent().get_parent().console_print(String(is_local) + ": Current plan time is " + String(min_time))
|
||||
if value <= min_time:
|
||||
$MainPanel/TimeBar.value = min_time
|
||||
|
||||
|
@ -78,18 +98,29 @@ func _on_AddButton_pressed() -> void:
|
|||
get_parent().get_parent().console_print(String(is_local) + ": Added thrust element with " + String(new_thrust_element.time) + String(new_thrust_element.rotational_thrust) + String(new_thrust_element.linear_thrust))
|
||||
else:
|
||||
get_parent().get_parent().console_print(String(is_local) + ": Failed to add thrust element")
|
||||
var new_weapons_element : WeaponsElement = WeaponsElement.new()
|
||||
new_weapons_element.firing = $WeaponsPanel/WeaponsSwitch.pressed
|
||||
new_weapons_element.time = $MainPanel/TimeBar.value - weapons_plan.current_time()
|
||||
if (weapons_plan.add_element(new_weapons_element)):
|
||||
get_parent().get_parent().console_print(String(is_local) + ": Added weapons element with " + String(new_weapons_element.firing))
|
||||
else:
|
||||
get_parent().get_parent().console_print(String(is_local) + ": Failed to add weapons element")
|
||||
|
||||
func _on_RemoveButton_pressed() -> void:
|
||||
thrust_plan.remove_last_element()
|
||||
weapons_plan.remove_last_element()
|
||||
|
||||
func _on_ClearButton_pressed() -> void:
|
||||
thrust_plan.remove_all_elements()
|
||||
weapons_plan.remove_all_elements()
|
||||
|
||||
func _on_EndTurnButton_pressed() -> void:
|
||||
$MainPanel/EndTurnButton.disabled = true
|
||||
send_thrust_plan()
|
||||
send_weapons_plan()
|
||||
rpc_id(1, "end_turn")
|
||||
thrust_plan.new_turn()
|
||||
weapons_plan.new_turn()
|
||||
round_time += 5
|
||||
# TODO: Add the rest functionality
|
||||
|
||||
|
@ -193,16 +224,32 @@ func _get_all_thrust_elements():
|
|||
all_elements.append(element)
|
||||
return all_elements
|
||||
|
||||
func _get_all_weapons_elements():
|
||||
var all_elements = []
|
||||
for element in weapons_plan.elements:
|
||||
all_elements.append(element)
|
||||
for element in weapons_plan.current_elements:
|
||||
all_elements.append(element)
|
||||
return all_elements
|
||||
|
||||
func _physics_process(delta : float) -> void:
|
||||
if !enable_physics:
|
||||
return
|
||||
if !running_plan:
|
||||
$GunContainer.visible = false
|
||||
arrow_obj.visible = true
|
||||
rotate_arrow_obj.visible = true
|
||||
disable_all_engine_particles()
|
||||
set_translation(last_translation)
|
||||
set_rotation(last_rotation)
|
||||
return
|
||||
|
||||
if time_of_death > 0 and plan_time > time_of_death:
|
||||
self.visible = false
|
||||
$CollisionShape.disabled = true
|
||||
else:
|
||||
self.visible = true
|
||||
$CollisionShape.disabled = false
|
||||
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:
|
||||
|
@ -215,6 +262,18 @@ func _physics_process(delta : float) -> void:
|
|||
add_central_force(self.transform.basis.xform(current_thrust_element.linear_thrust))
|
||||
add_torque(self.transform.basis.xform(current_thrust_element.rotational_thrust))
|
||||
update_engine_particles(current_thrust_element.linear_thrust, current_thrust_element.rotational_thrust)
|
||||
|
||||
var all_weapons_elements = _get_all_weapons_elements()
|
||||
var current_weapons_element : WeaponsElement = _get_current_plan_element(all_weapons_elements)
|
||||
if current_weapons_element == null:
|
||||
$GunContainer.visible = false
|
||||
running_plan = false
|
||||
return
|
||||
if current_weapons_element.firing:
|
||||
_fire_gun()
|
||||
else:
|
||||
$GunContainer.visible = false
|
||||
|
||||
plan_time += delta
|
||||
|
||||
func disable_all_engine_particles() -> void:
|
||||
|
@ -352,3 +411,21 @@ func play_full_plan():
|
|||
|
||||
func _on_PlayButton_pressed():
|
||||
play_all_plans()
|
||||
|
||||
func _update_battery_visuals(value : float):
|
||||
# Assume value is between 0 and 100
|
||||
$WeaponsPanel/FillingBlocker.margin_bottom = 65 - (value * 1.2)
|
||||
|
||||
func _update_laser(length : float):
|
||||
$GunContainer/RayCast/CSGCylinder.height = length
|
||||
$GunContainer/RayCast/CSGCylinder.translation = Vector3(0, length/2, 0)
|
||||
|
||||
func _fire_gun():
|
||||
$GunContainer.visible = true
|
||||
if $GunContainer/RayCast.is_colliding():
|
||||
var raycast_pos : Vector3 = $GunContainer/RayCast.global_transform.origin
|
||||
var target_pos : Vector3 = $GunContainer/RayCast.get_collision_point()
|
||||
var diff : Vector3 = raycast_pos - target_pos
|
||||
_update_laser(diff.length())
|
||||
else:
|
||||
_update_laser($GunContainer/RayCast.cast_to.y)
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
extends "res://Scripts/PlanElement.gd"
|
||||
class_name WeaponsElement
|
||||
|
||||
|
||||
var firing : bool = false
|
||||
|
||||
func sanity_check() -> bool:
|
||||
return true
|
||||
|
|
@ -23,11 +23,17 @@ _global_script_classes=[ {
|
|||
"class": "ThrustElement",
|
||||
"language": "GDScript",
|
||||
"path": "res://Scripts/ThrustElement.gd"
|
||||
}, {
|
||||
"base": "Reference",
|
||||
"class": "WeaponsElement",
|
||||
"language": "GDScript",
|
||||
"path": "res://Scripts/WeaponsElement.gd"
|
||||
} ]
|
||||
_global_script_class_icons={
|
||||
"Plan": "",
|
||||
"PlanElement": "",
|
||||
"ThrustElement": ""
|
||||
"ThrustElement": "",
|
||||
"WeaponsElement": ""
|
||||
}
|
||||
|
||||
[application]
|
||||
|
|
Loading…
Reference in New Issue