Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions Courses/Range/range.gd
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ var last_display: Dictionary = {}

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
GlobalSettings.range_settings.camera_follow_mode.setting_changed.connect(set_camera_follow_mode)
set_camera_follow_mode(GlobalSettings.range_settings.camera_follow_mode.value)
GlobalSettingsManager.range_settings.camera_follow_mode.setting_changed.connect(set_camera_follow_mode)
set_camera_follow_mode(GlobalSettingsManager.range_settings.camera_follow_mode.value)
if ("/root/LaunchMonitorManager"):
var launch_monitor = get_node("/root/LaunchMonitorManager")
if not launch_monitor.hit_ball.is_connected(_on_launch_monitor_hit_ball):
Expand All @@ -42,7 +42,7 @@ func _on_tcp_client_hit_ball(data: Dictionary) -> void:
_update_ball_display()

# Re-enable camera follow if the setting is on
if GlobalSettings.range_settings.camera_follow_mode.value:
if GlobalSettingsManager.range_settings.camera_follow_mode.value:
set_camera_follow_mode(true)


Expand All @@ -64,13 +64,13 @@ func _on_golf_ball_rest(_ball_data) -> void:
_update_ball_display()

# Return camera to starting position if follow mode is enabled
if GlobalSettings.range_settings.camera_follow_mode.value:
var camera_reset_delay: float = GlobalSettings.range_settings.ball_reset_timer.value
if GlobalSettingsManager.range_settings.camera_follow_mode.value:
var camera_reset_delay: float = GlobalSettingsManager.range_settings.ball_reset_timer.value
await get_tree().create_timer(camera_reset_delay).timeout
reset_camera_to_start()

if GlobalSettings.range_settings.auto_ball_reset.value:
await get_tree().create_timer(GlobalSettings.range_settings.ball_reset_timer.value).timeout
if GlobalSettingsManager.range_settings.auto_ball_reset.value:
await get_tree().create_timer(GlobalSettingsManager.range_settings.ball_reset_timer.value).timeout
_reset_display_data()
$RangeUI.set_data(display_data)
var player = $Player
Expand Down Expand Up @@ -116,13 +116,13 @@ func _on_range_ui_hit_shot(data: Dictionary) -> void:
_update_ball_display()

# Re-enable camera follow if the setting is on
if GlobalSettings.range_settings.camera_follow_mode.value:
if GlobalSettingsManager.range_settings.camera_follow_mode.value:
set_camera_follow_mode(true)


func _on_player_manual_hit() -> void:
# Re-enable camera follow if the setting is on
if GlobalSettings.range_settings.camera_follow_mode.value:
if GlobalSettingsManager.range_settings.camera_follow_mode.value:
set_camera_follow_mode(true)


Expand All @@ -147,7 +147,7 @@ func _update_ball_display() -> void:
# Show distance continuously (updates during flight/rollout, final at rest)
var player = $Player
var show_distance: bool = true
display_data = ShotFormatter.format_ball_display(raw_ball_data, player, GlobalSettings.range_settings.range_units.value, show_distance, display_data)
display_data = ShotFormatter.format_ball_display(raw_ball_data, player, GlobalSettingsManager.range_settings.range_units.value, show_distance, display_data)
last_display = display_data.duplicate()
$RangeUI.set_data(display_data)

2 changes: 1 addition & 1 deletion Courses/Range/range.tscn
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[gd_scene format=3 uid="uid://b1idtxfp7eoke"]

[ext_resource type="Script" uid="uid://c4whkfuiysonu" path="res://Courses/Range/range.gd" id="1_sunpe"]
[ext_resource type="Script" uid="uid://bg5tbfjpq3flx" path="res://addons/launch_monitors/common/tcp_server/TcpServer.cs" id="2_d1a0v"]
[ext_resource type="Script" uid="uid://bg5tbfjpq3flx" path="res://addons/open-lm-connector/common/tcp_server/TcpServer.cs" id="2_d1a0v"]
[ext_resource type="PackedScene" uid="uid://w55fmvo7ly8g" path="res://Player/player.tscn" id="3_4jr3s"]
[ext_resource type="PackedScene" uid="uid://da1vsfwmbk8vw" path="res://UI/range_ui.tscn" id="4_d1a0v"]
[ext_resource type="Texture2D" uid="uid://btxo07ji1qkds" path="res://Courses/Environments/grassy-meadow1-bl/grassy-meadow1_alb_ht.png" id="5_6rpr1"]
Expand Down
2 changes: 1 addition & 1 deletion Courses/UserCourses/Airways/course.tscn
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[gd_scene format=3 uid="uid://ecp4h3om36dt"]

[ext_resource type="Script" uid="uid://c4whkfuiysonu" path="res://Courses/UserCourses/Airways/course.gd" id="1_sunpe"]
[ext_resource type="Script" uid="uid://bg5tbfjpq3flx" path="res://addons/launch_monitors/common/tcp_server/TcpServer.cs" id="2_d1a0v"]
[ext_resource type="Script" uid="uid://bg5tbfjpq3flx" path="res://addons/open-lm-connector/common/tcp_server/TcpServer.cs" id="2_d1a0v"]
[ext_resource type="PackedScene" uid="uid://w55fmvo7ly8g" path="res://Player/player.tscn" id="3_4jr3s"]
[ext_resource type="PackedScene" uid="uid://da1vsfwmbk8vw" path="res://UI/range_ui.tscn" id="4_d1a0v"]
[ext_resource type="Texture2D" uid="uid://btxo07ji1qkds" path="res://Courses/Environments/grassy-meadow1-bl/grassy-meadow1_alb_ht.png" id="5_6rpr1"]
Expand Down
4 changes: 2 additions & 2 deletions OpenShotGolf.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Godot.NET.Sdk/4.6.0">
<Project Sdk="Godot.NET.Sdk/4.6.2">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'windows' Or '$(OS)' == 'Windows_NT' ">net9.0-windows10.0.19041.0</TargetFramework>
Expand All @@ -13,6 +13,6 @@
</ItemGroup>

<ItemGroup>
<Compile Remove="addons/launch_monitors/common/bluetooth/windows/**/*.cs" Condition=" '$(GodotTargetPlatform)' != 'windows' And '$(OS)' != 'Windows_NT' " />
<Compile Remove="addons/open-lm-connector/common/bluetooth/windows/**/*.cs" Condition=" '$(GodotTargetPlatform)' != 'windows' And '$(OS)' != 'Windows_NT' " />
</ItemGroup>
</Project>
18 changes: 18 additions & 0 deletions OpenShotGolf.csproj.old.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Godot.NET.Sdk/4.6.0">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'windows' Or '$(OS)' == 'Windows_NT' ">net9.0-windows10.0.19041.0</TargetFramework>
<SupportedOSPlatformVersion Condition=" '$(GodotTargetPlatform)' == 'windows' Or '$(OS)' == 'Windows_NT' ">10.0.19041.0</SupportedOSPlatformVersion>
<EnableWindowsTargeting Condition=" '$(GodotTargetPlatform)' == 'windows' Or '$(OS)' == 'Windows_NT' ">true</EnableWindowsTargeting>
<EnableDynamicLoading>true</EnableDynamicLoading>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Tmds.DBus" Version="0.93.0" />
</ItemGroup>

<ItemGroup>
<Compile Remove="addons/launch_monitors/common/bluetooth/windows/**/*.cs" Condition=" '$(GodotTargetPlatform)' != 'windows' And '$(OS)' != 'Windows_NT' " />
</ItemGroup>
</Project>
33 changes: 22 additions & 11 deletions Player/ball.gd
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func _try_initialize_ball() -> bool:
func initialize_ball() -> void:
_connect_settings()
_update_environment()
set_surface(int(GlobalSettings.range_settings.surface_type.value))
set_surface(int(GlobalSettingsManager.range_settings.surface_type.value))
_create_collision_and_model()


Expand All @@ -192,10 +192,16 @@ func _create_collision_and_model():


func _connect_settings() -> void:
GlobalSettings.range_settings.temperature.setting_changed.connect(_on_environment_changed)
GlobalSettings.range_settings.altitude.setting_changed.connect(_on_environment_changed)
GlobalSettings.range_settings.range_units.setting_changed.connect(_on_environment_changed)
GlobalSettings.range_settings.surface_type.setting_changed.connect(_on_surface_type_changed)
var settings := GlobalSettingsManager.range_settings

if not settings.temperature.setting_changed.is_connected(_on_environment_changed):
settings.temperature.setting_changed.connect(_on_environment_changed)
if not settings.altitude.setting_changed.is_connected(_on_environment_changed):
settings.altitude.setting_changed.connect(_on_environment_changed)
if not settings.range_units.setting_changed.is_connected(_on_environment_changed):
settings.range_units.setting_changed.connect(_on_environment_changed)
if not settings.surface_type.setting_changed.is_connected(_on_surface_type_changed):
settings.surface_type.setting_changed.connect(_on_surface_type_changed)


func _create_physics_params():
Expand Down Expand Up @@ -227,18 +233,19 @@ func _on_surface_type_changed(value) -> void:


func _update_environment() -> void:
var units: int = GlobalSettings.range_settings.range_units.value
var settings := GlobalSettingsManager.range_settings
var units: int = settings.range_units.value
var density = _call_openfairway_method(
_aero,
&"get_air_density",
&"GetAirDensity",
[GlobalSettings.range_settings.altitude.value, GlobalSettings.range_settings.temperature.value, units]
[settings.altitude.value, settings.temperature.value, units]
)
var viscosity = _call_openfairway_method(
_aero,
&"get_dynamic_viscosity",
&"GetDynamicViscosity",
[GlobalSettings.range_settings.temperature.value, units]
[settings.temperature.value, units]
)
if density == null:
_air_density = 1.225
Expand Down Expand Up @@ -268,7 +275,7 @@ func exit_surface_zone(surface: int) -> void:
if not _surface_zone_stack.is_empty():
set_surface(_surface_zone_stack[_surface_zone_stack.size() - 1])
else:
set_surface(int(GlobalSettings.range_settings.surface_type.value))
set_surface(int(GlobalSettingsManager.range_settings.surface_type.value))


func _apply_surface_params() -> void:
Expand Down Expand Up @@ -489,7 +496,7 @@ func reset() -> void:
launch_spin_rpm = 0.0
rollout_impact_spin_rpm = 0.0
_surface_zone_stack.clear()
set_surface(int(GlobalSettings.range_settings.surface_type.value))
set_surface(int(GlobalSettingsManager.range_settings.surface_type.value))
state = PhysicsEnums.BallState.REST
on_ground = false

Expand Down Expand Up @@ -565,7 +572,7 @@ func hit_from_data(data: Dictionary) -> void:
on_ground = false
rollout_impact_spin_rpm = 0.0
_surface_zone_stack.clear()
set_surface(int(GlobalSettings.range_settings.surface_type.value))
set_surface(int(GlobalSettingsManager.range_settings.surface_type.value))
position = Vector3(0.0, START_HEIGHT, 0.0)

velocity = launch_velocity
Expand Down Expand Up @@ -631,3 +638,7 @@ func _print_launch_debug(data: Dictionary, speed_mps: float, vla: float, hla: fl
print("Initial omega: ", omega, " (%.0f rpm)" % (omega.length() / 0.10472))
print("Shot direction: ", shot_dir)
print("===================")


func set_env(_value) -> void:
_update_environment()
4 changes: 2 additions & 2 deletions Player/player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ func _ready() -> void:
ball.rest.connect(_on_ball_rest)

# Set initial value and connect to setting changes
max_tracers = GlobalSettings.range_settings.shot_tracer_count.value
GlobalSettings.range_settings.shot_tracer_count.setting_changed.connect(_on_tracer_count_changed)
max_tracers = GlobalSettingsManager.range_settings.shot_tracer_count.value
GlobalSettingsManager.range_settings.shot_tracer_count.setting_changed.connect(_on_tracer_count_changed)

func _on_tracer_count_changed(value) -> void:
max_tracers = value
Expand Down
114 changes: 97 additions & 17 deletions UI/MainMenu/main_menu.gd

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting purpose statement comments for all functions. Kind of hard to parse whats really happening and whats really necessary

Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
extends Control
# TODO - add settings menu system on future PR.

@onready var _settings_button: Button = $VerticalLayout/TopStrip/HBoxContainer/SettingsButton
@onready var _exit_button: Button = $VerticalLayout/TopStrip/HBoxContainer/ExitButton
@onready var _courses_button: Button = $VerticalLayout/TilesRow/CoursesTile/CoursesTextBackdrop/CoursesButton
@onready var _range_button: Button = $VerticalLayout/TilesRow/RangeTile/RangeTextBackdrop/RangeButton
@onready var _version_label: Label = $VerticalLayout/VersionLabel
@onready var _version_label: Label = $BottomInfoBar/VersionLabel
@onready var _launch_monitor_status: HBoxContainer = $BottomInfoBar/LaunchMonitorStatus
@onready var _launch_monitor_status_label: Label = $BottomInfoBar/LaunchMonitorStatus/StatusLabel
@onready var _launch_monitor_battery_label: Label = $BottomInfoBar/LaunchMonitorStatus/BatteryLabel
@onready var _launch_monitor_firmware_label: Label = $BottomInfoBar/LaunchMonitorStatus/FirmwareLabel
@onready var _settings_panel: SettingsPanel = $SettingsPanel
var _version_fall_back: String = "dev"
var _version_setting_path: String = "application/config/version"
var _version_text: String


# Called when the node enters the scene tree for the first time.
func _ready():

func _ready() -> void:
_exit_button.pressed.connect(_on_exit_pressed)
_settings_button.pressed.connect(_on_settings_pressed)
_settings_button.pressed.connect(_settings_panel.show_panel)
_range_button.pressed.connect(_on_range_pressed)
_courses_button.pressed.connect(_on_courses_pressed)

_settings_panel.set_main_menu_button_visible(false)
_connect_launch_monitor_status_signals()

_update_version_label()
_update_launch_monitor_status()
SceneManager.current_scene = self


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
pass

func _exit_tree() -> void:
_disconnect_launch_monitor_status_signals()


func _on_range_pressed() -> void:
Expand All @@ -35,16 +40,91 @@ func _on_courses_pressed() -> void:
SceneManager.change_scene("res://Courses/CourseSelector/course_selector.tscn")


func _update_version_label():
func _update_version_label() -> void:
_version_text = _version_fall_back
if (ProjectSettings.has_setting(_version_setting_path)):
var _configured_version = str(ProjectSettings.get_setting(_version_setting_path)).strip_edges()
_version_text = _configured_version;
_version_text = _configured_version

_version_label.text = "OSG Version %s" % _version_text


func _connect_launch_monitor_status_signals() -> void:
var refresh := _update_launch_monitor_status.unbind(1)
var launch_monitor = (LaunchMonitorManager as LaunchMonitorManagerAutoload)

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's the point of this line? we should be able to just refer to the autoload by name

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Defensive coding and captures typed cast, null-guard. Creates local instance as well which is usually safer than a static global init.

if launch_monitor != null:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't need this null check here

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the cast fails, this catches it.

if not launch_monitor.status_changed.is_connected(refresh):
launch_monitor.status_changed.connect(refresh)
if not launch_monitor.battery_changed.is_connected(refresh):
launch_monitor.battery_changed.connect(refresh)
if not launch_monitor.firmware_changed.is_connected(refresh):
launch_monitor.firmware_changed.connect(refresh)

var global_settings = (GlobalSettingsManager as GlobalSettings)
if global_settings != null and global_settings.app_settings != null:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't need these null checks

var app_settings: AppSettings = global_settings.app_settings
if not app_settings.launch_monitor_enabled.setting_changed.is_connected(refresh):
app_settings.launch_monitor_enabled.setting_changed.connect(refresh)
if not app_settings.launch_monitor_provider.setting_changed.is_connected(refresh):
app_settings.launch_monitor_provider.setting_changed.connect(refresh)


func _disconnect_launch_monitor_status_signals() -> void:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's the point of disconnecting all of these signals?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A lot of safety checks. Avoids dangling connections, which apparently we were having before. Avoid dup conn attempt since the pattern is now changed to instantiate on menu versus entire game. Safer to disconnect all, status firmware, battery, etc.

var refresh := _update_launch_monitor_status.unbind(1)
var launch_monitor = (LaunchMonitorManager as LaunchMonitorManagerAutoload)
if launch_monitor != null:
if launch_monitor.status_changed.is_connected(refresh):
launch_monitor.status_changed.disconnect(refresh)
if launch_monitor.battery_changed.is_connected(refresh):
launch_monitor.battery_changed.disconnect(refresh)
if launch_monitor.firmware_changed.is_connected(refresh):
launch_monitor.firmware_changed.disconnect(refresh)

var global_settings = (GlobalSettingsManager as GlobalSettings)
if global_settings != null and global_settings.app_settings != null:
var app_settings: AppSettings = global_settings.app_settings
if app_settings.launch_monitor_enabled.setting_changed.is_connected(refresh):
app_settings.launch_monitor_enabled.setting_changed.disconnect(refresh)
if app_settings.launch_monitor_provider.setting_changed.is_connected(refresh):
app_settings.launch_monitor_provider.setting_changed.disconnect(refresh)


func _update_launch_monitor_status() -> void:
var global_settings = (GlobalSettingsManager as GlobalSettings)
if global_settings == null or global_settings.app_settings == null:
Comment thread
jeshernandez marked this conversation as resolved.
_launch_monitor_status.visible = false
return

var app_settings: AppSettings = global_settings.app_settings
if not bool(app_settings.launch_monitor_enabled.value):
_launch_monitor_status.visible = false
return

var launch_monitor = (LaunchMonitorManager as LaunchMonitorManagerAutoload)
Comment thread
jeshernandez marked this conversation as resolved.
if launch_monitor == null:
Comment thread
jeshernandez marked this conversation as resolved.
_launch_monitor_status.visible = false
return

_launch_monitor_status.visible = true
var monitor_status := str(launch_monitor.status).strip_edges()
if monitor_status.begins_with("PiTrac Listening on"):
monitor_status = ""
if monitor_status != "":
_launch_monitor_status_label.text = "Status: %s" % monitor_status
else:
_launch_monitor_status_label.text = "Status: -"

var battery := int(launch_monitor.battery_level)
if battery >= 0:
_launch_monitor_battery_label.text = "Battery: %d%%" % battery
else:
_launch_monitor_battery_label.text = "Battery: -"

_version_label.text = "Version %s" % _version_text

func _on_settings_pressed() -> void:
pass # Replace with function body.
var firmware := str(launch_monitor.firmware).strip_edges()
if firmware != "":
_launch_monitor_firmware_label.text = "Firmware: %s" % firmware
else:
_launch_monitor_firmware_label.text = "Firmware: -"


func _on_exit_pressed() -> void:
Expand Down
Loading