more c++ reorganizing

This commit is contained in:
Eric 2022-09-10 16:58:20 -07:00
parent 7231ff2cfb
commit b837d3707e
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
71 changed files with 365 additions and 607 deletions

View File

@ -3995,50 +3995,50 @@
"assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e",
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34",
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/33/fa/2b4dc04a7e94af821486c0baaadd",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/39/c0/0a8c20d90b3bb0b605f56cf57cd6",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9d/9e/36bc9196a661b7ac730309363b25",
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/78/61/3ee51d8c85ac897cb48326059f4f",
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/41/24/ea579f7f46ee8764b99aa1f740e6",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d7/79/db7ba776fe53a432f501cc524f29",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/67/8c/fd54c4640fe9574c819eb93235de",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d0/23/0ed4f59b045bd996e9e8c3adac25",
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/7b/7a/65e4a1a866aa716f339934316888",
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/4c/96/40086b7256c6b69500231234816f",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/25/4e/65658e3b1137e29c26e5a250cb7f",
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a4/d3/9e94f9f4a3f326ab3fb4563605e8",
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/70/82/54ac546d3d6404259c025e4697a6",
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/8c/71/35e658ed48d1732ac1ace9a651d0",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cb/c1/66f115696b5694b203d2a3e3f3b6",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/76/7e/ef8ca6f4baae2d3540658a43238e",
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e5/01/48f01b3bfb0e11dfa298809751d6",
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/4e/35/3e14be7308b3b8a4d7ee00223d02",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2f/8d/5bf66b9999ac4a0b109ce6a93ee9",
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/6f/ba/6814ccb61a86032c381b59092b92",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e0/b3/7ccccfd8721033582cabdfe11f73",
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c7/7c/11757954adb7da34c0e8cb6a6470",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/30/4e/361603ee5faf75168ddefd070b44",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b6/2e/e3bd12f2c9e7baa173479686485d",
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1e/fe/0f73516a00159f6cd4b4791f010d",
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/60/a4/f6798a377123b4f0ea58067173b9",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/60/0d/772009d20e18def687f6b76021f8",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ec/98/ca24d22fa6870cf2fa4b1dc81e2a",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/71/616a553794306a406be45697895c",
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/41/14/bae7db8e7361d538096253c36792",
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/91/5f/d2bfb2b30befdae9270a119d51b5",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d8/07/bd414612e9bf05f2a3c0b531a552",
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/49/64/5943868e08758fc103e8ce70f334",
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1a/a9/bae1d4c1840d6e4c1931c529e4f8",
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/22/a9/75669c9a475fc8080ce422ce2baa",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e1/87/95cbc6fc53e43e206f43eb3a1c61",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a4/1b/9a6145a32ef40fd3b8357cfbfb30",
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/6a/a5/5afd24a1043a652af8ae76ec33ea",
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/dd/3a/71c400bbac9edc5fa7b63e099ae7",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/dc/18/7e47d66f054e81314b39c14b26dc",
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/43/25/36e8e8fc1eac369727f9639bbcf9",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e7/25/6fb628f1f5260834692bdeab63b0",
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/86/d2/d18cbc017a7d64001f96718cc5ed",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/64/9b/78cdb9eda7b30611774769859caa",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8e/e5/cfbcc97e2b8c7ee46d0422e54380",
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/70/9e5becbdf873ea42fae9541dd123",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8e/1b/8a766948a66967084da94255ad51",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0d/18/6a515fce87613b2293a8f7bf1a35",
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a3/47/f46d4455e6ee1ebb397508495d90",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/54/ea/a250bddec2d7285ea5f4e9a29864",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/14/49/890119e5ff8800edf3b3cda113df",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4c/32/de6296fdbd72d6a82d47a2403efd",
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/1d/c111bdf386178fd46eff2c5a8cff",
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3b/a5/e0aa43ca227c6bfa2ae8f44add14",
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b5/6d/7506bdad0891a0e7cb6d04c6b018",
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/95/bc/affcb077742c90c9d51fd2dc4274",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cd/c2/72b9276880eddb6121542c052b1d",
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c8/d2/5df66f66e26c1beb8a1e2b1f0613",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7e/57/593e8ceeee37a65972f1fb30d2cd",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2f/fc/a2ac394899e6527f8def0cad4d8a",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b9/00/54be93a362cac005b111902cf725",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/cf/33/0aba47dbe0848b9a0fe65e3fe5ac",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/7f/a5/705f0b9b047d439d7b8805e684a1",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/e1/11/91da47c90faced11f80ce365e6ca",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/f0/47/fec8d08adc467bc46516ce39423a",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/c0/cb/36553e332fb3297e8f632387fdbb",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/a7/96/f19a4cc19386511d732533ead3d3",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/0c/23/5d5da73cd643d4fb344849768bf3",
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/89/94/c90bb234585a62a097c6f6642e7d",
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/2c/773ff4c64734bcd6205080a0563d",
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0c/18/4a032d351000cf732bb7494d85f7",
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4b/9d/be9915b6f1f1a0d83ae11885bd42",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/31/d2/e658b66d64c828f85d84a9b0d482",
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/31/26/5c531133795d1381ced85e519b10",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/24/4f/c0a11a834ae10e9706bf92879d23",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a3/c6/d9b0509fe23a07de2ccee6ba1fd4",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/1b/93/23b7d341894fb875acaefe0804c5",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/86/e1/65b4096af71168842a99278708da",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/d8/91/3b918141edeaeb3034e558f54246",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/74/ff/12db4137ed498dbbffd892c5000f",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/41/0a/18695d2503c1062d7b2f47c88380",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/2d/59/5bd72f8f691f041059cab3df99d5",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/3b/63/7eeb46b7832e1135e58345866abf",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/89/e4/0b7890024077f73e328b20b543f5",
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/7d/3e/229a581cb2454ed856f1d8b564a7",
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/98/12/571b2160d69d42580e8f31fa6a8d"
}

View File

@ -433,6 +433,7 @@
<w>clrhdr</w>
<w>clrnames</w>
<w>clrred</w>
<w>cmakelist</w>
<w>cmakelists</w>
<w>cmakeserver</w>
<w>cmath</w>

View File

@ -1,4 +1,4 @@
### 1.7.7 (build 20806, api 7, 2022-09-10)
### 1.7.7 (build 20809, api 7, 2022-09-10)
- Added `ba.app.meta.load_exported_classes()` for loading classes discovered by the meta subsystem cleanly in a background thread.
- Improved logging of missing playlist game types.
- Some ba.Lstr functionality can now be used in background threads.
@ -20,8 +20,9 @@
- There is now a `_bainternal.py` dummy-module alongside the existing `_ba.py` one. Be sure to exclude it from any script collections used by the game (the same as `_ba.py`).
- Added checks to make sure _ba or _bainternal arent used outside of ba. Any 'internal' functionality needed outside of ba should be exposed through ba.internal. _ba and _bainternal are internal implementation details.
- Removed C++ Module class and simplified Thread class. The Module class was an old relic of long ago before C++ had lambdas and its existence was pretty pointless and confusing these days.
- Renamed C++ App to AppFlavor and AppGlobals to App
- Renamed C++ Media to Assets
- Renamed C++ App to AppFlavor and AppGlobals to App.
- Renamed C++ Media to Assets.
- Removed 'scores to beat' list in coop which was only ever functional in limited cases on the Mac version. Perhaps that feature can reappear in a cross-platform way sometime.
### 1.7.6 (build 20687, api 7, 2022-08-11)
- Cleaned up da MetaSubsystem code.

View File

@ -20,6 +20,10 @@ help:
# Set env-var BA_ENABLE_IRONY_BUILD_DB=1 to enable creating/updating a
# cmake compile-commands database for use with irony for emacs (and possibly
# other tools).
# FIXME - this can break if we move/rename files and then run 'make update'
# because it tries to use the previous cmakelist with the no-longer-valid
# filename *before* it updates the cmakelist. Need to rethink order of
# operations there.
ifeq ($(BA_ENABLE_IRONY_BUILD_DB),1)
PREREQ_IRONY = .cache/irony/compile_commands.json
endif

View File

@ -1 +1 @@
319717366410279141138094934973337011486
174884230264825984620020844009502663721

View File

@ -38,7 +38,7 @@ def bootstrap() -> None:
# Give a soft warning if we're being used with a different binary
# version than we expect.
expected_build = 20806
expected_build = 20809
running_build: int = env['build_number']
if running_build != expected_build:
print(

View File

@ -55,19 +55,6 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
# Preload achievement images in case we get some.
_ba.timer(2.0, WeakCall(self._preload_achievements))
# Let's ask the server for a 'time-to-beat' value.
levelname = self._get_coop_level_name()
campaign = self.session.campaign
assert campaign is not None
config_str = (str(len(self.players)) + 'p' + campaign.getlevel(
self.settings_raw['name']).get_score_version_string().replace(
' ', '_'))
_ba.get_scores_to_beat(levelname, config_str,
WeakCall(self._on_got_scores_to_beat))
def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
pass
def _show_standard_scores_to_beat_ui(self,
scores: list[dict[str, Any]]) -> None:
from efro.util import asserttype

View File

@ -9,16 +9,16 @@ defensively) in mods.
from __future__ import annotations
from _ba import (
get_scores_to_beat, show_online_score_ui, set_ui_input_device,
is_party_icon_visible, getinputdevice, add_clean_frame_callback,
unlock_all_input, increment_analytics_count, set_debug_speed_exponent,
get_special_widget, get_qrcode_texture, get_string_height,
get_string_width, show_app_invite, appnameupper, lock_all_input,
open_file_externally, fade_screen, appname, have_incentivized_ad,
has_video_ads, workspaces_in_use, set_party_icon_always_visible,
connect_to_party, get_game_port, end_host_scanning, host_scan_cycle,
charstr, get_public_party_enabled, get_public_party_max_size,
set_public_party_name, set_public_party_max_size, set_authenticate_clients,
show_online_score_ui, set_ui_input_device, is_party_icon_visible,
getinputdevice, add_clean_frame_callback, unlock_all_input,
increment_analytics_count, set_debug_speed_exponent, get_special_widget,
get_qrcode_texture, get_string_height, get_string_width, show_app_invite,
appnameupper, lock_all_input, open_file_externally, fade_screen, appname,
have_incentivized_ad, has_video_ads, workspaces_in_use,
set_party_icon_always_visible, connect_to_party, get_game_port,
end_host_scanning, host_scan_cycle, charstr, get_public_party_enabled,
get_public_party_max_size, set_public_party_name,
set_public_party_max_size, set_authenticate_clients,
set_public_party_enabled, reset_random_player_names, new_host_session,
get_foreground_host_session, get_local_active_input_devices_count,
get_ui_input_device, is_in_replay, set_replay_speed_exponent,
@ -78,7 +78,6 @@ from ba._internal import (
sign_out_v1, sign_in_v1, mark_config_dirty)
__all__ = [
'get_scores_to_beat',
'show_online_score_ui',
'set_ui_input_device',
'is_party_icon_visible',

View File

@ -10,7 +10,7 @@ import ba
from ba.internal import JoinActivity
if TYPE_CHECKING:
from typing import Any, Sequence
pass
class CoopJoinActivity(JoinActivity):
@ -24,17 +24,6 @@ class CoopJoinActivity(JoinActivity):
session = self.session
assert isinstance(session, ba.CoopSession)
# Let's show a list of scores-to-beat for 1 player at least.
assert session.campaign is not None
level_name_full = (session.campaign.name + ':' +
session.campaign_level_name)
config_str = ('1p' + session.campaign.getlevel(
session.campaign_level_name).get_score_version_string().replace(
' ', '_'))
ba.internal.get_scores_to_beat(
level_name_full, config_str,
ba.WeakCall(self._on_got_scores_to_beat))
def on_transition_in(self) -> None:
from bastd.actor.controlsguide import ControlsGuide
from bastd.actor.text import Text
@ -53,143 +42,61 @@ class CoopJoinActivity(JoinActivity):
position=(0, -95)).autoretain()
ControlsGuide(delay=1.0).autoretain()
def _on_got_scores_to_beat(self,
scores: list[dict[str, Any]] | None) -> None:
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
from efro.util import asserttype
from bastd.actor.text import Text
ba.pushcall(self._show_remaining_achievements)
# Sort by originating date so that the most recent is first.
if scores is not None:
scores.sort(reverse=True,
key=lambda score: asserttype(score['time'], int))
def _show_remaining_achievements(self) -> None:
from bastd.actor.text import Text
# We only show achievements and challenges for CoopGameActivities.
session = self.session
assert isinstance(session, ba.CoopSession)
gameinstance = session.get_current_game_instance()
if isinstance(gameinstance, ba.CoopGameActivity):
score_type = gameinstance.get_score_type()
if scores is not None:
achievement_challenges = [
a for a in scores if a['type'] == 'achievement_challenge'
]
score_challenges = [
a for a in scores if a['type'] == 'score_challenge'
]
else:
achievement_challenges = score_challenges = []
if not isinstance(gameinstance, ba.CoopGameActivity):
return
delay = 1.0
vpos = -140.0
spacing = 25
delay_inc = 0.1
delay = 1.0
vpos = -140.0
def _add_t(
text: str | ba.Lstr,
h_offs: float = 0.0,
scale: float = 1.0,
color: Sequence[float] = (1.0, 1.0, 1.0, 0.46)
) -> None:
Text(text,
scale=scale * 0.76,
h_align=Text.HAlign.LEFT,
# Now list our remaining achievements for this level.
assert self.session.campaign is not None
assert isinstance(self.session, ba.CoopSession)
levelname = (self.session.campaign.name + ':' +
self.session.campaign_level_name)
ts_h_offs = 60
if not (ba.app.demo_mode or ba.app.arcade_mode):
achievements = [
a for a in ba.app.ach.achievements_for_coop_level(levelname)
if not a.complete
]
have_achievements = bool(achievements)
achievements = [a for a in achievements if not a.complete]
vrmode = ba.app.vr_mode
if have_achievements:
Text(ba.Lstr(resource='achievementsRemainingText'),
host_only=True,
position=(ts_h_offs - 10, vpos),
transition=Text.Transition.FADE_IN,
scale=1.1 * 0.76,
h_attach=Text.HAttach.LEFT,
v_attach=Text.VAttach.TOP,
transition=Text.Transition.FADE_IN,
transition_delay=delay,
color=color,
position=(60 + h_offs, vpos)).autoretain()
if score_challenges:
_add_t(ba.Lstr(value='${A}:',
subs=[('${A}',
ba.Lstr(resource='scoreChallengesText'))
]),
scale=1.1)
delay += delay_inc
vpos -= spacing
for chal in score_challenges:
_add_t(str(chal['value'] if score_type == 'points' else ba.
timestring(int(chal['value']) * 10,
timeformat=ba.TimeFormat.MILLISECONDS
).evaluate()) + ' (1 player)',
h_offs=30,
color=(0.9, 0.7, 1.0, 0.8))
delay += delay_inc
vpos -= 0.6 * spacing
_add_t(chal['player'],
h_offs=40,
color=(0.8, 1, 0.8, 0.6),
scale=0.8)
delay += delay_inc
vpos -= 1.2 * spacing
vpos -= 0.5 * spacing
if achievement_challenges:
_add_t(ba.Lstr(
value='${A}:',
subs=[('${A}',
ba.Lstr(resource='achievementChallengesText'))]),
scale=1.1)
delay += delay_inc
vpos -= spacing
for chal in achievement_challenges:
_add_t(str(chal['value']),
h_offs=30,
color=(0.9, 0.7, 1.0, 0.8))
delay += delay_inc
vpos -= 0.6 * spacing
_add_t(chal['player'],
h_offs=40,
color=(0.8, 1, 0.8, 0.6),
scale=0.8)
delay += delay_inc
vpos -= 1.2 * spacing
vpos -= 0.5 * spacing
# Now list our remaining achievements for this level.
assert self.session.campaign is not None
assert isinstance(self.session, ba.CoopSession)
levelname = (self.session.campaign.name + ':' +
self.session.campaign_level_name)
ts_h_offs = 60
if not (ba.app.demo_mode or ba.app.arcade_mode):
achievements = [
a
for a in ba.app.ach.achievements_for_coop_level(levelname)
if not a.complete
]
have_achievements = bool(achievements)
achievements = [a for a in achievements if not a.complete]
vrmode = ba.app.vr_mode
if have_achievements:
Text(ba.Lstr(resource='achievementsRemainingText'),
color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1, 1),
shadow=1.0,
flatness=1.0 if vrmode else 0.6,
transition_delay=delay).autoretain()
hval = ts_h_offs + 50
vpos -= 35
for ach in achievements:
delay += 0.05
ach.create_display(hval, vpos, delay, style='in_game')
vpos -= 55
if not achievements:
Text(ba.Lstr(resource='noAchievementsRemainingText'),
host_only=True,
position=(ts_h_offs - 10, vpos),
position=(ts_h_offs + 15, vpos + 10),
transition=Text.Transition.FADE_IN,
scale=1.1 * 0.76,
scale=0.7,
h_attach=Text.HAttach.LEFT,
v_attach=Text.VAttach.TOP,
color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1, 1),
shadow=1.0,
flatness=1.0 if vrmode else 0.6,
transition_delay=delay).autoretain()
hval = ts_h_offs + 50
vpos -= 35
for ach in achievements:
delay += 0.05
ach.create_display(hval, vpos, delay, style='in_game')
vpos -= 55
if not achievements:
Text(ba.Lstr(resource='noAchievementsRemainingText'),
host_only=True,
position=(ts_h_offs + 15, vpos + 10),
transition=Text.Transition.FADE_IN,
scale=0.7,
h_attach=Text.HAttach.LEFT,
v_attach=Text.VAttach.TOP,
color=(1, 1, 1, 0.5),
transition_delay=delay + 0.5).autoretain()
color=(1, 1, 1, 0.5),
transition_delay=delay + 0.5).autoretain()

View File

@ -230,6 +230,7 @@
<w>clientinfo</w>
<w>clienttobasn</w>
<w>clipcount</w>
<w>cmakelist</w>
<w>cmath</w>
<w>cmds</w>
<w>cmdvals</w>

View File

@ -348,15 +348,12 @@ add_executable(ballisticacore
${BA_SRC_ROOT}/ballistica/game/friend_score_set.h
${BA_SRC_ROOT}/ballistica/game/game.cc
${BA_SRC_ROOT}/ballistica/game/game.h
${BA_SRC_ROOT}/ballistica/game/game_stream.cc
${BA_SRC_ROOT}/ballistica/game/game_stream.h
${BA_SRC_ROOT}/ballistica/game/host_activity.cc
${BA_SRC_ROOT}/ballistica/game/host_activity.h
${BA_SRC_ROOT}/ballistica/game/player.cc
${BA_SRC_ROOT}/ballistica/game/player.h
${BA_SRC_ROOT}/ballistica/game/player_spec.cc
${BA_SRC_ROOT}/ballistica/game/player_spec.h
${BA_SRC_ROOT}/ballistica/game/score_to_beat.h
${BA_SRC_ROOT}/ballistica/game/session/client_session.cc
${BA_SRC_ROOT}/ballistica/game/session/client_session.h
${BA_SRC_ROOT}/ballistica/game/session/host_session.cc
@ -638,6 +635,8 @@ add_executable(ballisticacore
${BA_SRC_ROOT}/ballistica/scene/node/time_display_node.h
${BA_SRC_ROOT}/ballistica/scene/scene.cc
${BA_SRC_ROOT}/ballistica/scene/scene.h
${BA_SRC_ROOT}/ballistica/scene/scene_stream.cc
${BA_SRC_ROOT}/ballistica/scene/scene_stream.h
${BA_SRC_ROOT}/ballistica/ui/console.cc
${BA_SRC_ROOT}/ballistica/ui/console.h
${BA_SRC_ROOT}/ballistica/ui/root_ui.cc

View File

@ -339,15 +339,12 @@
<ClInclude Include="..\..\src\ballistica\game\friend_score_set.h" />
<ClCompile Include="..\..\src\ballistica\game\game.cc" />
<ClInclude Include="..\..\src\ballistica\game\game.h" />
<ClCompile Include="..\..\src\ballistica\game\game_stream.cc" />
<ClInclude Include="..\..\src\ballistica\game\game_stream.h" />
<ClCompile Include="..\..\src\ballistica\game\host_activity.cc" />
<ClInclude Include="..\..\src\ballistica\game\host_activity.h" />
<ClCompile Include="..\..\src\ballistica\game\player.cc" />
<ClInclude Include="..\..\src\ballistica\game\player.h" />
<ClCompile Include="..\..\src\ballistica\game\player_spec.cc" />
<ClInclude Include="..\..\src\ballistica\game\player_spec.h" />
<ClInclude Include="..\..\src\ballistica\game\score_to_beat.h" />
<ClCompile Include="..\..\src\ballistica\game\session\client_session.cc" />
<ClInclude Include="..\..\src\ballistica\game\session\client_session.h" />
<ClCompile Include="..\..\src\ballistica\game\session\host_session.cc" />
@ -629,6 +626,8 @@
<ClInclude Include="..\..\src\ballistica\scene\node\time_display_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene_stream.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene_stream.h" />
<ClCompile Include="..\..\src\ballistica\ui\console.cc" />
<ClInclude Include="..\..\src\ballistica\ui\console.h" />
<ClCompile Include="..\..\src\ballistica\ui\root_ui.cc" />

View File

@ -451,12 +451,6 @@
<ClInclude Include="..\..\src\ballistica\game\game.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\game\game_stream.cc">
<Filter>ballistica\game</Filter>
</ClCompile>
<ClInclude Include="..\..\src\ballistica\game\game_stream.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\game\host_activity.cc">
<Filter>ballistica\game</Filter>
</ClCompile>
@ -475,9 +469,6 @@
<ClInclude Include="..\..\src\ballistica\game\player_spec.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ballistica\game\score_to_beat.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\game\session\client_session.cc">
<Filter>ballistica\game\session</Filter>
</ClCompile>
@ -1321,6 +1312,12 @@
<ClInclude Include="..\..\src\ballistica\scene\scene.h">
<Filter>ballistica\scene</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\scene\scene_stream.cc">
<Filter>ballistica\scene</Filter>
</ClCompile>
<ClInclude Include="..\..\src\ballistica\scene\scene_stream.h">
<Filter>ballistica\scene</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\ui\console.cc">
<Filter>ballistica\ui</Filter>
</ClCompile>

View File

@ -334,15 +334,12 @@
<ClInclude Include="..\..\src\ballistica\game\friend_score_set.h" />
<ClCompile Include="..\..\src\ballistica\game\game.cc" />
<ClInclude Include="..\..\src\ballistica\game\game.h" />
<ClCompile Include="..\..\src\ballistica\game\game_stream.cc" />
<ClInclude Include="..\..\src\ballistica\game\game_stream.h" />
<ClCompile Include="..\..\src\ballistica\game\host_activity.cc" />
<ClInclude Include="..\..\src\ballistica\game\host_activity.h" />
<ClCompile Include="..\..\src\ballistica\game\player.cc" />
<ClInclude Include="..\..\src\ballistica\game\player.h" />
<ClCompile Include="..\..\src\ballistica\game\player_spec.cc" />
<ClInclude Include="..\..\src\ballistica\game\player_spec.h" />
<ClInclude Include="..\..\src\ballistica\game\score_to_beat.h" />
<ClCompile Include="..\..\src\ballistica\game\session\client_session.cc" />
<ClInclude Include="..\..\src\ballistica\game\session\client_session.h" />
<ClCompile Include="..\..\src\ballistica\game\session\host_session.cc" />
@ -624,6 +621,8 @@
<ClInclude Include="..\..\src\ballistica\scene\node\time_display_node.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene.h" />
<ClCompile Include="..\..\src\ballistica\scene\scene_stream.cc" />
<ClInclude Include="..\..\src\ballistica\scene\scene_stream.h" />
<ClCompile Include="..\..\src\ballistica\ui\console.cc" />
<ClInclude Include="..\..\src\ballistica\ui\console.h" />
<ClCompile Include="..\..\src\ballistica\ui\root_ui.cc" />

View File

@ -451,12 +451,6 @@
<ClInclude Include="..\..\src\ballistica\game\game.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\game\game_stream.cc">
<Filter>ballistica\game</Filter>
</ClCompile>
<ClInclude Include="..\..\src\ballistica\game\game_stream.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\game\host_activity.cc">
<Filter>ballistica\game</Filter>
</ClCompile>
@ -475,9 +469,6 @@
<ClInclude Include="..\..\src\ballistica\game\player_spec.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ballistica\game\score_to_beat.h">
<Filter>ballistica\game</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\game\session\client_session.cc">
<Filter>ballistica\game\session</Filter>
</ClCompile>
@ -1321,6 +1312,12 @@
<ClInclude Include="..\..\src\ballistica\scene\scene.h">
<Filter>ballistica\scene</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\scene\scene_stream.cc">
<Filter>ballistica\scene</Filter>
</ClCompile>
<ClInclude Include="..\..\src\ballistica\scene\scene_stream.h">
<Filter>ballistica\scene</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ballistica\ui\console.cc">
<Filter>ballistica\ui</Filter>
</ClCompile>

View File

@ -291,15 +291,6 @@ void AppFlavor::PushPurchaseAckCall(const std::string& purchase,
[purchase, order_id] { g_platform->PurchaseAck(purchase, order_id); });
}
void AppFlavor::PushGetScoresToBeatCall(const std::string& level,
const std::string& config,
void* py_callback) {
thread()->PushCall([level, config, py_callback] {
assert(InMainThread());
g_platform->GetScoresToBeat(level, config, py_callback);
});
}
void AppFlavor::PushPurchaseCall(const std::string& item) {
thread()->PushCall([item] {
assert(InMainThread());

View File

@ -108,9 +108,6 @@ class AppFlavor {
const std::string& game_version, int64_t score)
-> void;
auto PushAchievementReportCall(const std::string& achievement) -> void;
auto PushGetScoresToBeatCall(const std::string& level,
const std::string& config, void* py_callback)
-> void;
auto PushOpenURLCall(const std::string& url) -> void;
auto PushStringEditCall(const std::string& name, const std::string& value,
int max_chars) -> void;

View File

@ -2,9 +2,9 @@
#include "ballistica/assets/component/collide_model.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/class/python_class_collide_model.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -12,7 +12,7 @@ CollideModel::CollideModel(const std::string& name, Scene* scene)
: AssetComponent(name, scene), dead_(false) {
assert(InLogicThread());
if (scene) {
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddCollideModel(this);
}
}
@ -30,7 +30,7 @@ void CollideModel::MarkDead() {
return;
}
if (Scene* s = scene()) {
if (GameStream* os = s->GetGameStream()) {
if (SceneStream* os = s->GetSceneStream()) {
os->RemoveCollideModel(this);
}
}

View File

@ -2,9 +2,9 @@
#include "ballistica/assets/component/data.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/class/python_class_data.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -13,7 +13,7 @@ Data::Data(const std::string& name, Scene* scene)
assert(InLogicThread());
if (scene) {
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddData(this);
}
}
@ -31,7 +31,7 @@ void Data::MarkDead() {
return;
}
if (Scene* s = scene()) {
if (GameStream* os = s->GetGameStream()) {
if (SceneStream* os = s->GetSceneStream()) {
os->RemoveData(this);
}
}

View File

@ -2,9 +2,9 @@
#include "ballistica/assets/component/model.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/class/python_class_model.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -13,7 +13,7 @@ Model::Model(const std::string& name, Scene* scene)
assert(InLogicThread());
if (scene) {
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddModel(this);
}
}
@ -31,7 +31,7 @@ void Model::MarkDead() {
return;
}
if (Scene* s = scene()) {
if (GameStream* os = s->GetGameStream()) {
if (SceneStream* os = s->GetSceneStream()) {
os->RemoveModel(this);
}
}

View File

@ -4,9 +4,9 @@
#include "ballistica/assets/assets.h"
#include "ballistica/assets/data/sound_data.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/class/python_class_sound.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -14,7 +14,7 @@ Sound::Sound(const std::string& name, Scene* scene)
: AssetComponent(name, scene) {
assert(InLogicThread());
if (scene) {
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddSound(this);
}
}
@ -30,7 +30,7 @@ Sound::~Sound() { MarkDead(); }
void Sound::MarkDead() {
if (dead_) return;
if (Scene* s = scene()) {
if (GameStream* os = s->GetGameStream()) {
if (SceneStream* os = s->GetSceneStream()) {
os->RemoveSound(this);
}
}

View File

@ -2,10 +2,10 @@
#include "ballistica/assets/component/texture.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/graphics/renderer.h"
#include "ballistica/python/class/python_class_texture.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -15,7 +15,7 @@ Texture::Texture(const std::string& name, Scene* scene)
// Add to the provided scene to get a numeric ID.
if (scene) {
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddTexture(this);
}
}
@ -43,7 +43,7 @@ void Texture::MarkDead() {
return;
}
if (Scene* s = scene()) {
if (GameStream* os = s->GetGameStream()) {
if (SceneStream* os = s->GetSceneStream()) {
os->RemoveTexture(this);
}
}

View File

@ -23,7 +23,7 @@
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kAppBuildNumber = 20806;
const int kAppBuildNumber = 20809;
const char* kAppVersion = "1.7.7";
// Our standalone globals.

View File

@ -131,7 +131,6 @@ class NodeAttributeConnection;
class NodeAttributeUnbound;
class Object;
class ObjectComponent;
class GameStream;
class Part;
class Python;
class Platform;
@ -163,6 +162,7 @@ class RootUI;
class RootWidget;
class Runnable;
class Scene;
class SceneStream;
class ScoreToBeat;
class SDLApp;
class SDLContext;

View File

@ -4,10 +4,10 @@
#include "ballistica/dynamics/dynamics.h"
#include "ballistica/dynamics/material/material_context.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/session/client_session.h"
#include "ballistica/generic/utils.h"
#include "ballistica/graphics/graphics_server.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -17,7 +17,7 @@ auto ImpactSoundMaterialAction::GetFlattenedSize() -> size_t {
}
void ImpactSoundMaterialAction::Flatten(char** buffer,
GameStream* output_stream) {
SceneStream* output_stream) {
assert(sounds.size() < 100);
auto sound_count{static_cast<uint8_t>(sounds.size())};
Utils::EmbedInt8(buffer, sound_count);

View File

@ -26,7 +26,7 @@ class ImpactSoundMaterialAction : public MaterialAction {
const Object::Ref<MaterialAction>& p) override;
auto GetType() const -> Type override { return Type::IMPACT_SOUND; }
auto GetFlattenedSize() -> size_t override;
void Flatten(char** buffer, GameStream* output_stream) override;
void Flatten(char** buffer, SceneStream* output_stream) override;
void Restore(const char** buffer, ClientSession* cs) override;
private:

View File

@ -5,9 +5,9 @@
// #include "ballistica/dynamics/material/material_action.h"
#include "ballistica/dynamics/material/material_component.h"
#include "ballistica/dynamics/material/material_condition_node.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/python_sys.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -16,7 +16,7 @@ Material::Material(std::string name_in, Scene* scene)
// If we're being made in a scene with an output stream,
// write ourself to it.
assert(scene);
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddMaterial(this);
}
}
@ -30,7 +30,7 @@ void Material::MarkDead() {
// If we're in a scene with an output-stream, inform them of our demise.
Scene* scene = scene_.get();
if (scene) {
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->RemoveMaterial(this);
}
}
@ -62,13 +62,13 @@ void Material::Apply(MaterialContext* s, const Part* src_part,
void Material::AddComponent(const Object::Ref<MaterialComponent>& c) {
// If there's an output stream, push this to that first
if (GameStream* output_stream = scene()->GetGameStream()) {
if (SceneStream* output_stream = scene()->GetSceneStream()) {
output_stream->AddMaterialComponent(this, c.get());
}
components_.push_back(c);
}
void Material::DumpComponents(GameStream* out) {
void Material::DumpComponents(SceneStream* out) {
for (auto& i : components_) {
assert(i.exists());
out->AddMaterialComponent(this, i.get());

View File

@ -30,7 +30,7 @@ class Material : public Object {
auto BorrowPyRef() -> PyObject* { return GetPyRef(false); }
void MarkDead();
auto scene() const -> Scene* { return scene_.get(); }
void DumpComponents(GameStream* out);
void DumpComponents(SceneStream* out);
auto stream_id() const -> int64_t { return stream_id_; }
void set_stream_id(int64_t val) {
assert(stream_id_ == -1);

View File

@ -28,7 +28,7 @@ class MaterialAction : public Object {
const Object::Ref<MaterialAction>& p) = 0;
virtual void Execute(Node* node1, Node* node2, Scene* scene) {}
virtual auto GetFlattenedSize() -> size_t { return 0; }
virtual void Flatten(char** buffer, GameStream* output_stream) {}
virtual void Flatten(char** buffer, SceneStream* output_stream) {}
virtual void Restore(const char** buffer, ClientSession* cs) {}
auto IsNeededOnClient() -> bool {
switch (GetType()) {

View File

@ -143,7 +143,7 @@ auto MaterialComponent::GetFlattenedSize() -> size_t {
return size;
}
void MaterialComponent::Flatten(char** buffer, GameStream* output_stream) {
void MaterialComponent::Flatten(char** buffer, SceneStream* output_stream) {
// Embed a byte telling whether we have conditions.
Utils::EmbedInt8(buffer, conditions.exists());

View File

@ -18,7 +18,7 @@ class MaterialComponent : public Object {
}
auto GetFlattenedSize() -> size_t;
void Flatten(char** buffer, GameStream* output_stream);
void Flatten(char** buffer, SceneStream* output_stream);
void Restore(const char** buffer, ClientSession* cs);
// Actions are stored as shared pointers so references

View File

@ -3,9 +3,9 @@
#include "ballistica/dynamics/material/material_condition_node.h"
#include "ballistica/dynamics/material/material.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/session/client_session.h"
#include "ballistica/generic/utils.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -22,7 +22,7 @@ auto MaterialConditionNode::GetFlattenedSize() -> size_t {
return size;
}
void MaterialConditionNode::Flatten(char** buffer, GameStream* output_stream) {
void MaterialConditionNode::Flatten(char** buffer, SceneStream* output_stream) {
// Pack our opmode in. Or if we're a leaf note stick zero in.
Utils::EmbedInt8(buffer, static_cast<int8_t>(opmode));
if (opmode == OpMode::LEAF_NODE) {

View File

@ -50,7 +50,7 @@ class MaterialConditionNode : public Object {
}
}
auto GetFlattenedSize() -> size_t;
void Flatten(char** buffer, GameStream* output_stream);
void Flatten(char** buffer, SceneStream* output_stream);
void Restore(const char** buffer, ClientSession* cs);
};

View File

@ -27,7 +27,7 @@ class NodeMessageMaterialAction : public MaterialAction {
// 1 byte for bools + data
return static_cast<int>(1 + data.GetFlattenedSize());
}
void Flatten(char** buffer, GameStream* output_stream) override {
void Flatten(char** buffer, SceneStream* output_stream) override {
Utils::EmbedBools(buffer, target_other, at_disconnect);
data.embed(buffer);
}

View File

@ -13,7 +13,7 @@ auto NodeModMaterialAction::GetType() const -> MaterialAction::Type {
auto NodeModMaterialAction::GetFlattenedSize() -> size_t { return 1 + 4; }
void NodeModMaterialAction::Flatten(char** buffer, GameStream* output_stream) {
void NodeModMaterialAction::Flatten(char** buffer, SceneStream* output_stream) {
Utils::EmbedInt8(buffer, static_cast<int8_t>(attr));
Utils::EmbedFloat32(buffer, attr_val);
}

View File

@ -19,7 +19,7 @@ class NodeModMaterialAction : public MaterialAction {
const Object::Ref<MaterialAction>& p) override;
auto GetType() const -> Type override;
auto GetFlattenedSize() -> size_t override;
void Flatten(char** buffer, GameStream* output_stream) override;
void Flatten(char** buffer, SceneStream* output_stream) override;
void Restore(const char** buffer, ClientSession* cs) override;
};

View File

@ -13,7 +13,7 @@ auto PartModMaterialAction::GetType() const -> MaterialAction::Type {
auto PartModMaterialAction::GetFlattenedSize() -> size_t { return 1 + 4; }
void PartModMaterialAction::Flatten(char** buffer, GameStream* output_stream) {
void PartModMaterialAction::Flatten(char** buffer, SceneStream* output_stream) {
Utils::EmbedInt8(buffer, static_cast<int8_t>(attr));
Utils::EmbedFloat32(buffer, attr_val);
}

View File

@ -19,7 +19,7 @@ class PartModMaterialAction : public MaterialAction {
const Object::Ref<MaterialAction>& p) override;
auto GetType() const -> Type override;
auto GetFlattenedSize() -> size_t override;
void Flatten(char** buffer, GameStream* output_stream) override;
void Flatten(char** buffer, SceneStream* output_stream) override;
void Restore(const char** buffer, ClientSession* cs) override;
};

View File

@ -5,17 +5,17 @@
#include "ballistica/assets/component/sound.h"
#include "ballistica/dynamics/dynamics.h"
#include "ballistica/dynamics/material/material_context.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/session/client_session.h"
#include "ballistica/generic/utils.h"
#include "ballistica/graphics/graphics_server.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
auto RollSoundMaterialAction::GetFlattenedSize() -> size_t { return 4 + 2 + 2; }
void RollSoundMaterialAction::Flatten(char** buffer,
GameStream* output_stream) {
SceneStream* output_stream) {
Utils::EmbedInt32NBO(buffer, static_cast_check_fit<int32_t>(
output_stream->GetSoundID(sound.get())));
Utils::EmbedFloat16NBO(buffer, target_impulse);

View File

@ -24,7 +24,7 @@ class RollSoundMaterialAction : public MaterialAction {
const Object::Ref<MaterialAction>& p) override;
auto GetType() const -> Type override { return Type::ROLL_SOUND; }
auto GetFlattenedSize() -> size_t override;
void Flatten(char** buffer, GameStream* output_stream) override;
void Flatten(char** buffer, SceneStream* output_stream) override;
void Restore(const char** buffer, ClientSession* cs) override;
};

View File

@ -4,17 +4,17 @@
#include "ballistica/dynamics/dynamics.h"
#include "ballistica/dynamics/material/material_context.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/session/client_session.h"
#include "ballistica/generic/utils.h"
#include "ballistica/graphics/graphics_server.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
auto SkidSoundMaterialAction::GetFlattenedSize() -> size_t { return 4 + 2 + 2; }
void SkidSoundMaterialAction::Flatten(char** buffer,
GameStream* output_stream) {
SceneStream* output_stream) {
Utils::EmbedInt32NBO(buffer, static_cast_check_fit<int32_t>(
output_stream->GetSoundID(sound.get())));
Utils::EmbedFloat16NBO(buffer, target_impulse);

View File

@ -24,7 +24,7 @@ class SkidSoundMaterialAction : public MaterialAction {
const Object::Ref<MaterialAction>& p) override;
auto GetType() const -> Type override { return Type::SKID_SOUND; }
auto GetFlattenedSize() -> size_t override;
void Flatten(char** buffer, GameStream* output_stream) override;
void Flatten(char** buffer, SceneStream* output_stream) override;
void Restore(const char** buffer, ClientSession* cs) override;
};

View File

@ -3,9 +3,9 @@
#include "ballistica/dynamics/material/sound_material_action.h"
#include "ballistica/dynamics/material/material_context.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/session/client_session.h"
#include "ballistica/generic/utils.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -18,7 +18,7 @@ void SoundMaterialAction::Apply(MaterialContext* context, const Part* src_part,
auto SoundMaterialAction::GetFlattenedSize() -> size_t { return 4 + 2; }
void SoundMaterialAction::Flatten(char** buffer, GameStream* output_stream) {
void SoundMaterialAction::Flatten(char** buffer, SceneStream* output_stream) {
Utils::EmbedInt32NBO(buffer, static_cast_check_fit<int32_t>(
output_stream->GetSoundID(sound_.get())));
Utils::EmbedFloat16NBO(buffer, volume_);

View File

@ -19,7 +19,7 @@ class SoundMaterialAction : public MaterialAction {
const Object::Ref<MaterialAction>& p) override;
auto GetType() const -> Type override { return Type::SOUND; }
auto GetFlattenedSize() -> size_t override;
void Flatten(char** buffer, GameStream* output_stream) override;
void Flatten(char** buffer, SceneStream* output_stream) override;
void Restore(const char** buffer, ClientSession* cs) override;
private:

View File

@ -13,7 +13,6 @@
#include "ballistica/game/friend_score_set.h"
#include "ballistica/game/host_activity.h"
#include "ballistica/game/player.h"
#include "ballistica/game/score_to_beat.h"
#include "ballistica/game/session/client_session.h"
#include "ballistica/game/session/host_session.h"
#include "ballistica/game/session/net_client_session.h"
@ -1171,22 +1170,6 @@ void Game::GameServiceAchievementList(
g_app_internal->DispatchRemoteAchievementList(achievements);
}
void Game::PushScoresToBeatResponseCall(bool success,
const std::list<ScoreToBeat>& scores,
void* py_callback) {
thread()->PushCall([this, success, scores, py_callback] {
ScoresToBeatResponse(success, scores, py_callback);
});
}
void Game::ScoresToBeatResponse(bool success,
const std::list<ScoreToBeat>& scores,
void* py_callback) {
assert(g_python);
assert(InLogicThread());
g_python->DispatchScoresToBeatResponse(success, scores, py_callback);
}
void Game::PushPlaySoundCall(SystemSoundID sound) {
thread()->PushCall(
[sound] { g_audio->PlaySound(g_assets->GetSound(sound)); });

View File

@ -54,9 +54,6 @@ class Game {
auto PushGameServiceAchievementListCall(
const std::set<std::string>& achievements) -> void;
auto PushScoresToBeatResponseCall(bool success,
const std::list<ScoreToBeat>& scores,
void* py_callback) -> void;
auto PushToggleCollisionGeometryDisplayCall() -> void;
auto PushToggleDebugInfoDisplayCall() -> void;
auto PushToggleManualCameraCall() -> void;
@ -256,8 +253,6 @@ class Game {
float pixel_width, float pixel_height) -> void;
auto GameServiceAchievementList(const std::set<std::string>& achievements)
-> void;
auto ScoresToBeatResponse(bool success, const std::list<ScoreToBeat>& scores,
void* py_callback) -> void;
auto PruneMedia() -> void;
auto Update() -> void;

View File

@ -8,7 +8,6 @@
#include "ballistica/assets/component/sound.h"
#include "ballistica/assets/component/texture.h"
#include "ballistica/dynamics/material/material.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/player.h"
#include "ballistica/game/session/host_session.h"
#include "ballistica/generic/lambda_runnable.h"
@ -19,6 +18,7 @@
#include "ballistica/python/python_sys.h"
#include "ballistica/scene/node/globals_node.h"
#include "ballistica/scene/node/node_type.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -36,7 +36,7 @@ HostActivity::HostActivity(HostSession* host_session) {
scene_ = Object::New<Scene>(0);
// If there's an output stream, add to it.
if (GameStream* out = host_session->GetGameStream()) {
if (SceneStream* out = host_session->GetSceneStream()) {
out->AddScene(scene_.get());
}
}
@ -110,9 +110,9 @@ HostActivity::~HostActivity() {
}
}
auto HostActivity::GetGameStream() const -> GameStream* {
auto HostActivity::GetSceneStream() const -> SceneStream* {
if (!host_session_.exists()) return nullptr;
return host_session_->GetGameStream();
return host_session_->GetSceneStream();
}
auto HostActivity::SetGlobalsNode(GlobalsNode* node) -> void {
@ -314,7 +314,7 @@ void HostActivity::SetIsForeground(bool val) {
g_game->SetForegroundScene(sg);
// Also push it to clients.
if (GameStream* out = GetGameStream()) {
if (SceneStream* out = GetSceneStream()) {
out->SetForegroundScene(scene_.get());
}
}
@ -433,7 +433,7 @@ void HostActivity::Draw(FrameDef* frame_def) {
scene()->Draw(frame_def);
}
void HostActivity::DumpFullState(GameStream* out) {
void HostActivity::DumpFullState(SceneStream* out) {
// Add our scene.
if (scene_.exists()) {
scene_->Dump(out);

View File

@ -69,8 +69,8 @@ class HostActivity : public ContextTarget {
auto getAllowKickIdlePlayers() const -> bool {
return allow_kick_idle_players_;
}
auto GetGameStream() const -> GameStream*;
auto DumpFullState(GameStream* out) -> void;
auto GetSceneStream() const -> SceneStream*;
auto DumpFullState(SceneStream* out) -> void;
auto SetGlobalsNode(GlobalsNode* node) -> void;
auto SetIsForeground(bool val) -> void;
auto RegisterPyActivity(PyObject* pyActivity) -> void;

View File

@ -1,28 +0,0 @@
// Released under the MIT License. See LICENSE for details.
#ifndef BALLISTICA_GAME_SCORE_TO_BEAT_H_
#define BALLISTICA_GAME_SCORE_TO_BEAT_H_
#include <string>
#include <utility>
namespace ballistica {
// Do we still need this?
class ScoreToBeat {
public:
ScoreToBeat(std::string player_in, std::string type_in, std::string value_in,
double timeIn)
: player(std::move(player_in)),
type(std::move(type_in)),
value(std::move(value_in)),
time(timeIn) {}
std::string player;
std::string type;
std::string value;
double time;
};
} // namespace ballistica
#endif // BALLISTICA_GAME_SCORE_TO_BEAT_H_

View File

@ -14,13 +14,13 @@
#include "ballistica/dynamics/material/material_component.h"
#include "ballistica/dynamics/material/material_condition_node.h"
#include "ballistica/dynamics/rigid_body.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/graphics/graphics.h"
#include "ballistica/networking/networking.h"
#include "ballistica/python/python.h"
#include "ballistica/scene/node/node_attribute.h"
#include "ballistica/scene/node/node_type.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -1063,7 +1063,7 @@ void ClientSession::GetCorrectionMessages(
}
}
void ClientSession::DumpFullState(GameStream* out) {
void ClientSession::DumpFullState(SceneStream* out) {
// Add all scenes.
for (auto&& i : scenes()) {
if (Scene* sg = i.get()) {

View File

@ -86,7 +86,7 @@ class ClientSession : public Session {
virtual auto FetchMessages() -> void {}
virtual void Error(const std::string& description);
void End();
void DumpFullState(GameStream* out) override;
void DumpFullState(SceneStream* out) override;
/// Reset target base time to equal current. This can be used during command
/// buffer underruns to cause playback to pause momentarily instead of

View File

@ -6,7 +6,6 @@
#include "ballistica/assets/component/model.h"
#include "ballistica/assets/component/sound.h"
#include "ballistica/assets/component/texture.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/host_activity.h"
#include "ballistica/game/player.h"
#include "ballistica/generic/lambda_runnable.h"
@ -17,6 +16,7 @@
#include "ballistica/python/python_command.h"
#include "ballistica/python/python_context_call.h"
#include "ballistica/python/python_sys.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -51,7 +51,7 @@ HostSession::HostSession(PyObject* session_type_obj)
do_replay = false;
}
output_stream_ = Object::New<GameStream>(this, do_replay);
output_stream_ = Object::New<SceneStream>(this, do_replay);
// Make a scene for our session-level nodes, etc.
scene_ = Object::New<Scene>(0);
@ -499,7 +499,7 @@ void HostSession::Update(int time_advance) {
ProcessPlayerTimeOuts();
GameStream* output_stream = GetGameStream();
SceneStream* output_stream = GetSceneStream();
// Advance base time by the specified amount,
// firing all timers along the way.
@ -656,7 +656,7 @@ auto HostSession::GetUnusedPlayerName(Player* p, const std::string& base_name)
return name_test;
}
void HostSession::DumpFullState(GameStream* out) {
void HostSession::DumpFullState(SceneStream* out) {
// Add session-scene.
if (scene_.exists()) {
scene_->Dump(out);

View File

@ -64,11 +64,11 @@ class HostSession : public Session {
return scene_.get();
}
void RegisterCall(PythonContextCall* call);
auto GetGameStream() const -> GameStream* { return output_stream_.get(); }
auto GetSceneStream() const -> SceneStream* { return output_stream_.get(); }
auto is_main_menu() const -> bool {
return is_main_menu_;
} // fixme remove this
void DumpFullState(GameStream* out) override;
void DumpFullState(SceneStream* out) override;
void GetCorrectionMessages(bool blend,
std::vector<std::vector<uint8_t> >* messages);
auto base_time() const -> millisecs_t { return base_time_; }
@ -98,7 +98,7 @@ class HostSession : public Session {
void IssuePlayerLeft(Player* player);
bool is_main_menu_; // FIXME: Remove this.
Object::Ref<GameStream> output_stream_;
Object::Ref<SceneStream> output_stream_;
Timer* step_scene_timer_;
millisecs_t base_time_ = 0;
TimerList sim_timers_;

View File

@ -5,13 +5,13 @@
#include "ballistica/dynamics/material/material.h"
#include "ballistica/game/connection/connection_set.h"
#include "ballistica/game/connection/connection_to_client.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/generic/huffman.h"
#include "ballistica/generic/utils.h"
#include "ballistica/math/vector3f.h"
#include "ballistica/networking/networking.h"
#include "ballistica/platform/platform.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -67,7 +67,7 @@ void ReplayClientSession::OnClientConnected(ConnectionToClient* c) {
// we create a temporary output stream just for the purpose of building
// a giant session-commands message that we can send to the client
// to build its state up to where we are currently.
GameStream out(nullptr, false);
SceneStream out(nullptr, false);
// go ahead and dump our full state..
DumpFullState(&out);

View File

@ -30,7 +30,7 @@ void Session::GraphicsQualityChanged(GraphicsQuality q) {}
void Session::DebugSpeedMultChanged() {}
void Session::DumpFullState(GameStream* out) {
void Session::DumpFullState(SceneStream* out) {
Log("Session::DumpFullState() being called; shouldn't happen.");
}

View File

@ -33,7 +33,7 @@ class Session : public ContextTarget {
virtual void DebugSpeedMultChanged();
auto benchmark_type() const -> BenchmarkType { return benchmark_type_; }
void set_benchmark_type(BenchmarkType val) { benchmark_type_ = val; }
virtual void DumpFullState(GameStream* s);
virtual void DumpFullState(SceneStream* s);
private:
BenchmarkType benchmark_type_ = BenchmarkType::kNone;

View File

@ -57,8 +57,6 @@ class PlatformApple : public Platform {
auto IsOSPlayingMusic() -> bool override;
auto SetHardwareCursorVisible(bool visible) -> void override;
auto QuitApp() -> void override;
auto GetScoresToBeat(const std::string& level, const std::string& config,
void* py_callback) -> void override;
auto OpenFileExternally(const std::string& path) -> void override;
auto OpenDirExternally(const std::string& path) -> void override;
auto MacMusicAppInit() -> void override;

View File

@ -24,7 +24,6 @@
#include "ballistica/dynamics/bg/bg_dynamics_server.h"
#include "ballistica/game/friend_score_set.h"
#include "ballistica/game/game.h"
#include "ballistica/game/score_to_beat.h"
#include "ballistica/generic/utils.h"
#include "ballistica/graphics/camera.h"
#include "ballistica/graphics/graphics.h"
@ -1093,39 +1092,36 @@ void Platform::SetHardwareCursorVisible(bool visible) {
#endif
}
void Platform::QuitApp() { exit(g_app->return_value); }
auto Platform::QuitApp() -> void { exit(g_app->return_value); }
void Platform::GetScoresToBeat(const std::string& level,
const std::string& config, void* py_callback) {
// By default, return nothing.
g_game->PushScoresToBeatResponseCall(false, std::list<ScoreToBeat>(),
py_callback);
}
void Platform::OpenFileExternally(const std::string& path) {
auto Platform::OpenFileExternally(const std::string& path) -> void {
Log("OpenFileExternally() unimplemented");
}
void Platform::OpenDirExternally(const std::string& path) {
auto Platform::OpenDirExternally(const std::string& path) -> void {
Log("OpenDirExternally() unimplemented");
}
void Platform::MacMusicAppInit() { Log("MacMusicAppInit() unimplemented"); }
auto Platform::MacMusicAppInit() -> void {
Log("MacMusicAppInit() unimplemented");
}
auto Platform::MacMusicAppGetVolume() -> int {
Log("MacMusicAppGetVolume() unimplemented");
return 0;
}
void Platform::MacMusicAppSetVolume(int volume) {
auto Platform::MacMusicAppSetVolume(int volume) -> void {
Log("MacMusicAppSetVolume() unimplemented");
}
void Platform::MacMusicAppGetLibrarySource() {
auto Platform::MacMusicAppGetLibrarySource() -> void {
Log("MacMusicAppGetLibrarySource() unimplemented");
}
void Platform::MacMusicAppStop() { Log("MacMusicAppStop() unimplemented"); }
auto Platform::MacMusicAppStop() -> void {
Log("MacMusicAppStop() unimplemented");
}
auto Platform::MacMusicAppPlayPlaylist(const std::string& playlist) -> bool {
Log("MacMusicAppPlayPlaylist() unimplemented");
@ -1136,7 +1132,7 @@ auto Platform::MacMusicAppGetPlaylists() -> std::list<std::string> {
return {};
}
void Platform::SetCurrentThreadName(const std::string& name) {
auto Platform::SetCurrentThreadName(const std::string& name) -> void {
// Currently we leave the main thread alone, otherwise we show up as
// "BallisticaMainThread" under "top" on linux (should check other platforms).
if (InMainThread()) {
@ -1149,7 +1145,7 @@ void Platform::SetCurrentThreadName(const std::string& name) {
#endif
}
void Platform::Unlink(const char* path) {
auto Platform::Unlink(const char* path) -> void {
// This default implementation covers non-windows platforms.
#if BA_OSTYPE_WINDOWS
throw Exception();
@ -1186,7 +1182,7 @@ auto Platform::IsEventPushMode() -> bool { return false; }
auto Platform::GetDisplayResolution(int* x, int* y) -> bool { return false; }
void Platform::CloseSocket(int socket) {
auto Platform::CloseSocket(int socket) -> void {
// This default implementation covers non-windows platforms.
#if BA_OSTYPE_WINDOWS
throw Exception();

View File

@ -491,11 +491,6 @@ class Platform {
/// Quit the app (can be immediate or via posting some high level event).
virtual auto QuitApp() -> void;
// Note to self: do we want to deprecate this?...
virtual auto GetScoresToBeat(const std::string& level,
const std::string& config, void* py_callback)
-> void;
/// Open a file using the system default method (in another app, etc.)
virtual auto OpenFileExternally(const std::string& path) -> void;

View File

@ -5,9 +5,9 @@
#include <list>
#include "ballistica/core/thread.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/python.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -277,7 +277,7 @@ auto PythonClassNode::HandleMessage(PythonClassNode* self, PyObject* args)
if (user_message_obj) {
node->DispatchUserMessage(user_message_obj, "Node User-Message dispatch");
} else {
if (GameStream* output_stream = node->scene()->GetGameStream()) {
if (SceneStream* output_stream = node->scene()->GetSceneStream()) {
output_stream->NodeMessage(node, b.data(), b.size());
}
node->DispatchNodeMessage(b.data());
@ -335,7 +335,7 @@ auto PythonClassNode::ConnectAttr(PythonClassNode* self, PyObject* args)
dst_node->type()->GetAttribute(std::string(dst_attr_name));
// Push to output_stream first to catch scene mismatch errors.
if (GameStream* output_stream = node->scene()->GetGameStream()) {
if (SceneStream* output_stream = node->scene()->GetSceneStream()) {
output_stream->ConnectNodeAttribute(node, src_attr, dst_node, dst_attr);
}

View File

@ -7,7 +7,6 @@
#include "ballistica/assets/component/texture.h"
#include "ballistica/core/logging.h"
#include "ballistica/game/connection/connection_set.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/host_activity.h"
#include "ballistica/game/session/host_session.h"
#include "ballistica/game/session/replay_client_session.h"
@ -17,6 +16,7 @@
#include "ballistica/python/python.h"
#include "ballistica/python/python_context_call_runnable.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
#include "ballistica/ui/ui.h"
namespace ballistica {
@ -499,8 +499,8 @@ auto PyScreenMessage(PyObject* self, PyObject* args, PyObject* keywds)
PyExcType::kValue);
}
Scene* context_scene = Context::current().GetMutableScene();
GameStream* output_stream =
context_scene ? context_scene->GetGameStream() : nullptr;
SceneStream* output_stream =
context_scene ? context_scene->GetSceneStream() : nullptr;
Texture* texture = nullptr;
Texture* tint_texture = nullptr;

View File

@ -12,7 +12,6 @@
#include "ballistica/dynamics/material/material_action.h"
#include "ballistica/game/connection/connection_set.h"
#include "ballistica/game/connection/connection_to_client.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/host_activity.h"
#include "ballistica/generic/json.h"
#include "ballistica/graphics/graphics.h"
@ -25,6 +24,7 @@
#include "ballistica/scene/node/node.h"
#include "ballistica/scene/node/node_type.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -341,7 +341,7 @@ auto PyEmitFx(PyObject* self, PyObject* args, PyObject* keywds) -> PyObject* {
e.spread = spread;
e.chunk_type = chunk_type;
e.tendril_type = tendril_type;
if (GameStream* output_stream = scene->GetGameStream()) {
if (SceneStream* output_stream = scene->GetSceneStream()) {
output_stream->EmitBGDynamics(e);
}
#if !BA_HEADLESS_BUILD
@ -489,27 +489,6 @@ auto PyGetGameRoster(PyObject* self, PyObject* args, PyObject* keywds)
BA_PYTHON_CATCH;
}
auto PyGetScoresToBeat(PyObject* self, PyObject* args, PyObject* keywds)
-> PyObject* {
BA_PYTHON_TRY;
const char* level;
const char* config;
PyObject* callback_obj = Py_None;
static const char* kwlist[] = {"level", "config", "callback", nullptr};
if (!PyArg_ParseTupleAndKeywords(args, keywds, "ssO",
const_cast<char**>(kwlist), &level, &config,
&callback_obj)) {
return nullptr;
}
// Allocate a Call object for this and pass its pointer to the main thread;
// we'll ref/de-ref it when it comes back.
auto* call = Object::NewDeferred<PythonContextCall>(callback_obj);
g_app_flavor->PushGetScoresToBeatCall(level, config, call);
Py_RETURN_NONE;
BA_PYTHON_CATCH;
}
auto PySetDebugSpeedExponent(PyObject* self, PyObject* args) -> PyObject* {
BA_PYTHON_TRY;
int speed;
@ -627,13 +606,6 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector<PyMethodDef> {
"Sets the debug speed scale for the game. Actual speed is "
"pow(2,speed)."},
{"get_scores_to_beat", (PyCFunction)PyGetScoresToBeat,
METH_VARARGS | METH_KEYWORDS,
"get_scores_to_beat(level: str, config: str, callback: Callable) -> "
"None\n"
"\n"
"(internal)"},
{"get_game_roster", (PyCFunction)PyGetGameRoster,
METH_VARARGS | METH_KEYWORDS,
"get_game_roster() -> list[dict[str, Any]]\n"

View File

@ -10,7 +10,6 @@
#include "ballistica/app/app_flavor.h"
#include "ballistica/assets/assets.h"
#include "ballistica/assets/component/texture.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/host_activity.h"
#include "ballistica/game/session/host_session.h"
#include "ballistica/game/session/replay_client_session.h"
@ -21,6 +20,7 @@
#include "ballistica/python/python_context_call_runnable.h"
#include "ballistica/python/python_sys.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {

View File

@ -11,10 +11,8 @@
#include "ballistica/core/thread.h"
#include "ballistica/dynamics/material/material.h"
#include "ballistica/game/friend_score_set.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/host_activity.h"
#include "ballistica/game/player.h"
#include "ballistica/game/score_to_beat.h"
#include "ballistica/game/v1_account.h"
#include "ballistica/graphics/graphics.h"
#include "ballistica/input/device/joystick.h"
@ -47,6 +45,7 @@
#include "ballistica/python/python_command.h"
#include "ballistica/python/python_context_call_runnable.h"
#include "ballistica/scene/node/node_attribute.h"
#include "ballistica/scene/scene_stream.h"
#include "ballistica/ui/ui.h"
#include "ballistica/ui/widget/text_widget.h"
@ -1275,33 +1274,6 @@ void Python::HandleLocalChatMessage(const std::string& message) {
obj(ObjID::kHandleLocalChatMessageCall).Call(args);
}
void Python::DispatchScoresToBeatResponse(
bool success, const std::list<ScoreToBeat>& scores_to_beat,
void* callback_in) {
// callback_in was a newly allocated PythonContextCall.
// This will make it ref-counted so it'll die when we're done with it
auto callback(
Object::MakeRefCounted(static_cast<PythonContextCall*>(callback_in)));
// Empty type denotes error.
if (!success) {
PythonRef args(Py_BuildValue("(O)", Py_None), PythonRef::kSteal);
callback->Run(args);
} else {
PyObject* py_list = PyList_New(0);
for (const auto& i : scores_to_beat) {
PyObject* val = Py_BuildValue("{sssssssd}", "player", i.player.c_str(),
"type", i.type.c_str(), "value",
i.value.c_str(), "time", i.time);
PyList_Append(py_list, val);
Py_DECREF(val);
}
PythonRef args(Py_BuildValue("(O)", py_list), PythonRef::kSteal);
Py_DECREF(py_list);
callback->Run(args);
}
}
// Put together a node message with all args on the provided tuple (starting
// with arg_offset) returns false on failure, true on success.
void Python::DoBuildNodeMessage(PyObject* args, int arg_offset, Buffer<char>* b,
@ -1506,7 +1478,7 @@ auto Python::GetPythonFileLocation(bool pretty) -> std::string {
void Python::SetNodeAttr(Node* node, const char* attr_name,
PyObject* value_obj) {
assert(node);
GameStream* out_stream = node->scene()->GetGameStream();
SceneStream* out_stream = node->scene()->GetSceneStream();
NodeAttribute attr = node->GetAttribute(attr_name);
switch (attr.type()) {
case NodeAttributeType::kFloat: {
@ -1820,7 +1792,7 @@ auto Python::DoNewNode(PyObject* args, PyObject* keywds) -> Node* {
// do.
try {
// Tell clients to do the same.
if (GameStream* output_stream = scene->GetGameStream()) {
if (SceneStream* output_stream = scene->GetSceneStream()) {
output_stream->NodeOnCreate(node);
}
node->OnCreate();

View File

@ -127,10 +127,6 @@ class Python {
/// Pass a chat message along to the python UI layer for handling..
auto HandleLocalChatMessage(const std::string& message) -> void;
auto DispatchScoresToBeatResponse(
bool success, const std::list<ScoreToBeat>& scores_to_beat,
void* PyCallback) -> void;
/// Pop up an in-game window to show a url (NOT in a browser).
auto ShowURL(const std::string& url) -> void;

View File

@ -3,11 +3,11 @@
#ifndef BALLISTICA_PYTHON_PYTHON_SYS_H_
#define BALLISTICA_PYTHON_PYTHON_SYS_H_
// Any code that actually runs any python logic should include this.
// This header pulls in the actual python includes and also defines some handy
// macros and functions for working with python objects.
// Any code that actually runs any Python logic should include this.
// This header pulls in the actual Python includes and also defines some handy
// macros and functions for working with Python objects.
// This is the ONE place we actually include python.
// This is the ONE place we actually include Python.
#include <Python.h>
#include <frameobject.h>
#include <weakrefobject.h>

View File

@ -3,13 +3,13 @@
#include "ballistica/scene/node/node.h"
#include "ballistica/dynamics/part.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/python/class/python_class_node.h"
#include "ballistica/python/python.h"
#include "ballistica/python/python_context_call.h"
#include "ballistica/scene/node/node_attribute.h"
#include "ballistica/scene/node/node_attribute_connection.h"
#include "ballistica/scene/scene.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -30,7 +30,7 @@ void Node::AddToScene(Scene* scene) {
// id_ = scene->next_node_id_++;
// our_iterator_ =
// scene->nodes_.insert(scene->nodes_.end(), Object::Ref<Node>(this));
if (GameStream* os = scene->GetGameStream()) {
if (SceneStream* os = scene->GetSceneStream()) {
os->AddNode(this);
}
}
@ -71,7 +71,7 @@ Node::~Node() {
// If we were going to an output stream, inform them of our demise.
assert(scene());
if (GameStream* output_stream = scene()->GetGameStream()) {
if (SceneStream* output_stream = scene()->GetSceneStream()) {
output_stream->RemoveNode(this);
}
}

View File

@ -8,7 +8,6 @@
#include "ballistica/dynamics/bg/bg_dynamics.h"
#include "ballistica/dynamics/dynamics.h"
#include "ballistica/dynamics/part.h"
#include "ballistica/game/game_stream.h"
#include "ballistica/game/player.h"
#include "ballistica/graphics/camera.h"
#include "ballistica/graphics/graphics.h"
@ -39,6 +38,7 @@
#include "ballistica/scene/node/text_node.h"
#include "ballistica/scene/node/texture_sequence_node.h"
#include "ballistica/scene/node/time_display_node.h"
#include "ballistica/scene/scene_stream.h"
namespace ballistica {
@ -106,7 +106,7 @@ void Scene::SetupNodeMessageType(const std::string& name, NodeMessageType val,
g_app->node_message_formats[static_cast<size_t>(val)] = format;
}
auto Scene::GetGameStream() const -> GameStream* {
auto Scene::GetSceneStream() const -> SceneStream* {
return output_stream_.get();
}
@ -372,7 +372,7 @@ auto Scene::NewNode(const std::string& type_string, const std::string& name,
return node.get(); // NOLINT
}
void Scene::Dump(GameStream* stream) {
void Scene::Dump(SceneStream* stream) {
assert(InLogicThread());
stream->AddScene(this);
@ -382,7 +382,7 @@ void Scene::Dump(GameStream* stream) {
}
}
void Scene::DumpNodes(GameStream* out) {
void Scene::DumpNodes(SceneStream* out) {
// Dumps commands to the output stream to recreate scene's nodes
// in their current state.
@ -623,7 +623,7 @@ auto Scene::GetCorrectionMessage(bool blended) -> std::vector<uint8_t> {
return message;
}
void Scene::SetOutputStream(GameStream* val) { output_stream_ = val; }
void Scene::SetOutputStream(SceneStream* val) { output_stream_ = val; }
auto Scene::AddNode(Node* node, int64_t* node_id, NodeList::iterator* i)
-> void {

View File

@ -53,7 +53,7 @@ class Scene : public Object {
auto DeleteNode(Node* node) -> void;
auto shutting_down() const -> bool { return shutting_down_; }
auto set_shutting_down(bool val) -> void { shutting_down_ = val; }
auto GetGameStream() const -> GameStream*;
auto GetSceneStream() const -> SceneStream*;
auto SetPlayerNode(int id, PlayerNode* n) -> void;
auto GetPlayerNode(int id) -> PlayerNode*;
auto use_fixed_vr_overlay() const -> bool { return use_fixed_vr_overlay_; }
@ -63,11 +63,11 @@ class Scene : public Object {
auto increment_bg_cover_count() -> void { bg_cover_count_++; }
auto decrement_bg_cover_count() -> void { bg_cover_count_--; }
auto has_bg_cover() const -> bool { return (bg_cover_count_ > 0); }
auto Dump(GameStream* out) -> void;
auto DumpNodes(GameStream* out) -> void;
auto Dump(SceneStream* out) -> void;
auto DumpNodes(SceneStream* out) -> void;
auto GetCorrectionMessage(bool blended) -> std::vector<uint8_t>;
auto SetOutputStream(GameStream* val) -> void;
auto SetOutputStream(SceneStream* val) -> void;
auto stream_id() const -> int64_t { return stream_id_; }
auto set_stream_id(int64_t val) -> void {
assert(stream_id_ == -1);
@ -91,7 +91,7 @@ class Scene : public Object {
GlobalsNode* globals_node_{}; // Current globals node (if any).
std::unordered_map<int, Object::WeakRef<PlayerNode> > player_nodes_;
int64_t stream_id_{-1};
Object::WeakRef<GameStream> output_stream_;
Object::WeakRef<SceneStream> output_stream_;
bool use_fixed_vr_overlay_{};
Context context_; // Context we were made in.
millisecs_t time_{};

View File

@ -1,6 +1,6 @@
// Released under the MIT License. See LICENSE for details.
#include "ballistica/game/game_stream.h"
#include "ballistica/scene/scene_stream.h"
#include "ballistica/app/app.h"
#include "ballistica/assets/assets_server.h"
@ -25,7 +25,7 @@
namespace ballistica {
GameStream::GameStream(HostSession* host_session, bool save_replay)
SceneStream::SceneStream(HostSession* host_session, bool save_replay)
: time_(0),
host_session_(host_session),
next_flush_time_(0),
@ -50,7 +50,7 @@ GameStream::GameStream(HostSession* host_session, bool save_replay)
}
}
GameStream::~GameStream() {
SceneStream::~SceneStream() {
// Ship our last commands (if it matters..)
Flush();
@ -117,17 +117,17 @@ GameStream::~GameStream() {
}
// Pull the current built-up message.
auto GameStream::GetOutMessage() const -> std::vector<uint8_t> {
auto SceneStream::GetOutMessage() const -> std::vector<uint8_t> {
assert(!host_session_); // this should only be getting used for
// standalone temp ones..
if (!out_command_.empty()) {
Log("Error: GameStream shutting down with non-empty outCommand");
Log("Error: SceneStream shutting down with non-empty outCommand");
}
return out_message_;
}
template <typename T>
auto GameStream::GetPointerCount(const std::vector<T*>& vec) -> size_t {
auto SceneStream::GetPointerCount(const std::vector<T*>& vec) -> size_t {
size_t count = 0;
auto size = vec.size();
@ -143,8 +143,8 @@ auto GameStream::GetPointerCount(const std::vector<T*>& vec) -> size_t {
// Given a vector of pointers, return an index to an available (nullptr) entry,
// expanding the vector if need be.
template <typename T>
auto GameStream::GetFreeIndex(std::vector<T*>* vec,
std::vector<size_t>* free_indices) -> size_t {
auto SceneStream::GetFreeIndex(std::vector<T*>* vec,
std::vector<size_t>* free_indices) -> size_t {
// If we have any free indices, use one of them.
if (!free_indices->empty()) {
size_t val = free_indices->back();
@ -159,8 +159,8 @@ auto GameStream::GetFreeIndex(std::vector<T*>* vec,
// Add an entry.
template <typename T>
void GameStream::Add(T* val, std::vector<T*>* vec,
std::vector<size_t>* free_indices) {
void SceneStream::Add(T* val, std::vector<T*>* vec,
std::vector<size_t>* free_indices) {
// This should only get used when we're being driven by the host-session.
assert(host_session_);
assert(val);
@ -172,8 +172,8 @@ void GameStream::Add(T* val, std::vector<T*>* vec,
// Remove an entry.
template <typename T>
void GameStream::Remove(T* val, std::vector<T*>* vec,
std::vector<size_t>* free_indices) {
void SceneStream::Remove(T* val, std::vector<T*>* vec,
std::vector<size_t>* free_indices) {
assert(val);
assert(val->stream_id() >= 0);
assert(static_cast<int>(vec->size()) > val->stream_id());
@ -185,7 +185,7 @@ void GameStream::Remove(T* val, std::vector<T*>* vec,
val->clear_stream_id();
}
void GameStream::Fail() {
void SceneStream::Fail() {
Log("Error writing replay file");
if (writing_replay_) {
// Sanity check: We should only ever be writing one replay at once.
@ -199,9 +199,9 @@ void GameStream::Fail() {
}
}
void GameStream::Flush() {
void SceneStream::Flush() {
if (!out_command_.empty())
Log("Error: GameStream flushing down with non-empty outCommand");
Log("Error: SceneStream flushing down with non-empty outCommand");
if (!out_message_.empty()) {
ShipSessionCommandsMessage();
}
@ -211,7 +211,7 @@ void GameStream::Flush() {
#pragma ide diagnostic ignored "ConstantParameter"
// Writes just a command.
void GameStream::WriteCommand(SessionCommand cmd) {
void SceneStream::WriteCommand(SessionCommand cmd) {
assert(out_command_.empty());
// For now just use full size values.
@ -224,7 +224,7 @@ void GameStream::WriteCommand(SessionCommand cmd) {
#pragma clang diagnostic pop
// Writes a command plus an int to the stream, using whatever size is optimal.
void GameStream::WriteCommandInt32(SessionCommand cmd, int32_t value) {
void SceneStream::WriteCommandInt32(SessionCommand cmd, int32_t value) {
assert(out_command_.empty());
// For now just use full size values.
@ -236,8 +236,8 @@ void GameStream::WriteCommandInt32(SessionCommand cmd, int32_t value) {
memcpy(ptr, vals, 4);
}
void GameStream::WriteCommandInt32_2(SessionCommand cmd, int32_t value1,
int32_t value2) {
void SceneStream::WriteCommandInt32_2(SessionCommand cmd, int32_t value1,
int32_t value2) {
assert(out_command_.empty());
// For now just use full size vals.
@ -249,8 +249,8 @@ void GameStream::WriteCommandInt32_2(SessionCommand cmd, int32_t value1,
memcpy(ptr, vals, 8);
}
void GameStream::WriteCommandInt32_3(SessionCommand cmd, int32_t value1,
int32_t value2, int32_t value3) {
void SceneStream::WriteCommandInt32_3(SessionCommand cmd, int32_t value1,
int32_t value2, int32_t value3) {
assert(out_command_.empty());
// For now just use full size vals.
@ -262,9 +262,9 @@ void GameStream::WriteCommandInt32_3(SessionCommand cmd, int32_t value1,
memcpy(ptr, vals, 12);
}
void GameStream::WriteCommandInt32_4(SessionCommand cmd, int32_t value1,
int32_t value2, int32_t value3,
int32_t value4) {
void SceneStream::WriteCommandInt32_4(SessionCommand cmd, int32_t value1,
int32_t value2, int32_t value3,
int32_t value4) {
assert(out_command_.empty());
// For now just use full size vals.
@ -280,33 +280,33 @@ void GameStream::WriteCommandInt32_4(SessionCommand cmd, int32_t value1,
// adding these placeholders for if/when we do.
// They will also catch values greater than 32 bits in debug mode.
// We'll need a protocol update to add support for 64 bit over the wire.
void GameStream::WriteCommandInt64(SessionCommand cmd, int64_t value) {
void SceneStream::WriteCommandInt64(SessionCommand cmd, int64_t value) {
WriteCommandInt32(cmd, static_cast_check_fit<int32_t>(value));
}
void GameStream::WriteCommandInt64_2(SessionCommand cmd, int64_t value1,
int64_t value2) {
void SceneStream::WriteCommandInt64_2(SessionCommand cmd, int64_t value1,
int64_t value2) {
WriteCommandInt32_2(cmd, static_cast_check_fit<int32_t>(value1),
static_cast_check_fit<int32_t>(value2));
}
void GameStream::WriteCommandInt64_3(SessionCommand cmd, int64_t value1,
int64_t value2, int64_t value3) {
void SceneStream::WriteCommandInt64_3(SessionCommand cmd, int64_t value1,
int64_t value2, int64_t value3) {
WriteCommandInt32_3(cmd, static_cast_check_fit<int32_t>(value1),
static_cast_check_fit<int32_t>(value2),
static_cast_check_fit<int32_t>(value3));
}
void GameStream::WriteCommandInt64_4(SessionCommand cmd, int64_t value1,
int64_t value2, int64_t value3,
int64_t value4) {
void SceneStream::WriteCommandInt64_4(SessionCommand cmd, int64_t value1,
int64_t value2, int64_t value3,
int64_t value4) {
WriteCommandInt32_4(cmd, static_cast_check_fit<int32_t>(value1),
static_cast_check_fit<int32_t>(value2),
static_cast_check_fit<int32_t>(value3),
static_cast_check_fit<int32_t>(value4));
}
void GameStream::WriteString(const std::string& s) {
void SceneStream::WriteString(const std::string& s) {
// Write length int.
auto string_size = s.size();
auto size = out_command_.size();
@ -317,13 +317,13 @@ void GameStream::WriteString(const std::string& s) {
}
}
void GameStream::WriteFloat(float val) {
void SceneStream::WriteFloat(float val) {
auto size = static_cast<int>(out_command_.size());
out_command_.resize(size + sizeof(val));
memcpy(&out_command_[size], &val, 4);
}
void GameStream::WriteFloats(size_t count, const float* vals) {
void SceneStream::WriteFloats(size_t count, const float* vals) {
assert(count > 0);
auto size = out_command_.size();
size_t vals_size = sizeof(float) * count;
@ -331,7 +331,7 @@ void GameStream::WriteFloats(size_t count, const float* vals) {
memcpy(&(out_command_[size]), vals, vals_size);
}
void GameStream::WriteInts32(size_t count, const int32_t* vals) {
void SceneStream::WriteInts32(size_t count, const int32_t* vals) {
assert(count > 0);
auto size = out_command_.size();
size_t vals_size = sizeof(int32_t) * count;
@ -339,7 +339,7 @@ void GameStream::WriteInts32(size_t count, const int32_t* vals) {
memcpy(&(out_command_[size]), vals, vals_size);
}
void GameStream::WriteInts64(size_t count, const int64_t* vals) {
void SceneStream::WriteInts64(size_t count, const int64_t* vals) {
// FIXME: we don't actually support writing 64 bit values to the wire
// at the moment; will need a protocol update for that.
// This is just implemented as a placeholder.
@ -350,7 +350,7 @@ void GameStream::WriteInts64(size_t count, const int64_t* vals) {
WriteInts32(count, vals32.data());
}
void GameStream::WriteChars(size_t count, const char* vals) {
void SceneStream::WriteChars(size_t count, const char* vals) {
assert(count > 0);
auto size = out_command_.size();
auto vals_size = static_cast<size_t>(count);
@ -358,7 +358,7 @@ void GameStream::WriteChars(size_t count, const char* vals) {
memcpy(&(out_command_[size]), vals, vals_size);
}
void GameStream::ShipSessionCommandsMessage() {
void SceneStream::ShipSessionCommandsMessage() {
BA_PRECONDITION(!out_message_.empty());
// Send this message to all client-connections we're attached to.
@ -372,7 +372,7 @@ void GameStream::ShipSessionCommandsMessage() {
last_send_time_ = GetRealTime();
}
void GameStream::AddMessageToReplay(const std::vector<uint8_t>& message) {
void SceneStream::AddMessageToReplay(const std::vector<uint8_t>& message) {
assert(writing_replay_);
assert(g_assets_server);
@ -392,7 +392,7 @@ void GameStream::AddMessageToReplay(const std::vector<uint8_t>& message) {
g_assets_server->PushAddMessageToReplayCall(message);
}
void GameStream::SendPhysicsCorrection(bool blend) {
void SceneStream::SendPhysicsCorrection(bool blend) {
assert(host_session_);
std::vector<std::vector<uint8_t> > messages;
@ -410,7 +410,7 @@ void GameStream::SendPhysicsCorrection(bool blend) {
}
}
void GameStream::EndCommand(bool is_time_set) {
void SceneStream::EndCommand(bool is_time_set) {
assert(!out_command_.empty());
int out_message_size;
@ -456,7 +456,7 @@ void GameStream::EndCommand(bool is_time_set) {
out_command_.clear();
}
auto GameStream::IsValidScene(Scene* s) -> bool {
auto SceneStream::IsValidScene(Scene* s) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -465,7 +465,7 @@ auto GameStream::IsValidScene(Scene* s) -> bool {
&& scenes_[s->stream_id()] == s);
}
auto GameStream::IsValidNode(Node* n) -> bool {
auto SceneStream::IsValidNode(Node* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -474,7 +474,7 @@ auto GameStream::IsValidNode(Node* n) -> bool {
&& nodes_[n->stream_id()] == n);
}
auto GameStream::IsValidTexture(Texture* n) -> bool {
auto SceneStream::IsValidTexture(Texture* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -483,7 +483,7 @@ auto GameStream::IsValidTexture(Texture* n) -> bool {
&& textures_[n->stream_id()] == n);
}
auto GameStream::IsValidModel(Model* n) -> bool {
auto SceneStream::IsValidModel(Model* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -492,7 +492,7 @@ auto GameStream::IsValidModel(Model* n) -> bool {
&& models_[n->stream_id()] == n);
}
auto GameStream::IsValidSound(Sound* n) -> bool {
auto SceneStream::IsValidSound(Sound* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -501,7 +501,7 @@ auto GameStream::IsValidSound(Sound* n) -> bool {
&& sounds_[n->stream_id()] == n);
}
auto GameStream::IsValidData(Data* n) -> bool {
auto SceneStream::IsValidData(Data* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -510,7 +510,7 @@ auto GameStream::IsValidData(Data* n) -> bool {
&& datas_[n->stream_id()] == n);
}
auto GameStream::IsValidCollideModel(CollideModel* n) -> bool {
auto SceneStream::IsValidCollideModel(CollideModel* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -519,7 +519,7 @@ auto GameStream::IsValidCollideModel(CollideModel* n) -> bool {
&& collide_models_[n->stream_id()] == n);
}
auto GameStream::IsValidMaterial(Material* n) -> bool {
auto SceneStream::IsValidMaterial(Material* n) -> bool {
if (!host_session_) {
return true; // We don't build lists in this mode so can't verify this.
}
@ -528,13 +528,13 @@ auto GameStream::IsValidMaterial(Material* n) -> bool {
&& materials_[n->stream_id()] == n);
}
void GameStream::SetTime(millisecs_t t) {
void SceneStream::SetTime(millisecs_t t) {
if (time_ == t) {
return; // Ignore redundants.
}
millisecs_t diff = t - time_;
if (diff > 255) {
Log("Error: GameStream got time diff > 255; not expected.");
Log("Error: SceneStream got time diff > 255; not expected.");
diff = 255;
}
WriteCommandInt64(SessionCommand::kBaseTimeStep, diff);
@ -542,7 +542,7 @@ void GameStream::SetTime(millisecs_t t) {
EndCommand(true);
}
void GameStream::AddScene(Scene* s) {
void SceneStream::AddScene(Scene* s) {
// Host mode.
if (host_session_) {
Add(s, &scenes_, &free_indices_scene_graphs_);
@ -556,19 +556,19 @@ void GameStream::AddScene(Scene* s) {
EndCommand();
}
void GameStream::RemoveScene(Scene* s) {
void SceneStream::RemoveScene(Scene* s) {
WriteCommandInt64(SessionCommand::kRemoveSceneGraph, s->stream_id());
Remove(s, &scenes_, &free_indices_scene_graphs_);
EndCommand();
}
void GameStream::StepScene(Scene* s) {
void SceneStream::StepScene(Scene* s) {
assert(IsValidScene(s));
WriteCommandInt64(SessionCommand::kStepSceneGraph, s->stream_id());
EndCommand();
}
void GameStream::AddNode(Node* n) {
void SceneStream::AddNode(Node* n) {
assert(n);
if (host_session_) {
Add(n, &nodes_, &free_indices_nodes_);
@ -583,26 +583,26 @@ void GameStream::AddNode(Node* n) {
EndCommand();
}
void GameStream::NodeOnCreate(Node* n) {
void SceneStream::NodeOnCreate(Node* n) {
assert(IsValidNode(n));
WriteCommandInt64(SessionCommand::kNodeOnCreate, n->stream_id());
EndCommand();
}
void GameStream::SetForegroundScene(Scene* sg) {
void SceneStream::SetForegroundScene(Scene* sg) {
assert(IsValidScene(sg));
WriteCommandInt64(SessionCommand::kSetForegroundSceneGraph, sg->stream_id());
EndCommand();
}
void GameStream::RemoveNode(Node* n) {
void SceneStream::RemoveNode(Node* n) {
assert(IsValidNode(n));
WriteCommandInt64(SessionCommand::kRemoveNode, n->stream_id());
Remove(n, &nodes_, &free_indices_nodes_);
EndCommand();
}
void GameStream::AddTexture(Texture* t) {
void SceneStream::AddTexture(Texture* t) {
// Register an ID in host mode.
if (host_session_) {
Add(t, &textures_, &free_indices_textures_);
@ -617,14 +617,14 @@ void GameStream::AddTexture(Texture* t) {
EndCommand();
}
void GameStream::RemoveTexture(Texture* t) {
void SceneStream::RemoveTexture(Texture* t) {
assert(IsValidTexture(t));
WriteCommandInt64(SessionCommand::kRemoveTexture, t->stream_id());
Remove(t, &textures_, &free_indices_textures_);
EndCommand();
}
void GameStream::AddModel(Model* t) {
void SceneStream::AddModel(Model* t) {
// Register an ID in host mode.
if (host_session_) {
Add(t, &models_, &free_indices_models_);
@ -639,14 +639,14 @@ void GameStream::AddModel(Model* t) {
EndCommand();
}
void GameStream::RemoveModel(Model* t) {
void SceneStream::RemoveModel(Model* t) {
assert(IsValidModel(t));
WriteCommandInt64(SessionCommand::kRemoveModel, t->stream_id());
Remove(t, &models_, &free_indices_models_);
EndCommand();
}
void GameStream::AddSound(Sound* t) {
void SceneStream::AddSound(Sound* t) {
// Register an ID in host mode.
if (host_session_) {
Add(t, &sounds_, &free_indices_sounds_);
@ -661,14 +661,14 @@ void GameStream::AddSound(Sound* t) {
EndCommand();
}
void GameStream::RemoveSound(Sound* t) {
void SceneStream::RemoveSound(Sound* t) {
assert(IsValidSound(t));
WriteCommandInt64(SessionCommand::kRemoveSound, t->stream_id());
Remove(t, &sounds_, &free_indices_sounds_);
EndCommand();
}
void GameStream::AddData(Data* t) {
void SceneStream::AddData(Data* t) {
// Register an ID in host mode.
if (host_session_) {
Add(t, &datas_, &free_indices_datas_);
@ -683,14 +683,14 @@ void GameStream::AddData(Data* t) {
EndCommand();
}
void GameStream::RemoveData(Data* t) {
void SceneStream::RemoveData(Data* t) {
assert(IsValidData(t));
WriteCommandInt64(SessionCommand::kRemoveData, t->stream_id());
Remove(t, &datas_, &free_indices_datas_);
EndCommand();
}
void GameStream::AddCollideModel(CollideModel* t) {
void SceneStream::AddCollideModel(CollideModel* t) {
if (host_session_) {
Add(t, &collide_models_, &free_indices_collide_models_);
} else {
@ -704,14 +704,14 @@ void GameStream::AddCollideModel(CollideModel* t) {
EndCommand();
}
void GameStream::RemoveCollideModel(CollideModel* t) {
void SceneStream::RemoveCollideModel(CollideModel* t) {
assert(IsValidCollideModel(t));
WriteCommandInt64(SessionCommand::kRemoveCollideModel, t->stream_id());
Remove(t, &collide_models_, &free_indices_collide_models_);
EndCommand();
}
void GameStream::AddMaterial(Material* m) {
void SceneStream::AddMaterial(Material* m) {
if (host_session_) {
Add(m, &materials_, &free_indices_materials_);
} else {
@ -724,14 +724,14 @@ void GameStream::AddMaterial(Material* m) {
EndCommand();
}
void GameStream::RemoveMaterial(Material* m) {
void SceneStream::RemoveMaterial(Material* m) {
assert(IsValidMaterial(m));
WriteCommandInt64(SessionCommand::kRemoveMaterial, m->stream_id());
Remove(m, &materials_, &free_indices_materials_);
EndCommand();
}
void GameStream::AddMaterialComponent(Material* m, MaterialComponent* c) {
void SceneStream::AddMaterialComponent(Material* m, MaterialComponent* c) {
assert(IsValidMaterial(m));
auto flattened_size = c->GetFlattenedSize();
assert(flattened_size > 0 && flattened_size < 10000);
@ -750,10 +750,10 @@ void GameStream::AddMaterialComponent(Material* m, MaterialComponent* c) {
EndCommand();
}
void GameStream::ConnectNodeAttribute(Node* src_node,
NodeAttributeUnbound* src_attr,
Node* dst_node,
NodeAttributeUnbound* dst_attr) {
void SceneStream::ConnectNodeAttribute(Node* src_node,
NodeAttributeUnbound* src_attr,
Node* dst_node,
NodeAttributeUnbound* dst_attr) {
assert(IsValidNode(src_node));
assert(IsValidNode(dst_node));
assert(src_attr->node_type() == src_node->type());
@ -768,7 +768,7 @@ void GameStream::ConnectNodeAttribute(Node* src_node,
EndCommand();
}
void GameStream::NodeMessage(Node* node, const char* buffer, size_t size) {
void SceneStream::NodeMessage(Node* node, const char* buffer, size_t size) {
assert(IsValidNode(node));
BA_PRECONDITION(size > 0 && size < 10000);
WriteCommandInt64_2(SessionCommand::kNodeMessage, node->stream_id(),
@ -777,7 +777,7 @@ void GameStream::NodeMessage(Node* node, const char* buffer, size_t size) {
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, float val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, float val) {
assert(IsValidNode(attr.node));
WriteCommandInt64_2(SessionCommand::kSetNodeAttrFloat, attr.node->stream_id(),
attr.index());
@ -785,22 +785,22 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr, float val) {
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, int64_t val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, int64_t val) {
assert(IsValidNode(attr.node));
WriteCommandInt64_3(SessionCommand::kSetNodeAttrInt32, attr.node->stream_id(),
attr.index(), val);
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, bool val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, bool val) {
assert(IsValidNode(attr.node));
WriteCommandInt64_3(SessionCommand::kSetNodeAttrBool, attr.node->stream_id(),
attr.index(), val);
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<float>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<float>& vals) {
assert(IsValidNode(attr.node));
size_t count{vals.size()};
WriteCommandInt64_3(SessionCommand::kSetNodeAttrFloats,
@ -812,8 +812,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<int64_t>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<int64_t>& vals) {
assert(IsValidNode(attr.node));
size_t count{vals.size()};
WriteCommandInt64_3(SessionCommand::kSetNodeAttrInt32s,
@ -825,8 +825,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::string& val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::string& val) {
assert(IsValidNode(attr.node));
WriteCommandInt64_2(SessionCommand::kSetNodeAttrString,
attr.node->stream_id(), attr.index());
@ -834,7 +834,7 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, Node* val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, Node* val) {
assert(IsValidNode(attr.node));
if (val) {
assert(IsValidNode(val));
@ -850,8 +850,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr, Node* val) {
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Node*>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Node*>& vals) {
assert(IsValidNode(attr.node));
if (g_buildconfig.debug_build()) {
for (auto val : vals) {
@ -878,12 +878,12 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, Player* val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, Player* val) {
// cout << "SET PLAYER ATTR " << attr.getIndex() << endl;
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Material*>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Material*>& vals) {
assert(IsValidNode(attr.node));
if (g_buildconfig.debug_build()) {
for (auto val : vals) {
@ -911,7 +911,7 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, Texture* val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, Texture* val) {
if (val) {
assert(IsValidNode(attr.node));
assert(IsValidTexture(val));
@ -927,8 +927,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr, Texture* val) {
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Texture*>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Texture*>& vals) {
assert(IsValidNode(attr.node));
if (g_buildconfig.debug_build()) {
for (auto val : vals) {
@ -956,7 +956,7 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, Sound* val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, Sound* val) {
if (val) {
assert(IsValidNode(attr.node));
assert(IsValidSound(val));
@ -972,8 +972,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr, Sound* val) {
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Sound*>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Sound*>& vals) {
assert(IsValidNode(attr.node));
if (g_buildconfig.debug_build()) {
for (auto val : vals) {
@ -1001,7 +1001,7 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, Model* val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, Model* val) {
if (val) {
assert(IsValidNode(attr.node));
assert(IsValidModel(val));
@ -1017,8 +1017,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr, Model* val) {
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Model*>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<Model*>& vals) {
assert(IsValidNode(attr.node));
if (g_buildconfig.debug_build()) {
for (auto val : vals) {
@ -1045,7 +1045,7 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
}
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr, CollideModel* val) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr, CollideModel* val) {
if (val) {
assert(IsValidNode(attr.node));
assert(IsValidCollideModel(val));
@ -1060,8 +1060,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr, CollideModel* val) {
}
EndCommand();
}
void GameStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<CollideModel*>& vals) {
void SceneStream::SetNodeAttr(const NodeAttribute& attr,
const std::vector<CollideModel*>& vals) {
assert(IsValidNode(attr.node));
if (g_buildconfig.debug_build()) {
for (auto val : vals) {
@ -1089,8 +1089,8 @@ void GameStream::SetNodeAttr(const NodeAttribute& attr,
EndCommand();
}
void GameStream::PlaySoundAtPosition(Sound* sound, float volume, float x,
float y, float z) {
void SceneStream::PlaySoundAtPosition(Sound* sound, float volume, float x,
float y, float z) {
assert(IsValidSound(sound));
assert(IsValidScene(sound->scene()));
@ -1103,7 +1103,7 @@ void GameStream::PlaySoundAtPosition(Sound* sound, float volume, float x,
EndCommand();
}
void GameStream::EmitBGDynamics(const BGDynamicsEmission& e) {
void SceneStream::EmitBGDynamics(const BGDynamicsEmission& e) {
WriteCommandInt64_4(SessionCommand::kEmitBGDynamics,
static_cast<int64_t>(e.emit_type), e.count,
static_cast<int64_t>(e.chunk_type),
@ -1121,7 +1121,7 @@ void GameStream::EmitBGDynamics(const BGDynamicsEmission& e) {
EndCommand();
}
void GameStream::PlaySound(Sound* sound, float volume) {
void SceneStream::PlaySound(Sound* sound, float volume) {
assert(IsValidSound(sound));
assert(IsValidScene(sound->scene()));
@ -1131,11 +1131,11 @@ void GameStream::PlaySound(Sound* sound, float volume) {
EndCommand();
}
void GameStream::ScreenMessageTop(const std::string& val, float r, float g,
float b, Texture* texture,
Texture* tint_texture, float tint_r,
float tint_g, float tint_b, float tint2_r,
float tint2_g, float tint2_b) {
void SceneStream::ScreenMessageTop(const std::string& val, float r, float g,
float b, Texture* texture,
Texture* tint_texture, float tint_r,
float tint_g, float tint_b, float tint2_r,
float tint2_g, float tint2_b) {
assert(IsValidTexture(texture));
assert(IsValidTexture(tint_texture));
assert(IsValidScene(texture->scene()));
@ -1157,8 +1157,8 @@ void GameStream::ScreenMessageTop(const std::string& val, float r, float g,
EndCommand();
}
void GameStream::ScreenMessageBottom(const std::string& val, float r, float g,
float b) {
void SceneStream::ScreenMessageBottom(const std::string& val, float r, float g,
float b) {
WriteCommand(SessionCommand::kScreenMessageBottom);
WriteString(val);
float color[3];
@ -1169,27 +1169,27 @@ void GameStream::ScreenMessageBottom(const std::string& val, float r, float g,
EndCommand();
}
auto GameStream::GetSoundID(Sound* s) -> int64_t {
auto SceneStream::GetSoundID(Sound* s) -> int64_t {
assert(IsValidSound(s));
return s->stream_id();
}
auto GameStream::GetMaterialID(Material* m) -> int64_t {
auto SceneStream::GetMaterialID(Material* m) -> int64_t {
assert(IsValidMaterial(m));
return m->stream_id();
}
void GameStream::OnClientConnected(ConnectionToClient* c) {
void SceneStream::OnClientConnected(ConnectionToClient* c) {
// Sanity check - abort if its on either of our lists already.
for (auto& connections_to_client : connections_to_clients_) {
if (connections_to_client == c) {
Log("Error: GameStream::OnClientConnected() got duplicate connection.");
Log("Error: SceneStream::OnClientConnected() got duplicate connection.");
return;
}
}
for (auto& i : connections_to_clients_ignored_) {
if (i == c) {
Log("Error: GameStream::OnClientConnected() got duplicate connection.");
Log("Error: SceneStream::OnClientConnected() got duplicate connection.");
return;
}
}
@ -1208,7 +1208,7 @@ void GameStream::OnClientConnected(ConnectionToClient* c) {
// We create a temporary output stream just for the purpose of building
// a giant session-commands message to reconstruct everything in our
// host-session in its current form.
GameStream out(nullptr, false);
SceneStream out(nullptr, false);
// Ask the host-session that we came from to dump it's complete state.
host_session_->DumpFullState(&out);
@ -1226,7 +1226,7 @@ void GameStream::OnClientConnected(ConnectionToClient* c) {
}
}
void GameStream::OnClientDisconnected(ConnectionToClient* c) {
void SceneStream::OnClientDisconnected(ConnectionToClient* c) {
// Search for it on either our ignored or regular lists.
for (auto i = connections_to_clients_.begin();
i != connections_to_clients_.end(); i++) {
@ -1242,7 +1242,7 @@ void GameStream::OnClientDisconnected(ConnectionToClient* c) {
return;
}
}
Log("Error: GameStream::OnClientDisconnected() called for connection not on "
Log("Error: SceneStream::OnClientDisconnected() called for connection not on "
"lists");
}

View File

@ -1,7 +1,7 @@
// Released under the MIT License. See LICENSE for details.
#ifndef BALLISTICA_GAME_GAME_STREAM_H_
#define BALLISTICA_GAME_GAME_STREAM_H_
#ifndef BALLISTICA_SCENE_SCENE_STREAM_H_
#define BALLISTICA_SCENE_SCENE_STREAM_H_
#include <string>
#include <vector>
@ -13,10 +13,10 @@ namespace ballistica {
// A mechanism for dumping a live session or session-creation-commands to a
// stream of messages that can be saved to file or sent over the network.
class GameStream : public Object, public ClientControllerInterface {
class SceneStream : public Object, public ClientControllerInterface {
public:
GameStream(HostSession* host_session, bool save_replay);
~GameStream() override;
SceneStream(HostSession* host_session, bool save_replay);
~SceneStream() override;
auto SetTime(millisecs_t t) -> void;
auto AddScene(Scene* s) -> void;
auto RemoveScene(Scene* s) -> void;
@ -169,4 +169,4 @@ class GameStream : public Object, public ClientControllerInterface {
} // namespace ballistica
#endif // BALLISTICA_GAME_GAME_STREAM_H_
#endif // BALLISTICA_SCENE_SCENE_STREAM_H_