Engines now suck energy juice. Also you can go places. Also readme and stuff

This commit is contained in:
Hamcha 2020-07-14 23:28:13 +02:00
parent 5ca3c191cd
commit 5316affe0e
Signed by: hamcha
GPG key ID: 41467804B19A3315
24 changed files with 427 additions and 109 deletions

View file

@ -95,6 +95,9 @@ func _force_close_ui():
if open: if open:
open = false open = false
$UIAnimation.play("fadeout") $UIAnimation.play("fadeout")
match computer_type:
ComputerType.ShipCommand:
$Control/ControlComp.force_close()
func _power_status_changed(powered: bool) -> void: func _power_status_changed(powered: bool) -> void:
activationRange.visible = powered activationRange.visible = powered

View file

@ -165,10 +165,10 @@ z_index = 999
[node name="ControlComp" parent="Control" instance=ExtResource( 4 )] [node name="ControlComp" parent="Control" instance=ExtResource( 4 )]
visible = false visible = false
margin_left = -42.0 margin_left = -47.0
margin_top = -58.0 margin_top = -81.0
margin_right = 193.0 margin_right = 208.0
margin_bottom = 47.0 margin_bottom = 66.0
rect_scale = Vector2( 0.5, 0.5 ) rect_scale = Vector2( 0.5, 0.5 )
[node name="ActivationRange" type="Area2D" parent="."] [node name="ActivationRange" type="Area2D" parent="."]

View file

@ -3,13 +3,26 @@ extends Control
onready var scene = $"/root/scene" as GameInstance onready var scene = $"/root/scene" as GameInstance
func _physics_process(_delta): func _physics_process(_delta):
var speed_str = str(round(scene.world.map.current_ship_speed)) + " u/s" var speed_str = str(round(scene.world.map.current_ship_speed * 10000)) + " u/s"
$Container/VelocityBox/HBoxContainer3/CurrentSpeed.text = speed_str $Margin/Container/VelocityBox/HBoxContainer3/CurrentSpeed.text = speed_str
var dir_str = str(round(rad2deg(scene.world.map.current_ship_direction))) + " deg" var dir_str = str(round(rad2deg(scene.world.map.current_ship_direction))) + " deg"
$Container/VelocityBox/HBoxContainer2/CurrentDirection.text = dir_str $Margin/Container/VelocityBox/HBoxContainer2/CurrentDirection.text = dir_str
var current_position_str = Coordinates.as_string(scene.world.map.current_ship_position, true)
$Margin/Container/VelocityBox/HBoxContainer4/CurrentPosition.text = current_position_str
var current_target_str = scene.world.map.current_ship_target
if current_target_str == null:
$Margin/Container/VelocityBox/HBoxContainer/CurrentTarget.text = "None"
else:
$Margin/Container/VelocityBox/HBoxContainer/CurrentTarget.text = Coordinates.as_string(current_target_str, true)
func _ship_velocity_changed(value): func _ship_velocity_changed(value):
scene.process_command(UICommand.new(UICommand.CommandType.SetShipSpeed, [value])) scene.rpc("process_command", UICommand.new(UICommand.CommandType.SetShipSpeed, [value]))
func _ship_direction_changed(value): func _ship_direction_changed(value):
scene.process_command(UICommand.new(UICommand.CommandType.SetShipDirection, [deg2rad(value)])) scene.rpc("process_command", UICommand.new(UICommand.CommandType.SetShipDirection, [deg2rad(value)]))
func _map_button_pressed():
scene.ui.open_map_popup()
func force_close():
scene.ui.close_map_popup()

View file

@ -7,10 +7,12 @@
[node name="ControlComp" type="Control"] [node name="ControlComp" type="Control"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_left = -121.0 margin_left = -157.0
margin_top = -150.0 margin_top = -150.0
margin_right = 121.0 margin_right = 156.0
margin_bottom = -20.0 margin_bottom = -20.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1 mouse_filter = 1
script = ExtResource( 1 ) script = ExtResource( 1 )
__meta__ = { __meta__ = {
@ -48,25 +50,37 @@ __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="Container" type="VBoxContainer" parent="."] [node name="Margin" type="MarginContainer" parent="."]
material = ExtResource( 4 )
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
margin_left = 10.0 margin_left = 10.0
margin_top = 10.0 margin_top = 10.0
margin_right = -10.0 margin_right = -10.0
margin_bottom = -10.0 margin_bottom = -10.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
custom_constants/separation = 20
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="VelocityBox" type="VBoxContainer" parent="Container"] [node name="Container" type="VBoxContainer" parent="Margin"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_right = 222.0 margin_right = 293.0
margin_bottom = 110.0 margin_bottom = 112.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
__meta__ = {
"_edit_use_anchors_": false
}
[node name="VelocityBox" type="VBoxContainer" parent="Margin/Container"]
material = ExtResource( 4 )
margin_right = 293.0
margin_bottom = 84.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
alignment = 1 alignment = 1
@ -74,16 +88,15 @@ __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="HBoxContainer" type="HBoxContainer" parent="Container/VelocityBox"] [node name="HBoxContainer" type="HBoxContainer" parent="Margin/Container/VelocityBox"]
margin_top = 13.0 margin_right = 293.0
margin_right = 222.0 margin_bottom = 18.0
margin_bottom = 31.0
custom_constants/separation = 10 custom_constants/separation = 10
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="ShipTarget" type="Label" parent="Container/VelocityBox/HBoxContainer"] [node name="ShipTarget" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_right = 98.0 margin_right = 98.0
margin_bottom = 18.0 margin_bottom = 18.0
@ -91,10 +104,10 @@ mouse_filter = 1
theme = ExtResource( 3 ) theme = ExtResource( 3 )
text = "Current target" text = "Current target"
[node name="CurrentTarget" type="Label" parent="Container/VelocityBox/HBoxContainer"] [node name="CurrentTarget" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_left = 108.0 margin_left = 108.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 18.0 margin_bottom = 18.0
mouse_filter = 1 mouse_filter = 1
size_flags_horizontal = 3 size_flags_horizontal = 3
@ -103,16 +116,16 @@ custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 )
text = "2A.01/10" text = "2A.01/10"
align = 2 align = 2
[node name="HBoxContainer4" type="HBoxContainer" parent="Container/VelocityBox"] [node name="HBoxContainer4" type="HBoxContainer" parent="Margin/Container/VelocityBox"]
margin_top = 35.0 margin_top = 22.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 53.0 margin_bottom = 40.0
custom_constants/separation = 10 custom_constants/separation = 10
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="ShipTarget" type="Label" parent="Container/VelocityBox/HBoxContainer4"] [node name="ShipTarget" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer4"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_right = 110.0 margin_right = 110.0
margin_bottom = 18.0 margin_bottom = 18.0
@ -120,10 +133,10 @@ mouse_filter = 1
theme = ExtResource( 3 ) theme = ExtResource( 3 )
text = "Current position" text = "Current position"
[node name="CurrentPosition" type="Label" parent="Container/VelocityBox/HBoxContainer4"] [node name="CurrentPosition" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer4"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_left = 120.0 margin_left = 120.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 18.0 margin_bottom = 18.0
mouse_filter = 1 mouse_filter = 1
size_flags_horizontal = 3 size_flags_horizontal = 3
@ -132,16 +145,16 @@ custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 )
text = "0A.00/00" text = "0A.00/00"
align = 2 align = 2
[node name="HBoxContainer3" type="HBoxContainer" parent="Container/VelocityBox"] [node name="HBoxContainer3" type="HBoxContainer" parent="Margin/Container/VelocityBox"]
margin_top = 57.0 margin_top = 44.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 75.0 margin_bottom = 62.0
custom_constants/separation = 10 custom_constants/separation = 10
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="ShipVelocityLabel" type="Label" parent="Container/VelocityBox/HBoxContainer3"] [node name="ShipVelocityLabel" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer3"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_right = 88.0 margin_right = 88.0
margin_bottom = 18.0 margin_bottom = 18.0
@ -149,10 +162,10 @@ mouse_filter = 1
theme = ExtResource( 3 ) theme = ExtResource( 3 )
text = "Ship velocity" text = "Ship velocity"
[node name="CurrentSpeed" type="Label" parent="Container/VelocityBox/HBoxContainer3"] [node name="CurrentSpeed" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer3"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_left = 98.0 margin_left = 98.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 18.0 margin_bottom = 18.0
mouse_filter = 1 mouse_filter = 1
size_flags_horizontal = 3 size_flags_horizontal = 3
@ -160,12 +173,12 @@ theme = ExtResource( 3 )
custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 ) custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 )
align = 2 align = 2
[node name="HBoxContainer2" type="HBoxContainer" parent="Container/VelocityBox"] [node name="HBoxContainer2" type="HBoxContainer" parent="Margin/Container/VelocityBox"]
margin_top = 79.0 margin_top = 66.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 97.0 margin_bottom = 84.0
[node name="ShipDirectionLabel" type="Label" parent="Container/VelocityBox/HBoxContainer2"] [node name="ShipDirectionLabel" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer2"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_right = 94.0 margin_right = 94.0
margin_bottom = 18.0 margin_bottom = 18.0
@ -173,13 +186,22 @@ mouse_filter = 1
theme = ExtResource( 3 ) theme = ExtResource( 3 )
text = "Ship direction" text = "Ship direction"
[node name="CurrentDirection" type="Label" parent="Container/VelocityBox/HBoxContainer2"] [node name="CurrentDirection" type="Label" parent="Margin/Container/VelocityBox/HBoxContainer2"]
material = ExtResource( 4 ) material = ExtResource( 4 )
margin_left = 98.0 margin_left = 98.0
margin_right = 222.0 margin_right = 293.0
margin_bottom = 18.0 margin_bottom = 18.0
mouse_filter = 1 mouse_filter = 1
size_flags_horizontal = 3 size_flags_horizontal = 3
theme = ExtResource( 3 ) theme = ExtResource( 3 )
custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 ) custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 )
align = 2 align = 2
[node name="Button" type="Button" parent="Margin/Container"]
material = ExtResource( 4 )
margin_top = 88.0
margin_right = 293.0
margin_bottom = 112.0
theme = ExtResource( 3 )
text = "Open map"
[connection signal="pressed" from="Margin/Container/Button" to="." method="_map_button_pressed"]

View file

@ -14,13 +14,13 @@ void fragment() {
if (col.r/col.g > 2.) { if (col.r/col.g > 2.) {
if (length(cable_color) == 0.) { if (length(cable_color) == 0.) {
if (UV.y > 0.6 && UV.y < 0.85) { if (UV.y > 0.6 && UV.y < 0.85) {
if (float(int(UV.x * 200.) % 12) > 4.) { if (mod(UV.x * 200., 12.) > 4.) {
col.rgb = vec3(0.94, 0.08, 0.08) * length(col.rgb); col.rgb = vec3(0.94, 0.08, 0.08) * length(col.rgb);
} else { } else {
col.rgb = vec3(0.04, 0.58, 0.98) * length(col.rgb); col.rgb = vec3(0.04, 0.58, 0.98) * length(col.rgb);
} }
} else { } else {
if (float(int(UV.y * 200.) % 12) > 4.) { if (mod(UV.y * 200., 12.) > 4.) {
col.rgb = vec3(0.94, 0.08, 0.08) * length(col.rgb); col.rgb = vec3(0.94, 0.08, 0.08) * length(col.rgb);
} else { } else {
col.rgb = vec3(0.04, 0.58, 0.98) * length(col.rgb); col.rgb = vec3(0.04, 0.58, 0.98) * length(col.rgb);

View file

@ -7,28 +7,30 @@ class_name GameObjectEngine
const LIGHT_STRENGTH_MULT = 0.002 const LIGHT_STRENGTH_MULT = 0.002
const MAX_ENERGY = 2 const MAX_ENERGY = 2
const MAX_USAGE = 1
enum Direction { LEFT, RIGHT, UP, DOWN } enum Direction { LEFT, RIGHT, UP, DOWN }
export(Direction) var direction = Direction.DOWN setget set_direction export(Direction) var direction = Direction.DOWN setget set_direction
onready var activationRange = $ActivationRange as ActivationRange onready var activationRange = $ActivationRange as ActivationRange
onready var manager = $PowerManager as PowerManager
export var strength = 1.0 setget set_strength export var strength = 1.0 setget set_strength
func _ready(): func _ready() -> void:
if not Engine.editor_hint: if not Engine.editor_hint:
activationRange.visible = true activationRange.visible = true
func set_direction(dir): func set_direction(dir) -> void:
direction = dir direction = dir
refresh_sprite() refresh_sprite()
func set_strength(val): func set_strength(val: float) -> void:
strength = val strength = val
$Light2D.energy = val * LIGHT_STRENGTH_MULT $Light2D.energy = val * LIGHT_STRENGTH_MULT
func refresh_sprite(): func refresh_sprite() -> void:
var rot = 0 var rot = 0
match direction: match direction:
Direction.DOWN: Direction.DOWN:
@ -45,7 +47,9 @@ func refresh_sprite():
rot = -PI/2 rot = -PI/2
$Light2D.rotation = rot $Light2D.rotation = rot
$ActivationRange.rotation = rot $ActivationRange.rotation = rot
func _physics_process(delta: float) -> void:
manager.power_usage = MAX_USAGE * strength
func _input_event(_viewport, event, _shape_idx): func _input_event(_viewport, event, _shape_idx):
if Engine.editor_hint: if Engine.editor_hint:

View file

@ -1,9 +1,10 @@
[gd_scene load_steps=7 format=2] [gd_scene load_steps=8 format=2]
[ext_resource path="res://Actors/Components/ActivationRange.gd" type="Script" id=1] [ext_resource path="res://Actors/Components/ActivationRange.gd" type="Script" id=1]
[ext_resource path="res://Actors/Objects/Engine/Engine.gd" type="Script" id=2] [ext_resource path="res://Actors/Objects/Engine/Engine.gd" type="Script" id=2]
[ext_resource path="res://Graphics/tgstation/engine-big.png" type="Texture" id=3] [ext_resource path="res://Graphics/tgstation/engine-big.png" type="Texture" id=3]
[ext_resource path="res://Graphics/light_shadow_light.png" type="Texture" id=4] [ext_resource path="res://Graphics/light_shadow_light.png" type="Texture" id=4]
[ext_resource path="res://Actors/Components/PowerManager.gd" type="Script" id=5]
[sub_resource type="RectangleShape2D" id=1] [sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 48, 48 ) extents = Vector2( 48, 48 )
@ -38,3 +39,6 @@ script = ExtResource( 1 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="ActivationRange"] [node name="CollisionShape2D" type="CollisionShape2D" parent="ActivationRange"]
position = Vector2( 48, 56 ) position = Vector2( 48, 56 )
shape = SubResource( 2 ) shape = SubResource( 2 )
[node name="PowerManager" type="Node" parent="."]
script = ExtResource( 5 )

View file

@ -2,7 +2,7 @@ extends StaticBody2D
class_name GameObjectPowerStorage class_name GameObjectPowerStorage
const MAX_CHARGE = 100000.0 const MAX_CHARGE = 5e5
var open = false var open = false
var attached = true var attached = true
@ -11,7 +11,7 @@ onready var manager = $PowerManager as PowerManager
export var current_charge = MAX_CHARGE setget set_charge export var current_charge = MAX_CHARGE setget set_charge
export var max_charge_rate = 0 setget set_max_charge export var max_charge_rate = 0 setget set_max_charge
export var max_discharge_rate = 200 setget set_max_discharge export var max_discharge_rate = 2000 setget set_max_discharge
var next_network_update = Multiplayer.SYSTEMS_UPDATE_INTERVAL var next_network_update = Multiplayer.SYSTEMS_UPDATE_INTERVAL
@ -20,6 +20,7 @@ func _ready() -> void:
activationRange.visible = true activationRange.visible = true
$Control/PowerUI.set_current_charge(current_charge) $Control/PowerUI.set_current_charge(current_charge)
$Control/PowerUI.set_max_charge(MAX_CHARGE) $Control/PowerUI.set_max_charge(MAX_CHARGE)
$Control/PowerUI.init_values(max_charge_rate, max_discharge_rate)
set_max_charge(max_charge_rate) set_max_charge(max_charge_rate)
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:

View file

@ -3,8 +3,12 @@ extends Control
onready var scene = $"/root/scene" as GameInstance onready var scene = $"/root/scene" as GameInstance
func set_current_charge(val): func set_current_charge(val):
$Container/CurrentBox/HBoxContainer/CurrentChargeLabel.text = "(" + str(round(val/10)/100) + "kJ)" $Container/CurrentBox/HBoxContainer/CurrentChargeLabel.text = "(" + str(round(val/10)/100) + "MJ)"
$Container/CurrentBox/ProgressBar.value = val $Container/CurrentBox/ProgressBar.value = val
func set_max_charge(val: float): func set_max_charge(val: float):
$Container/CurrentBox/ProgressBar.max_value = val $Container/CurrentBox/ProgressBar.max_value = val
func init_values(max_charge: float, max_discharge: float):
$Container/ChargeBox/SpinBox.value = int(max_charge)
$Container/ChargeBox/SpinBox2.value = int(max_discharge)

View file

@ -129,7 +129,7 @@ margin_bottom = 28.0
mouse_filter = 1 mouse_filter = 1
theme = ExtResource( 3 ) theme = ExtResource( 3 )
max_value = 200.0 max_value = 200.0
suffix = "W" suffix = "kW"
[node name="Discharge" type="Label" parent="Container/ChargeBox"] [node name="Discharge" type="Label" parent="Container/ChargeBox"]
material = ExtResource( 4 ) material = ExtResource( 4 )
@ -148,6 +148,6 @@ margin_right = 186.0
margin_bottom = 60.0 margin_bottom = 60.0
mouse_filter = 1 mouse_filter = 1
theme = ExtResource( 3 ) theme = ExtResource( 3 )
max_value = 200.0 max_value = 2000.0
value = 200.0 value = 200.0
suffix = "W" suffix = "kW"

30
Classes/Coordinates.gd Normal file
View file

@ -0,0 +1,30 @@
class_name Coordinates
static func as_string(coord: Vector2, include_subcoord: bool = false) -> String:
var x = floor(coord.x)
var y = floor(coord.y)
var sector_name = to_letter(int(x))
if y < 0:
sector_name += to_letter(int(y))
else:
sector_name += str(int(y))
if include_subcoord:
var x_sub = floor((coord.x - x) * 100)
var y_sub = floor((coord.y - y) * 100)
sector_name += "." + str(int(x_sub)).pad_zeros(2) + "/" + str(int(y_sub)).pad_zeros(2)
return sector_name
static func to_letter(num: int) -> String:
#var letters = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if num == 0:
return "Α"
elif num < 0:
letters = "αβγδεζηθικλμνξοπρστυφχψω"
num = abs(num)
var out = ""
var base = letters.length()
while num > 0:
out += letters.substr(num % base, 1)
num /= base
return out

5
LICENSE Normal file
View file

@ -0,0 +1,5 @@
Copyright 2020 Alessandro Gatti
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

16
README.md Normal file
View file

@ -0,0 +1,16 @@
# NSS Odyssey
**Warning: Toy project**
Co-op survival space sim, keep the NSS Odyssey alive and kicking while roaming in space.
Takes heavy inspiration (and for now, graphics) from Space Station 13 and FTL.
## Credits
- Title screen music: [Je suis un Phoenix by BlueMillenium](http://ccmixter.org/files/Bluemillenium/61325) (CC 3.0 BY-NC)
- Title screen background: [Star Nest by Pablo Roman Andrioli](https://www.shadertoy.com/view/XlfGRj) (MIT)
- All graphics in `Graphics/tgstation` is taken from [/tg/station](https://github.com/tgstation/tgstation) (CC 3.0 BY-SA)
- Uses the [GOTM API library](https://github.com/PlayGotm/GDGotm) from Macaroni Studios (MIT)
See `LICENSE` for code license (TL;DR it's [ISC](https://en.wikipedia.org/wiki/ISC_license))

View file

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=2]
[sub_resource type="GDScript" id=1]
script/source = "extends Node
func _ready():
$\"/root/Multiplayer\".gotm_mode = true # Faster startup
$\"/root/Multiplayer\".host()
"
[node name="Node" type="Node"]
script = SubResource( 1 )

View file

@ -10,9 +10,12 @@ onready var systems = $systems
onready var netgame = $"/root/Multiplayer" onready var netgame = $"/root/Multiplayer"
func _ready() -> void: func _ready() -> void:
randomize()
ui.connect("command", world, "process_command") ui.connect("command", world, "process_command")
if netgame.hosting: if netgame.hosting:
world.load_map(netgame.get_current_map()) world.load_map(netgame.get_current_map())
world.map.current_ship_position = Vector2(randf() * 1e4, randf() * 1e4)
world.map.current_ship_target = world.map.current_ship_position + Vector2(-3, 3)
rpc("spawn_player", 1) rpc("spawn_player", 1)
else: else:
world.load_map(GameWorld.Map.EMPTY) world.load_map(GameWorld.Map.EMPTY)
@ -49,13 +52,13 @@ master func ready_to_spawn() -> void:
rpc("spawn_player", id) rpc("spawn_player", id)
remotesync func spawn_player(id): remotesync func spawn_player(id):
print("must spawn ", id)
world.spawn_player(id, multiplayer.get_network_unique_id() == id) world.spawn_player(id, multiplayer.get_network_unique_id() == id)
func process_command(cmd: UICommand): remotesync func process_command(cmd: UICommand):
match cmd.cmd_type: pass
UICommand.CommandType.SetShipSpeed: # match cmd.cmd_type:
world.map.ship_speed = cmd.cmd_args[0] # UICommand.CommandType.SetShipSpeed:
UICommand.CommandType.SetShipDirection: # world.map.ship_speed = cmd.cmd_args[0]
world.map.ship_direction = cmd.cmd_args[0] # UICommand.CommandType.SetShipDirection:
# world.map.ship_direction = cmd.cmd_args[0]

View file

@ -131,7 +131,7 @@ func join(server):
var success = yield(server.join(), "completed") var success = yield(server.join(), "completed")
addr = Gotm.lobby.host.address addr = Gotm.lobby.host.address
else: else:
addr = server.addr addr = server.address
peer.create_client(addr, SERVER_PORT) peer.create_client(addr, SERVER_PORT)
get_tree().network_peer = peer get_tree().network_peer = peer

View file

@ -12,9 +12,20 @@ var current_ship_target = Vector2.ZERO
var current_ship_direction = 0 var current_ship_direction = 0
var current_ship_speed = 0 var current_ship_speed = 0
const SPEED_EASE = 0.5 puppet var pup_ship_position = Vector2.ZERO
const DIRECTION_EASE = 0.5 puppet var pup_ship_target = Vector2.ZERO
puppet var pup_ship_direction = 0
puppet var pup_ship_speed = 0
const MAX_ACCELERATION = 0.03
const DIRECTION_EASE = 0.4
const EPSILON = 0.01 const EPSILON = 0.01
const SCROLL_MULTIPLIER = 1e4
const ENGINE_MULTIPLIER = 5000
const MAX_SPEED = 0.2 # in Sectors/Second
const SLOW_SPEED = 0.02
const SLOW_SPEED_THRESHOLD = 0.2
const NO_SPEED_THRESHOLD = 0.1
const ProbeElectricity = preload("res://Actors/Systems/Electricity/ElectricProbe.tscn") const ProbeElectricity = preload("res://Actors/Systems/Electricity/ElectricProbe.tscn")
@ -41,23 +52,56 @@ func _ready():
# Electricity setup # Electricity setup
make_electric_probes($cables, "Wire") make_electric_probes($cables, "Wire")
# Set engines to expected power level
set_engine_strength(current_ship_speed)
func _process(delta: float): func _process(delta: float):
if Engine.editor_hint: if Engine.editor_hint:
return return
var current_speed_ratio = current_ship_speed / MAX_SPEED
# Ease ship speed/direction changes # Ease ship speed/direction changes
if abs(ship_direction - current_ship_direction) < EPSILON: if abs(ship_direction - current_ship_direction) < EPSILON:
current_ship_direction = ship_direction current_ship_direction = ship_direction
else: else:
current_ship_direction = lerp(current_ship_direction, ship_direction, delta * DIRECTION_EASE) current_ship_direction = lerp(current_ship_direction, ship_direction, delta * current_speed_ratio * DIRECTION_EASE)
if abs(ship_speed - current_ship_speed) < EPSILON: var speed_delta = ship_speed - current_ship_speed
if abs(speed_delta) < EPSILON:
current_ship_speed = ship_speed current_ship_speed = ship_speed
else: else:
current_ship_speed = lerp(current_ship_speed, ship_speed, delta * SPEED_EASE) current_ship_speed += MAX_ACCELERATION * max(0.1, 1-ease(current_speed_ratio, 0.6)) * delta * sign(speed_delta)
set_engine_strength(current_ship_speed) set_engine_strength(current_ship_speed * ENGINE_MULTIPLIER)
$deepspace.rotation = current_ship_direction-PI/2
$deepspace.region_rect.position += Vector2(sin(current_ship_direction), cos(current_ship_direction)) * current_ship_speed * delta $deepspace.rotation = -current_ship_direction-PI/2
$deepspace.region_rect.position += Vector2(-sin(current_ship_direction), cos(current_ship_direction)) * current_ship_speed * SCROLL_MULTIPLIER * delta
func _physics_process(delta):
if Engine.editor_hint:
return
if is_network_master():
var distance = current_ship_position.distance_to(current_ship_target)
if distance > NO_SPEED_THRESHOLD:
ship_direction = current_ship_target.angle_to_point(current_ship_position)
if distance < SLOW_SPEED_THRESHOLD:
ship_speed = SLOW_SPEED
elif current_ship_speed == 0 or distance / current_ship_speed > ease(current_ship_speed, 2.8)*4000:
ship_speed = MAX_SPEED
else:
ship_speed = 0
rset("pup_ship_direction", ship_direction)
rset("pup_ship_speed", ship_speed)
else:
ship_speed = 0
rset("pup_ship_speed", ship_speed)
if current_ship_speed > EPSILON:
current_ship_position += (Vector2.RIGHT * current_ship_speed * delta).rotated(current_ship_direction)
rset("pup_ship_position", current_ship_position)
else:
ship_direction = pup_ship_direction
ship_speed = pup_ship_speed
current_ship_position = pup_ship_position
# Serialization / Deserialization # Serialization / Deserialization
@ -82,21 +126,40 @@ func serialize() -> Dictionary:
"objects": objects, "objects": objects,
"lights": lights, "lights": lights,
"sockets": sockets, "sockets": sockets,
"pois": pois "pois": pois,
"ship": {
"position": current_ship_position,
"target": current_ship_target,
"set_speed": ship_speed,
"set_direction": ship_direction,
"speed": current_ship_speed,
"direction": current_ship_direction
}
} }
func deserialize(data: Dictionary) -> void: func deserialize(data: Dictionary) -> void:
# Create maps
for tilemap in data["tilemaps"]: for tilemap in data["tilemaps"]:
var tilemap_node = get_node(tilemap) as TileMap var tilemap_node = get_node(tilemap) as TileMap
for tile in data["tilemaps"][tilemap]: for tile in data["tilemaps"][tilemap]:
tilemap_node.set_cellv(tile[0], tile[1]) tilemap_node.set_cellv(tile[0], tile[1])
tilemap_node.update_bitmask_region() tilemap_node.update_bitmask_region()
tilemap_node.update_dirty_quadrants() tilemap_node.update_dirty_quadrants()
# Create objects
deserialize_children($engines, data["engines"]) deserialize_children($engines, data["engines"])
deserialize_children($objects, data["objects"]) deserialize_children($objects, data["objects"])
deserialize_children($lights, data["lights"]) deserialize_children($lights, data["lights"])
deserialize_children($pois, data["pois"]) deserialize_children($pois, data["pois"])
deserialize_children($sockets, data["sockets"]) deserialize_children($sockets, data["sockets"])
# Set ship parameters
current_ship_position = data["ship"]["position"]
current_ship_target = data["ship"]["target"]
ship_speed = data["ship"]["set_speed"]
ship_direction = data["ship"]["set_direction"]
current_ship_speed = data["ship"]["speed"]
current_ship_direction = data["ship"]["direction"]
# Run autotile conversions and generate occlusions # Run autotile conversions and generate occlusions
$walls.run_conversions() $walls.run_conversions()

View file

@ -30,6 +30,7 @@ color = Color( 0, 0, 0, 1 )
[node name="deepspace" type="Sprite" parent="."] [node name="deepspace" type="Sprite" parent="."]
material = SubResource( 1 ) material = SubResource( 1 )
position = Vector2( 208, 256 )
texture = ExtResource( 7 ) texture = ExtResource( 7 )
region_enabled = true region_enabled = true
region_rect = Rect2( 0, 0, 10000, 10000 ) region_rect = Rect2( 0, 0, 10000, 10000 )
@ -56,7 +57,7 @@ cell_size = Vector2( 32, 32 )
cell_quadrant_size = 32 cell_quadrant_size = 32
occluder_light_mask = -2147483647 occluder_light_mask = -2147483647
format = 1 format = 1
tile_data = PoolIntArray( -524284, 0, 131073, -393224, 0, 131073, -393217, 0, 131073, -458748, 0, 65539, -458744, 0, 131073, -327689, 0, 65537, -327688, 0, 2, -327687, 0, 1, -327686, 0, 65536, -327685, 0, 196608, -327681, 0, 65539, -393212, 0, 65539, -393208, 0, 65539, -262153, 0, 65539, -262151, 0, 65539, -262149, 0, 65538, -262148, 0, 65536, -262147, 0, 1, -262146, 0, 65536, -262145, 0, 2, -327680, 0, 65536, -327679, 0, 65536, -327678, 0, 1, -327677, 0, 65536, -327676, 0, 2, -327675, 0, 65536, -327674, 0, 65536, -327673, 0, 65536, -327672, 0, 131074, -196617, 0, 65539, -196615, 0, 131075, -196611, 0, 131075, -262142, 0, 65539, -262136, 0, 65539, -131081, 0, 65538, -131080, 0, 196608, -196606, 0, 65539, -196600, 0, 65539, -65544, 0, 131075, -131070, 0, 131075, -131066, 0, 65537, -131065, 0, 65536, -131064, 0, 196611, -65530, 0, 65539, 6, 0, 65539, 65542, 0, 65539, 131078, 0, 65539, 196614, 0, 65539, 327676, 0, 131073, 262146, 0, 131073, 262150, 0, 65539, 262154, 0, 131073, 262160, 0, 131073, 393212, 0, 65539, 327682, 0, 65539, 327686, 0, 65539, 327690, 0, 65539, 327696, 0, 65539, 458747, 0, 65537, 458748, 0, 2, 458749, 0, 65536, 458750, 0, 65536, 458751, 0, 65536, 393216, 0, 65536, 393217, 0, 65536, 393218, 0, 2, 393219, 0, 65536, 393220, 0, 65536, 393221, 0, 65536, 393222, 0, 196610, 393223, 0, 65536, 393224, 0, 65536, 393225, 0, 65536, 393226, 0, 2, 393227, 0, 65536, 393228, 0, 65536, 393229, 0, 65536, 393230, 0, 65536, 393231, 0, 65536, 393232, 0, 2, 393233, 0, 196608, 524283, 0, 65539, 458758, 0, 65539, 458769, 0, 65539, 589819, 0, 65539, 524294, 0, 65539, 524305, 0, 65539, 655355, 0, 65538, 655356, 0, 1, 655357, 0, 65536, 655358, 0, 65536, 655359, 0, 65536, 589824, 0, 65536, 589825, 0, 65536, 589826, 0, 1, 589827, 0, 65536, 589828, 0, 65536, 589829, 0, 65536, 589830, 0, 196610, 589831, 0, 65536, 589832, 0, 65536, 589833, 0, 65536, 589834, 0, 1, 589835, 0, 65536, 589836, 0, 65536, 589837, 0, 65536, 589838, 0, 65536, 589839, 0, 65536, 589840, 0, 1, 589841, 0, 196611, 720892, 0, 65539, 655362, 0, 65539, 655366, 0, 65539, 655370, 0, 65539, 655376, 0, 65539, 786428, 0, 131075, 720898, 0, 131075, 720902, 0, 65539, 720906, 0, 131075, 720912, 0, 131075, 786438, 0, 65539, 851974, 0, 65539, 917510, 0, 65539, 983046, 0, 65539, 1048582, 0, 65539, 1179640, 0, 131073, 1114113, 0, 131073, 1114118, 0, 65539, 1245176, 0, 65538, 1245177, 0, 65536, 1245178, 0, 65536, 1245179, 0, 65536, 1245180, 0, 65536, 1245181, 0, 65536, 1245182, 0, 65536, 1245183, 0, 65536, 1179648, 0, 65536, 1179649, 0, 2, 1179650, 0, 65536, 1179651, 0, 65536, 1179652, 0, 65536, 1179653, 0, 65536, 1179654, 0, 131074, 1245190, 0, 65539, 1310726, 0, 65539, 1441784, 0, 65537, 1441785, 0, 65536, 1441786, 0, 65536, 1441787, 0, 65536, 1441788, 0, 65536, 1441789, 0, 65536, 1441790, 0, 65536, 1441791, 0, 65536, 1376256, 0, 65536, 1376257, 0, 65536, 1376258, 0, 1, 1376259, 0, 65536, 1376260, 0, 65536, 1376261, 0, 65536, 1376262, 0, 2, 1376263, 0, 65536, 1376264, 0, 196608, 1507320, 0, 131075, 1441794, 0, 131075, 1441800, 0, 131075 ) tile_data = PoolIntArray( -524284, 0, 131073, -393224, 0, 131073, -393217, 0, 131073, -458748, 0, 65539, -458744, 0, 131073, -327689, 0, 65537, -327688, 0, 2, -327687, 0, 1, -327686, 0, 65536, -327685, 0, 196608, -327681, 0, 65539, -393212, 0, 65539, -393208, 0, 65539, -262153, 0, 65539, -262151, 0, 65539, -262149, 0, 65538, -262148, 0, 65536, -262147, 0, 1, -262146, 0, 65536, -262145, 0, 2, -327680, 0, 65536, -327679, 0, 65536, -327678, 0, 1, -327677, 0, 65536, -327676, 0, 2, -327675, 0, 65536, -327674, 0, 65536, -327673, 0, 65536, -327672, 0, 131074, -196617, 0, 65539, -196615, 0, 131075, -196611, 0, 131075, -262142, 0, 65539, -262136, 0, 65539, -131081, 0, 65538, -131080, 0, 196608, -196606, 0, 65539, -196600, 0, 65539, -65544, 0, 131075, -131070, 0, 131075, -131066, 0, 65537, -131065, 0, 65536, -131064, 0, 196611, -65530, 0, 65539, 6, 0, 65539, 65542, 0, 65539, 131078, 0, 65539, 196614, 0, 65539, 327673, 0, 131072, 327674, 0, 65536, 327675, 0, 65536, 327676, 0, 196608, 262146, 0, 131073, 262150, 0, 65539, 262154, 0, 131073, 262160, 0, 131073, 393212, 0, 65539, 327682, 0, 65539, 327686, 0, 65539, 327690, 0, 65539, 327696, 0, 65539, 458747, 0, 65537, 458748, 0, 2, 458749, 0, 65536, 458750, 0, 65536, 458751, 0, 65536, 393216, 0, 65536, 393217, 0, 65536, 393218, 0, 2, 393219, 0, 65536, 393220, 0, 65536, 393221, 0, 65536, 393222, 0, 196610, 393223, 0, 65536, 393224, 0, 65536, 393225, 0, 65536, 393226, 0, 2, 393227, 0, 65536, 393228, 0, 65536, 393229, 0, 65536, 393230, 0, 65536, 393231, 0, 65536, 393232, 0, 2, 393233, 0, 196608, 524276, 0, 131072, 524277, 0, 65536, 524278, 0, 65536, 524279, 0, 65536, 524280, 0, 65536, 524281, 0, 65536, 524282, 0, 65536, 524283, 0, 131074, 458758, 0, 65539, 458769, 0, 65539, 589819, 0, 65539, 524294, 0, 65539, 524305, 0, 65539, 655355, 0, 65538, 655356, 0, 1, 655357, 0, 65536, 655358, 0, 65536, 655359, 0, 65536, 589824, 0, 65536, 589825, 0, 65536, 589826, 0, 1, 589827, 0, 65536, 589828, 0, 65536, 589829, 0, 65536, 589830, 0, 196610, 589831, 0, 65536, 589832, 0, 65536, 589833, 0, 65536, 589834, 0, 1, 589835, 0, 65536, 589836, 0, 65536, 589837, 0, 65536, 589838, 0, 65536, 589839, 0, 65536, 589840, 0, 1, 589841, 0, 196611, 720892, 0, 65539, 655362, 0, 65539, 655366, 0, 65539, 655370, 0, 65539, 655376, 0, 65539, 786425, 0, 131072, 786426, 0, 65536, 786427, 0, 65536, 786428, 0, 196611, 720898, 0, 131075, 720902, 0, 65539, 720906, 0, 131075, 720912, 0, 131075, 786438, 0, 65539, 851974, 0, 65539, 917510, 0, 65539, 983046, 0, 65539, 1048582, 0, 65539, 1179640, 0, 131073, 1114113, 0, 131073, 1114118, 0, 65539, 1245176, 0, 65538, 1245177, 0, 65536, 1245178, 0, 65536, 1245179, 0, 65536, 1245180, 0, 65536, 1245181, 0, 65536, 1245182, 0, 65536, 1245183, 0, 65536, 1179648, 0, 65536, 1179649, 0, 2, 1179650, 0, 65536, 1179651, 0, 65536, 1179652, 0, 65536, 1179653, 0, 65536, 1179654, 0, 131074, 1245190, 0, 65539, 1310726, 0, 65539, 1441784, 0, 65537, 1441785, 0, 65536, 1441786, 0, 65536, 1441787, 0, 65536, 1441788, 0, 65536, 1441789, 0, 65536, 1441790, 0, 65536, 1441791, 0, 65536, 1376256, 0, 65536, 1376257, 0, 65536, 1376258, 0, 1, 1376259, 0, 65536, 1376260, 0, 65536, 1376261, 0, 65536, 1376262, 0, 2, 1376263, 0, 65536, 1376264, 0, 196608, 1507320, 0, 131075, 1441794, 0, 131075, 1441800, 0, 131075 )
[node name="floor" type="TileMap" parent="."] [node name="floor" type="TileMap" parent="."]
z_index = 3 z_index = 3
@ -455,6 +456,24 @@ direction = 3
connectionPaths = [ NodePath("../../lights/Lighttube23") ] connectionPaths = [ NodePath("../../lights/Lighttube23") ]
flow = 1 flow = 1
[node name="ElectricSocket46" parent="sockets" instance=ExtResource( 14 )]
position = Vector2( -384, 224 )
direction = 0
connectionPaths = [ NodePath("../../engines/Engine2") ]
flow = 1
[node name="ElectricSocket47" parent="sockets" instance=ExtResource( 14 )]
position = Vector2( -224, 128 )
direction = 0
connectionPaths = [ NodePath("../../engines/Engine3") ]
flow = 1
[node name="ElectricSocket48" parent="sockets" instance=ExtResource( 14 )]
position = Vector2( -224, 352 )
direction = 0
connectionPaths = [ NodePath("../../engines/Engine") ]
flow = 1
[node name="lights" type="Node2D" parent="."] [node name="lights" type="Node2D" parent="."]
modulate = Color( 0.980392, 0.980392, 0.980392, 1 ) modulate = Color( 0.980392, 0.980392, 0.980392, 1 )
z_index = 11 z_index = 11
@ -551,3 +570,4 @@ direction = 2
z_index = 999 z_index = 999
[node name="SpawnpointPlayer" parent="pois" instance=ExtResource( 15 )] [node name="SpawnpointPlayer" parent="pois" instance=ExtResource( 15 )]
position = Vector2( 560, 256 )

View file

@ -35,7 +35,7 @@ border_width_left = 4
border_width_top = 4 border_width_top = 4
border_width_right = 4 border_width_right = 4
border_width_bottom = 4 border_width_bottom = 4
border_color = Color( 0.27301, 0.417506, 0.984375, 0.392157 ) border_color = Color( 0.27451, 0.415686, 0.984314, 0.392157 )
corner_radius_top_left = 4 corner_radius_top_left = 4
corner_radius_top_right = 4 corner_radius_top_right = 4
corner_radius_bottom_right = 4 corner_radius_bottom_right = 4

View file

@ -16,3 +16,9 @@ func _server_option_chosen(id) -> void:
match id: match id:
ServerMenuItem.SERVER_INFO: ServerMenuItem.SERVER_INFO:
$ServerInfoPopup.popup_centered() $ServerInfoPopup.popup_centered()
func open_map_popup() -> void:
$MapPopup.popup_centered_ratio()
func close_map_popup() -> void:
$MapPopup.visible = false

View file

@ -33,20 +33,79 @@ size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
custom_constants/separation = 10 custom_constants/separation = 10
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
margin_right = 528.0 margin_right = 528.0
margin_bottom = 18.0 margin_bottom = 18.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer"]
margin_right = 104.0
margin_bottom = 18.0
text = "S01\\AR SYSTEM" text = "S01\\AR SYSTEM"
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/HBoxContainer"]
margin_left = 108.0
margin_right = 528.0
margin_bottom = 18.0
size_flags_horizontal = 3
alignment = 2
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Label2" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 330.0
margin_right = 368.0
margin_bottom = 18.0
text = "SPD: "
align = 2
__meta__ = {
"_edit_use_anchors_": false
}
[node name="CurrentSpeed" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 372.0
margin_right = 372.0
margin_bottom = 18.0
custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 )
align = 2
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Label3" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 376.0
margin_right = 416.0
margin_bottom = 18.0
text = "ANGL:"
align = 2
__meta__ = {
"_edit_use_anchors_": false
}
[node name="CurrentAngle" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer"]
margin_left = 420.0
margin_right = 420.0
margin_bottom = 18.0
custom_colors/font_color = Color( 0.494118, 0.52549, 0.737255, 1 )
align = 2
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Map" type="Control" parent="MarginContainer/VBoxContainer"] [node name="Map" type="Control" parent="MarginContainer/VBoxContainer"]
margin_top = 28.0 margin_top = 28.0
margin_bottom = 28.0 margin_right = 528.0
margin_bottom = 446.0
rect_clip_content = true rect_clip_content = true
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
script = ExtResource( 4 ) script = ExtResource( 4 )
background = ExtResource( 2 ) background = ExtResource( 2 )
font = ExtResource( 3 ) font = ExtResource( 3 )
[connection signal="about_to_show" from="." to="MarginContainer/VBoxContainer/Map" method="_reset_position"]

View file

@ -3,35 +3,94 @@ extends Control
export var cell_size = 100 export var cell_size = 100
export var bgzoom = 50 export var bgzoom = 50
const BORDER_WIDTH = 4
const BORDER_LENGTH = 30
const RADAR_EFFECT_DELAY = 1
export(Texture) var background export(Texture) var background
export(Font) var font export(Font) var font
var dragging = false var dragging = false
var origin = Vector2(randf() * -1e4, randf() * -1e4) var origin = Vector2.ZERO
var last_origin = origin var last_origin = origin
var last_mouse_pos = Vector2.ZERO var last_mouse_pos = Vector2.ZERO
var set_position = true
var radar_next_remaining = RADAR_EFFECT_DELAY
onready var scene = $"/root/scene"
onready var speed_text = $"../HBoxContainer/HBoxContainer/CurrentSpeed"
onready var dir_text = $"../HBoxContainer/HBoxContainer/CurrentAngle"
var last_pos = []
func _physics_process(delta):
radar_next_remaining -= delta
if radar_next_remaining < 0:
var current_position = scene.world.map.current_ship_position * 100
last_pos.append(current_position)
if last_pos.size() > 20:
last_pos.pop_front()
radar_next_remaining = RADAR_EFFECT_DELAY
if not visible:
return
speed_text.text = str(round(scene.world.map.current_ship_speed * 10000)) + " u/s"
dir_text.text = str(round(rad2deg(scene.world.map.current_ship_direction))) + " deg"
update()
func _draw(): func _draw():
var win_size = get_global_rect().size var win_size = get_global_rect().size
var current_position = scene.world.map.current_ship_position * 100
if set_position:
origin = current_position - win_size/2.0
last_origin = origin
if win_size.x > 0:
set_position = false
var cols = int(ceil(win_size.x/cell_size)) var cols = int(ceil(win_size.x/cell_size))
var rows = int(ceil(win_size.y/cell_size)) var rows = int(ceil(win_size.y/cell_size))
var xoffset = float(int(origin.x) % cell_size) var xoffset = float(int(origin.x) % cell_size)
var yoffset = float(int(origin.y) % cell_size) var yoffset = float(int(origin.y) % cell_size)
draw_texture_rect_region(background, Rect2(Vector2.ZERO, win_size), Rect2(-origin*bgzoom, win_size*bgzoom), Color(0.5,0.5,0.5,1)) draw_texture_rect_region(background, Rect2(Vector2.ZERO, win_size), Rect2(origin*bgzoom, win_size*bgzoom), Color(0.5,0.5,0.5,1))
for i in range(0, cols+1): for i in range(0, cols+1):
draw_line(Vector2(i * cell_size+xoffset, 0), Vector2(i * cell_size+xoffset, win_size.y), Color.white * 0.5) draw_line(Vector2(i * cell_size-xoffset, 0), Vector2(i * cell_size-xoffset, win_size.y), Color.white * 0.5)
for i in range(0, rows): for i in range(0, rows):
draw_line(Vector2(0, i * cell_size+yoffset), Vector2(win_size.x, i * cell_size+yoffset), Color.white * 0.5) draw_line(Vector2(0, i * cell_size-yoffset), Vector2(win_size.x, i * cell_size-yoffset), Color.white * 0.5)
for x in range(-1, cols+1): for x in range(-1, cols+1):
for y in range(-1, rows+1): for y in range(-1, rows+1):
var real_x = x - int(origin.x/cell_size) var real_x = x + int(origin.x/cell_size)
var real_y = y - int(origin.y/cell_size) var real_y = y + int(origin.y/cell_size)
var sector_name = to_letter(real_x) var sector_name = Coordinates.as_string(Vector2(real_x, real_y))
if real_y < 0: draw_string(font, Vector2(x * cell_size + 6 - xoffset, y * cell_size + 20 - yoffset), sector_name, Color(1,1,1,0.5))
sector_name += to_letter(real_y)
else: var viewport = Rect2(origin, win_size)
sector_name += str(real_y)
draw_string(font, Vector2(x * cell_size + 6 + xoffset, y * cell_size + 20 + yoffset), sector_name, Color(1,1,1,0.5)) var point_count = last_pos.size()
for pos_index in range(0, point_count):
draw_circle(last_pos[pos_index] - origin, 2, Color(1, 0, 0, pos_index*1.0/point_count))
draw_target(viewport, current_position, Color.red)
var current_target = scene.world.map.current_ship_target
if current_target != null:
var current_target_adj = current_target * 100
draw_target(viewport, current_target_adj, Color.green)
draw_line(current_position - origin, current_target_adj - origin, Color.darkcyan)
func draw_target(viewport: Rect2, position: Vector2, color: Color):
# Check if target is in range
if viewport.has_point(position):
draw_circle(position - viewport.position, 5, color)
else:
# Draw line pointing to target
var relative_pos = position - viewport.position
var clamped = Vector2(clamp(relative_pos.x, 0, viewport.size.x), clamp(relative_pos.y, 0, viewport.size.y))
if relative_pos.x < 0:
draw_line(Vector2(0, clamped.y-BORDER_LENGTH/2), Vector2(0, clamped.y+BORDER_LENGTH/2), color, BORDER_WIDTH)
elif relative_pos.x > viewport.size.x:
draw_line(Vector2(viewport.size.x, clamped.y-BORDER_LENGTH/2), Vector2(viewport.size.x, clamped.y+BORDER_LENGTH/2), color, BORDER_WIDTH)
if relative_pos.y < 0:
draw_line(Vector2(clamped.x-BORDER_LENGTH/2, 0), Vector2(clamped.x+BORDER_LENGTH/2, 0), color, BORDER_WIDTH)
elif relative_pos.y > viewport.size.y:
draw_line(Vector2(clamped.x-BORDER_LENGTH/2, viewport.size.y), Vector2(clamped.x+BORDER_LENGTH/2, viewport.size.y), color, BORDER_WIDTH)
func _input(event): func _input(event):
if event is InputEventMouseButton: if event is InputEventMouseButton:
@ -41,20 +100,8 @@ func _input(event):
update() update()
elif event is InputEventMouseMotion: elif event is InputEventMouseMotion:
if dragging: if dragging:
origin = last_origin + (event.position - last_mouse_pos) origin = last_origin - (event.position - last_mouse_pos)
update() update()
func to_letter(num: int) -> String: func _reset_position():
#var letters = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ" set_position = true
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if num == 0:
return "Α"
elif num < 0:
letters = "αβγδεζηθικλμνξοπρστυφχψω"
num = abs(num)
var out = ""
var base = letters.length()
while num > 0:
out += letters.substr(num % base, 1)
num /= base
return out

View file

@ -6,7 +6,7 @@ runnable=true
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter="Scenes/EditorOnly/*"
export_path="export/odyssey.exe" export_path="export/odyssey.exe"
patch_list=PoolStringArray( ) patch_list=PoolStringArray( )
script_export_mode=1 script_export_mode=1
@ -49,7 +49,7 @@ runnable=true
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter="Scenes/EditorOnly/*"
export_path="export/html/odyssey.html" export_path="export/html/odyssey.html"
patch_list=PoolStringArray( ) patch_list=PoolStringArray( )
script_export_mode=1 script_export_mode=1

View file

@ -14,6 +14,11 @@ _global_script_classes=[ {
"language": "GDScript", "language": "GDScript",
"path": "res://Actors/Components/ActivationRange.gd" "path": "res://Actors/Components/ActivationRange.gd"
}, { }, {
"base": "Reference",
"class": "Coordinates",
"language": "GDScript",
"path": "res://Classes/Coordinates.gd"
}, {
"base": "Area2D", "base": "Area2D",
"class": "ElectricSocket", "class": "ElectricSocket",
"language": "GDScript", "language": "GDScript",
@ -146,6 +151,7 @@ _global_script_classes=[ {
} ] } ]
_global_script_class_icons={ _global_script_class_icons={
"ActivationRange": "", "ActivationRange": "",
"Coordinates": "",
"ElectricSocket": "", "ElectricSocket": "",
"GameInstance": "", "GameInstance": "",
"GameMap": "", "GameMap": "",