b0c83af092
Complete replacement of the tactical-shooter project with the netfox-cs-sample (MIT) — a CS 1.6 inspired multiplayer FPS built with Godot 4 and netfox. ## What's new - Full CS-style gameplay: teams (T/CT), rounds, economy, buy menu - 6 weapons: Knife, Glock, USP, AK-47, M4A1, AWP - Bomb plant/defuse with 2 bombsites - Flashbang & smoke grenades - Proper netfox rollback netcode at 64 tick - Network popup UI for host/join - HUD, crosshair, round timer, scoreboard - All netfox singletons registered as autoloads (works in exported builds) ## Architecture - Listen-server (host from client, no dedicated server binary) - Multiplayer-fps game lives at examples/multiplayer-fps/ - Netfox addons registered as autoloads for exported build compat - Godot 4.7 with Forward+ renderer ## Removed - Old headless-server architecture (client_main, server_main, player.gd, etc.) - Custom netfox bootstrap with ENet fallback - Old ChaffGames FPS template (2,420 lines, 844 KB) - SimulationServer GDExtension stub - Godot-jolt physics (netfox sample uses default Godot physics) - Duplicate weapon_data.gd, anti_cheat.gd, round_manager.gd, etc. - Server browser API Python venv (87 MB) - test_range map and modular assets ## Preserved - Git history - Server config at config/default_server_config.cfg - Windows export preset - Build directory (gitignored) Co-authored-by: naxIO <naxIO@users.noreply.github.com>
96 lines
2.3 KiB
GDScript
96 lines
2.3 KiB
GDScript
extends RefCounted
|
|
class_name _Bitset
|
|
|
|
# Stores a list of booleans, representing them efficiently as a PackedByteArray
|
|
|
|
var _data: PackedByteArray
|
|
var _bit_count: int
|
|
|
|
static func of_bools(values: Array) -> _Bitset:
|
|
var result := _Bitset.new(values.size())
|
|
for i in values.size():
|
|
if values[i]:
|
|
result.set_bit(i)
|
|
return result
|
|
|
|
func _init(bit_count: int):
|
|
var bytes := bit_count / 8
|
|
if bit_count % 8 > 0:
|
|
bytes += 1
|
|
|
|
_data = PackedByteArray()
|
|
_data.resize(bytes)
|
|
|
|
_bit_count = bit_count
|
|
|
|
func bit_count() -> int:
|
|
return _bit_count
|
|
|
|
func is_empty() -> bool:
|
|
return _bit_count == 0
|
|
|
|
func is_not_empty() -> bool:
|
|
return _bit_count != 0
|
|
|
|
func get_bit(idx: int) -> bool:
|
|
assert(idx < _bit_count, "Accessing bit %d on bitset of size %d!" % [idx, _bit_count])
|
|
var byte_idx := idx / 8
|
|
var bit_idx := idx % 8
|
|
|
|
return (_data[byte_idx] >> bit_idx) & 0x1 != 0
|
|
|
|
func set_bit(idx: int) -> void:
|
|
assert(idx < _bit_count, "Accessing bit %d on bitset of size %d!" % [idx, _bit_count])
|
|
var byte_idx := idx / 8
|
|
var bit_idx := idx % 8
|
|
|
|
_data[byte_idx] |= 0x1 << bit_idx
|
|
|
|
func clear_bit(idx: int) -> void:
|
|
assert(idx < _bit_count, "Accessing bit %d on bitset of size %d!" % [idx, _bit_count])
|
|
var byte_idx := idx / 8
|
|
var bit_idx := idx % 8
|
|
|
|
_data[byte_idx] &= ~(0x1 << bit_idx)
|
|
|
|
func toggle_bit(idx: int) -> void:
|
|
assert(idx < _bit_count, "Accessing bit %d on bitset of size %d!" % [idx, _bit_count])
|
|
var byte_idx := idx / 8
|
|
var bit_idx := idx % 8
|
|
|
|
_data[byte_idx] ^= 0x1 << bit_idx
|
|
|
|
func get_set_indices() -> Array[int]:
|
|
var result := [] as Array[int]
|
|
for i in _data.size():
|
|
var byte := _data[i]
|
|
|
|
if byte & 0x01: result.append(i * 8 + 0)
|
|
if byte & 0x02: result.append(i * 8 + 1)
|
|
if byte & 0x04: result.append(i * 8 + 2)
|
|
if byte & 0x08: result.append(i * 8 + 3)
|
|
|
|
if byte & 0x10: result.append(i * 8 + 4)
|
|
if byte & 0x20: result.append(i * 8 + 5)
|
|
if byte & 0x40: result.append(i * 8 + 6)
|
|
if byte & 0x80: result.append(i * 8 + 7)
|
|
return result
|
|
|
|
func equals(other) -> bool:
|
|
if other is _Bitset:
|
|
return other._bit_count == _bit_count and other._data == _data
|
|
else:
|
|
return false
|
|
|
|
func _to_string() -> String:
|
|
if is_empty():
|
|
return "Bitset(n=0)"
|
|
else:
|
|
var body := ""
|
|
for i in _bit_count:
|
|
if i != 0 and i % 4 == 0:
|
|
body += " "
|
|
if get_bit(i): body += "1"
|
|
else: body += "0"
|
|
return "Bitset(n=%d, %s)" % [_bit_count, body]
|