Files
UnrealEngineUWP/Engine/Plugins/Runtime/ReplicationGraph/Source/Public/BasicReplicationGraph.h
jake leonard 421ba6b76c Replication graph changes to allow for subconnection calculations as well, matching functionality of the netdriver system.
#rb: LouisPhilippe.Seguin, Jon.Nabozny

#ROBOMERGE-OWNER: ryan.vance
#ROBOMERGE-AUTHOR: jake.leonard
#ROBOMERGE-SOURCE: CL 5922969 via CL 5931747 via CL 5931993
#ROBOMERGE-BOT: DEVVR (Main -> Dev-VR)

[CL 5940444 by jake leonard in Dev-VR branch]
2019-04-17 13:17:48 -04:00

66 lines
2.3 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ReplicationGraph.h"
#include "BasicReplicationGraph.generated.h"
USTRUCT()
struct FConnectionAlwaysRelevantNodePair
{
GENERATED_BODY()
FConnectionAlwaysRelevantNodePair() { }
FConnectionAlwaysRelevantNodePair(UNetConnection* InConnection, UReplicationGraphNode_AlwaysRelevant_ForConnection* InNode) : NetConnection(InConnection), Node(InNode) { }
bool operator==(UNetConnection* InConnection) const;
UPROPERTY()
UNetConnection* NetConnection = nullptr;
UPROPERTY()
UReplicationGraphNode_AlwaysRelevant_ForConnection* Node = nullptr;
};
/**
* A basic implementation of replication graph. It only supports NetCullDistanceSquared, bAlwaysRelevant, bOnlyRelevantToOwner. These values cannot change per-actor at runtime.
* This is meant to provide a simple example implementation. More robust implementations will be required for more complex games. ShootGame is another example to check out.
*
* To enable this via ini:
* [/Script/OnlineSubsystemUtils.IpNetDriver]
* ReplicationDriverClassName="/Script/ReplicationGraph.BasicReplicationGraph"
*
**/
UCLASS(transient, config=Engine)
class UBasicReplicationGraph :public UReplicationGraph
{
GENERATED_BODY()
public:
UBasicReplicationGraph();
virtual void InitGlobalActorClassSettings() override;
virtual void InitGlobalGraphNodes() override;
virtual void InitConnectionGraphNodes(UNetReplicationGraphConnection* RepGraphConnection) override;
virtual void RouteAddNetworkActorToNodes(const FNewReplicatedActorInfo& ActorInfo, FGlobalActorReplicationInfo& GlobalInfo) override;
virtual void RouteRemoveNetworkActorToNodes(const FNewReplicatedActorInfo& ActorInfo) override;
virtual int32 ServerReplicateActors(float DeltaSeconds) override;
UPROPERTY()
UReplicationGraphNode_GridSpatialization2D* GridNode;
UPROPERTY()
UReplicationGraphNode_ActorList* AlwaysRelevantNode;
UPROPERTY()
TArray<FConnectionAlwaysRelevantNodePair> AlwaysRelevantForConnectionList;
/** Actors that are only supposed to replicate to their owning connection, but that did not have a connection on spawn */
UPROPERTY()
TArray<AActor*> ActorsWithoutNetConnection;
UReplicationGraphNode_AlwaysRelevant_ForConnection* GetAlwaysRelevantNodeForConnection(UNetConnection* Connection);
};