Files
transcience/addons/gut/gui/gut_user_preferences.gd
claude c4beeae38f Initial commit: Transcience MVP
Top-down twin-stick bullet-hell, Godot 4.7, server-authoritative dedicated
server with client-side prediction. Clients send input only; the server
resolves every hit for both players and enemies (no PvP).

- SimWorld: whole simulation as plain RefCounted objects (no nodes, no
  physics server), ~0.24ms/tick at peak load -- runs headless for free and
  drives 78 tests in under a second
- BulletPool: struct-of-arrays bullet storage, replicated as spawn/despawn
  events rather than per-tick state
- Emitter framework (Ring/AimedSpread/WallGap/ArcSweep) shared by trash
  enemies and bosses -- a new boss is data in src/content/content.gd, no
  simulation changes
- The Warden of the Fold: stationary 4-phase boss built entirely on that
  format
- Lobby hub with a portal into on-demand dungeon instances; one process
  hosts the hub plus every concurrent dungeon
- Emergency escape: 3s server-owned channel, cancelled by damage
- tools/check.sh, test.sh (GUT), smoke.sh (real server + bot clients over
  ENet), bench.gd; git hooks wired to the same scripts
- docs/ARCHITECTURE.md, NETCODE.md, WORKFLOW.md, ROADMAP.md
2026-09-03 16:03:57 +02:00

80 lines
2.3 KiB
GDScript

class GutEditorPref:
var gut_pref_prefix = 'gut/'
var pname = '__not_set__'
var default = null
var value = '__not_set__'
var _settings = null
func _init(n, d, s):
pname = n
default = d
_settings = s
load_it()
func _prefstr():
var to_return = str(gut_pref_prefix, pname)
return to_return
func save_it():
_settings.set_setting(_prefstr(), value)
func load_it():
if(_settings.has_setting(_prefstr())):
value = _settings.get_setting(_prefstr())
else:
value = default
func erase():
_settings.erase(_prefstr())
const EMPTY = '-- NOT_SET --'
# -- Editor ONLY Settings --
var output_font_name = null
var output_font_size = null
var hide_result_tree = null
var hide_output_text = null
var hide_settings = null
var use_colors = null # ? might be output panel
var run_externally = null
var run_externally_options_dialog_size = null
var shortcuts_dialog_size = null
var gut_window_size = null
var gut_window_on_top = null
func _init(editor_settings):
output_font_name = GutEditorPref.new('output_font_name', 'CourierPrime', editor_settings)
output_font_size = GutEditorPref.new('output_font_size', 30, editor_settings)
hide_result_tree = GutEditorPref.new('hide_result_tree', false, editor_settings)
hide_output_text = GutEditorPref.new('hide_output_text', false, editor_settings)
hide_settings = GutEditorPref.new('hide_settings', false, editor_settings)
use_colors = GutEditorPref.new('use_colors', true, editor_settings)
run_externally = GutEditorPref.new('run_externally', false, editor_settings)
run_externally_options_dialog_size = GutEditorPref.new('run_externally_options_dialog_size', Vector2i(-1, -1), editor_settings)
shortcuts_dialog_size = GutEditorPref.new('shortcuts_dialog_size', Vector2i(-1, -1), editor_settings)
gut_window_size = GutEditorPref.new('editor_window_size', Vector2i(-1, -1), editor_settings)
gut_window_on_top = GutEditorPref.new('editor_window_on_top', false, editor_settings)
func save_it():
for prop in get_property_list():
var val = get(prop.name)
if(val is GutEditorPref):
val.save_it()
func load_it():
for prop in get_property_list():
var val = get(prop.name)
if(val is GutEditorPref):
val.load_it()
func erase_all():
for prop in get_property_list():
var val = get(prop.name)
if(val is GutEditorPref):
val.erase()