Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Commit

Permalink
Merging final GDK for Unreal 0.13.0 release
Browse files Browse the repository at this point in the history
Release 0.13.0
  • Loading branch information
gdk-for-unreal-bot authored May 17, 2021
2 parents 925bba1 + e40dace commit 7218cc0
Show file tree
Hide file tree
Showing 510 changed files with 27,660 additions and 8,727 deletions.
103 changes: 46 additions & 57 deletions .buildkite/premerge.steps.yaml
Original file line number Diff line number Diff line change
@@ -1,58 +1,65 @@
---
ci_version: &ci_version "1.1"
# This is designed to trap and retry failures because agent lost
# connection. Agent exits with -1 in this case.
agent_transients: &agent_transients
exit_status: -1
limit: 3

# BK system error
bk_system_error: &bk_system_error
exit_status: 255
limit: 3
# job was interrupted by a signal (e.g. ctrl+c etc)

# Job was interrupted by a signal (e.g. ctrl+c etc)
bk_interrupted_by_signal: &bk_interrupted_by_signal
exit_status: 15
limit: 3

script_runner: &script_runner
agents:
- "agent_count=8"
- "capable_of_building=platform"
- "environment=production"
- "machine_type=quarter"
- "permission_set=builder"
- "platform=linux"
- "queue=${CI_LINUX_BUILDER_QUEUE:-v4-2019-12-12-bk5225-daecba805768d787}"
- "scaler_version=2"
- "working_hours_time_zone=london"

windows: &windows
agents:
- "agent_count=1"
- "capable_of_building=gdk-for-unreal"
- "environment=production"
- "machine_type=single-high-cpu" # this name matches to SpatialOS node-size names
- "platform=windows"
- "permission_set=builder"
- "scaler_version=2"
- "queue=${CI_WINDOWS_BUILDER_QUEUE:-v4-20-11-18-224740-bk17641-0c4125be-d}"
retry:
automatic:
- <<: *agent_transients
- <<: *bk_system_error
- <<: *bk_interrupted_by_signal
timeout_in_minutes: 60
plugins:
- improbable-eng/taskkill#v4.4.1: ~

# NOTE: step labels turn into commit-status names like {org}/{repo}/{pipeline}/{step-label}, lower-case and hyphenated.
# These are then relied on to have stable names by other things, so once named, please beware renaming has consequences.
# Hook failure
bk_hook_failure: &bk_hook_failure
exit_status: 127
limit: 3

steps:
- label: "enforce-version-restrictions"
command: "ci/check-version-file.sh"
<<: *script_runner
# No point in running other steps if the listed versions are invalid
- wait: ~
# New build pipeline
# Trigger a 4.26 build
- trigger: "unrealgdkbuild-ci"
label: "gdk-ci-4.26"
async: false
build:
branch: *ci_version
message: "gdk-4.26 ${BUILDKITE_MESSAGE}"
env:
BUILD_TYPE: "GDK"
GDK_BRANCH: "${BUILDKITE_BRANCH}"
ENGINE_BRANCH: "${ENGINE_BRANCH_426:-4.26-SpatialOSUnrealGDK-0.13.0}" # NOTE: temp fix for new ci release interop issues
ENGINE_MAJOR: "4.26"
PROJECT_BRANCH: "${PROJECT_BRANCH:-0.13.0}" # NOTE: temp fix for new ci release interop issues
USE_FASTBUILD: "True"
IS_BUILDKITE_BUILD: "True"
BUILD_ANDROID: "False"
SKIP_TESTS: "False"
CLEAN_BUILD: "False"

# Trigger a 4.25 build
- trigger: "unrealgdkbuild-ci"
label: "gdk-ci-4.25"
async: false
build:
branch: *ci_version
message: "gdk-4.25 ${BUILDKITE_MESSAGE}"
env:
BUILD_TYPE: "GDK" # GDK or ENGINE
GDK_BRANCH: "${BUILDKITE_BRANCH}"
ENGINE_BRANCH: "${ENGINE_BRANCH_425:-4.25-SpatialOSUnrealGDK-0.13.0}" # NOTE: temp fix for new ci release interop issues
ENGINE_MAJOR: "4.25"
PROJECT_BRANCH: "${PROJECT_BRANCH:-0.13.0}" # NOTE: temp fix for new ci release interop issues
USE_FASTBUILD: "True"
IS_BUILDKITE_BUILD: "True"
BUILD_ANDROID: "False"
SKIP_TESTS: "False"
CLEAN_BUILD: "False"

# Trigger an Example Project build for any merges into master, preview or release branches of UnrealGDK
- trigger: "unrealgdkexampleproject-nightly"
Expand All @@ -63,21 +70,3 @@ steps:
env:
NIGHTLY_BUILD: "${NIGHTLY_BUILD:-false}"
GDK_BRANCH: "${BUILDKITE_BRANCH}"

- label: "generate-pipeline-steps"
commands:
- "ci/generate-and-upload-build-steps.sh"
<<: *script_runner

- wait: ~
continue_on_failure: true

- label: "upload-test-metrics"
if: build.env("NIGHTLY_BUILD") == "true"
command: "ci/upload-test-metrics.sh"
<<: *script_runner

- label: "slack-notify"
if: (build.env("SLACK_NOTIFY") == "true" || build.branch == "master") && build.env("SLACK_NOTIFY") != "false" && build.env("ENGINE_NET_TEST") != "true"
commands: "powershell ./ci/build-and-send-slack-notification.ps1"
<<: *windows
3 changes: 3 additions & 0 deletions .github/pull-request-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ How is this documented (for example: release note, upgrade guide, feature page,
If your change relies on a breaking engine change:
* Increment `SPATIAL_ENGINE_VERSION` in `Engine\Source\Runtime\Launch\Resources\SpatialVersion.h` (in the engine fork) as well as `SPATIAL_GDK_VERSION` in `SpatialGDK\Source\SpatialGDK\Public\Utils\EngineVersionCheck.h`. This helps others by providing a more helpful message during compilation to make sure the GDK and the Engine are up to date.

If your change modifies the schema of a snapshot, or the contents of a default snapshot:
* Update `SPATIAL_SNAPSHOT_VERSION_INC` (and optionally `SPATIAL_SNAPSHOT_SCHEMA_HASH`) in `SpatialGDK\Source\SpatialGDK\Public\SpatialConstants.h`. This helps others by providing runtime feedback that snapshots are out of date on servers and/or clients.

If your change updates `Setup.bat`, `Setup.sh`, core SDK version, any C# tools in `SpatialGDK\Build\Programs\Improbable.Unreal.Scripts`, or hand-written schema in `SpatialGDK\Extras\schema`:
* Increment the number in `RequireSetup`. This will automatically run `Setup.bat` or `Setup.sh` when the GDK is next pulled.

Expand Down
74 changes: 71 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,64 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [`x.y.z`] - Unreleased

## [`0.13.0`] - 2021-05-17
### Breaking changes:
- Removed support for Unreal Engine 4.24.
- `MaxRPCRingBufferSize` setting has been removed. This was previously used to specify the RPC ring buffer size when generating schema. Now, `DefaultRPCRingBufferSize` is used, and can be overridden per RPC type using `RPCRingBufferSizeOverrides`.
- `RPCRingBufferSizeMap` setting has been renamed to `RPCRingBufferSizeOverrides`.
- Changed the uniqueness of `FGameplayAbilitySpecHandle`.
- Previously, in a multi-server scenario, it was possible for different `FGameplayAbilitySpec`s to be assigned the same `FGameplayAbilitySpecHandle`. This meant that performing an action (e.g. activating or removing) on one ability could incorrectly perform that action on a different ability from the same Ability System Component (ASC).
- To fix this, `FGameplayAbilitySpecHandle`s are now generated by the Ability System Component (ASC) as abilities are granted to it. As a result, handles are only unique among all handles generated by that ASC.
- Consequences for your code:
- Since handles are no longer globally unique, you must not pass handles generated by one ASC to a different ASC.
- `FGameplayAbilitySpecHandle` instances are now invalid handles when constructed directly. The only way to get a valid handle is from giving an ability to an ASC.
- Granting an ability from an `FGameplayAbilitySpecDef` must now be done through the `FGameplayAbilitySpec::GiveAbilityFromSpecDef`/`GiveAbilityAndActivateOnceFromSpecDef` functions.
- Removed `USpatialStaticComponentView`; similar functionality is now provided in `ViewCoordinator`.
- We've removed `LaunchSpatial.bat` from the Example Project and Starter Template, having replaced it with an in-Editor workflow in order to maintain a native development experience.
- We've removed `DeployGame.bat` from the Example Project and Starter Template, having replaced it with an in-Editor workflow in order to maintain a native development experience.
- Members of a struct marked with `UPROPERTY(Handover)` will now produce an Unreal Header Tool error. This has never been required to allow them to replicate, it is sufficient to mark the containing struct as `Handover`. This now mirrors native Unreal behaviour with struct members marked as `UPROPERTY(Replicated)`, which also produces an error.

### Features:
- Added a message box notification when game is closed due to missing generated schema.
- Adapted SpatialDebugger to use SubViews.
- Added a function flag `AlwaysWrite` that allows specifying an RPC to use a separate channel and allow overwriting unacked RPC calls. This is currently limited to Unreliable Server RPCs on classes inheriting from `AActor`, and only one such RPC can be specified per actor. This feature is disabled by default and can be enabled via `bEnableAlwaysWriteRPCs` setting.
- Enhanced server logging to include load balancing and local worker info on startup.
- Added `Persistent` spatial class flag, typically used to override a non persistent base class.
- Added a button to generate functional test maps from the editor. It can be found under **Window** > **Generate test maps**.
- Added versioning to snapshots. Attempting to load an incompatible snapshot will fail, and output error logs that request the snapshot be regenerated.
- Add feature flag `bEnableInitialOnlyReplicationCondition` for `COND_InitialOnly` support.
- Added a function that allows the worker coordinator to periodically restart the simulated player clients with a bunch of parameters. This feature is disabled by default and can be enabled via `max_lifetime` setting.
- When you define your test scenario yaml file or call `StartCoordinator.sh`, please provide the arguments as below:
- `max_lifetime=90` will cap your simulated player clients' lives at 90 minutes.
- `min_lifetime=30` will allow your simulated player clients to live for at least 30 minutes.
- `use_new_simulated_player=1` will use a new simulated player id everytime that you start a simulated player client.
- Exposing worker upstream/downstream window sizes as GDK options for both clients and servers, (`ClientDownstreamWindowSizeBytes`, `ClientUpstreamWindowSizeBytes`) and (`ServerDownstreamWindowSizeBytes` and `ServerUpstreamWindowSizeBytes`).
- `bOnlyRelevantToOwner` is now supported. Ownership must be setup prior to the first replication of the `Actor` otherwise it will be ignored.
- Added a property to specify the test settings overrides config filename in the `World Settings` so that maps can share config files during automated testing. This replaces the option to automatically use the map name to determine the config filename.
- Added a `-FailOnNetworkFailure` flag that makes a Spatial-enabled game fail on any NetworkFailure.

### Bug fixes:
- Fixed the exception that was thrown when adding and removing components in Spatial component callbacks.
- Fixed incorrect allocation of entity ID from a non-authoritative server sending a cross-server RPC to a replicated level actor that hasn't been received from runtime.
- Fixed a regression where `bReplicates` would not be handed over correctly when dynamically set.
- Fixed an issue where resetting `Handover` property to default value would be omitted during `Handover` value replication
- Fixed `EntityPool` capacity overflow issue by removing the ability from the gdk settings to request a pool size larger than `int32_max`.
- Fixed an issue where components added to a scene actor would be replicated incorrectly.
- Fixed an issue where an actor channel was added to the wrong net connection.
- Fixed an issue where an auto generated launch config was giving the client worker too many permissions.
- Fixed an issue where authority was not correctly delegated to sublevel world settings prior to `BeginPlay` being issued. This resulted in duplicate world settings entities being created.
- Fixed an issue in the `SpatialTestCharacterMovement` test where trigger boxes sometimes wouldn't trigger.
- Fixed an issue where dynamic components without `Handover` or `OwnerOnly` data weren't created on receiving workers.
- Downgraded a check to an error in `SpatialSender::SendAuthorityIntentUpdate` when sending the same intent twice.
- Fixed a client crash that sometimes occurred when quickly unloading and reloading sublevels.
- Fixed a worker crash when calling RPCs on PlayerControllers with a certain timing.
- Fixed a warning about whitelisted files which was produced in the ExampleProject when building assemblies for cloud deployments.
- Fixed a bug where on initial replication, actors with replicated TArrays would not have the array cleared if the local state was not empty.
- Fixed an issue with replicating references to stably named dynamically added subobjects of dynamic actors.
- Fixed an issue during client logout where a client's corresponding Actors were not cleaned up correctly.
- Reverted a fix relating to the `dbghelp` file that previously caused the Editor to crash when loading the Session Front End. Our fix is no longer necessary, as Epic have fixed the issue and we've adopted their fix.
- Fixed issue with `SpatialDebugger` crashing when client travelling.

## [`0.12.0`] - 2021-02-01

### Breaking changes:
Expand Down Expand Up @@ -41,7 +99,7 @@ These functions and structs can be referenced in both code and blueprints and it
1. The time elapsed since the last sent Spatial position update is greater than or equal to `PositionUpdateThresholdMaxSeconds` AND the Actor has moved a non-zero amount.
1. The distance travelled since the last Spatial position update was sent is greater than or equal to `PositionUpdateThresholdMaxCentimeters`.
- New setting "Auto-stop local SpatialOS deployment" allows you to specify Never (doesn't automatically stop), OnEndPIE (when a PIE session is ended) and OnExitEditor (only when the editor is shutdown). The default is OnExitEditor.
- Added `OnActorReady` bindable callback triggered when SpatialOS entity data is first received after creating an entity corresponding to an Actor. This event indicates you can safely refer to the entity without risk of inconsistent state after worker crashes or snapshot restarts.
- Added `OnActorReady` bindable callback triggered when SpatialOS entity data is first received after creating an entity corresponding to an Actor. This event indicates you can safely refer to the entity without risk of inconsistent state after worker crashes or snapshot restarts. The callback contains the active actor's authority.
- Added support for the main build target having `TargetType.Client` (`<ProjectName>.Target.cs`). This target is automatically built with arguments `-client -noserver` passed to UAT when building from the editor. If you use the GDK build script or executable manually, you need to pass `-client -noserver` when building this target (for example, `BuildWorker.bat GDKShooter Win64 Development GDKShooter.uproject -client -noserver`).
- Added ability to specify `USpatialMultiWorkerSettings` class from command line. Specify a `SoftClassPath` via `-OverrideMultiWorkerSettingsClass=MultiWorkerSettingsClassName`.
- You can override the load balancing strategy in-editor so that it is different from the cloud. Set `Editor Multi Worker Settings Class` in the `World Settings` to specify the in-editor load balancing strategy. If it is not specified, the existing `Multi Worker Settings Class` defines both the local and cloud load balancing strategy.
Expand Down Expand Up @@ -88,6 +146,12 @@ These functions and structs can be referenced in both code and blueprints and it
- Unreal Engine version 4.26.0 is supported! Refer to https://documentation.improbable.io/gdk-for-unreal/docs/keep-your-gdk-up-to-date for versioning information and how to upgrade.
- Running with an out-of-date schema database reports a version warning when attempting to launch in editor.
- Reworked schema generation (incremental and full) pop-ups to be clearer.
- Added cross-server variants of ability activation functions on the Ability System Component.
- Added `SpatialSwitchHasAuthority` function to differentiate authoritative server, non-authoritative server, and clients. This can be called in code or used in blueprints that derive from actor.
- Added blueprint callable function `GetMaxDynamicallyAttachedSubobjectsPerClass` to `USpatialStatics` that gets the maximum dynamically attached subobjects per class as set in `SpatialGDKSettings`
- Simulated Player deployments no longer depend on DeploymentLauncher for readiness. You can now restart them via the Console and expect them to reconnect to your main deployment. DeploymentLauncher will also restart any crashed or incorrectly finished simulated players applications.
- Reworked schema generation (incremental + full) pop-ups to be clearer.
- Added `URemotePossessionComponent` to deal with Cross-Server Possession. Add this componenet to an AController, it will possess the Target Pawn after OnAuthorityGained. It can be implemented in C++ and Blueprint.

### Bug fixes:
- Fixed a bug that stopped the travel URL being used for initial Spatial connection if the command line arguments could not be used.
Expand Down Expand Up @@ -122,12 +186,16 @@ These functions and structs can be referenced in both code and blueprints and it
- Fixed client connection not being cleaned up when moving out of interest of a server.
- Fixed an assertion being triggered on async loaded entities due to queuing some component addition.
- Fixed a bug where consecutive invocations of CookAndGenerateSchemaCommandlet for different levels could fail when running the schema compiler.
- Fixed an issue where GameMode values won't be replicated between server workers if it's outside their Interest.
- Fixed gameplay cues receiving OnActive/WhileActive events twice on the predicting client in a multi-worker single-process PIE environment.
- Fixed an issue where a NetworkFailure won't be reported when connecting to a deployment that doesn't support dev_login with a developer token, and in some other configuration-dependent cases.
- Fixed a crash that occured when opening the session frontend with VS 16.8.0 using the bundled dbghelp.dll.
- Spatial Debugger no longer consumes input.
- Fixed an issue where we would always create a folder for a snapshots for a deployment even when we made no snapshots
- Fixed an issue in the SpatialTestCharacterMigration test where trigger boxes sometimes wouldn't trigger at low framerates.
- Spatial bundles no longer requested at startup if `UGeneralProjectSettings::bSpatialNetworking` is disabled.
- Fixed an issue where heartbeats could be ran on a controller after its destruction
- Fixed an issue that led to the launch config being left in non-classic style with certain engine and project path configurations
- Fixed an issue where heartbeats could be ran on a controller after its destruction.
- Fixed an issue that led to the launch config being left in non-classic style with certain engine and project path configurations.

## [`0.11.0`] - 2020-09-03

Expand Down
8 changes: 7 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,10 @@ We welcome any and all

## Coding standards

See the [GDK for Unreal C++ coding standards guide](./SpatialGDK/Documentation/contributions/unreal-gdk-coding-standards.md).
See the [GDK for Unreal C++ coding standards guide](https://documentation.improbable.io/gdk-for-unreal/docs/coding-standards).

## Branches
Most of our active development is in the `master` branch, so we prefer to take pull requests there. If you're contributing to our [Unreal Engine fork](https://github.com/improbableio/UnrealEngine/tree/4.26-SpatialOSUnrealGDK), please target your pull requests at the `4.26-SpatialOSUnrealGDK` branch, which is our development branch in that repo.

## Employe Guidance
If you work at Improbable see the [Contributor Space](https://improbableio.atlassian.net/l/c/A5aANDEh) for more guidance.
2 changes: 1 addition & 1 deletion RequireSetup
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Increment the below number whenever it is required to run Setup.bat as part of a new commit.
Our git hooks will detect this file has been updated and automatically run Setup.bat on pull.

74
85
Loading

0 comments on commit 7218cc0

Please sign in to comment.