GASATHON/Project/Source/Gasa/GasaObject.h
Ed_ ad41867dc5 WIP: Boostrapping NetSlime
- Just a old name for a set of changes to make the game framework hardened for multiplayer as well as some ease of use functionality.
2024-04-23 01:10:02 -04:00

81 lines
2.7 KiB
C++

#pragma once
#include "GasaCommon.h"
#include "Networking/GasaNetLibrary.h"
#include "UObject/Object.h"
#include "GasaObject.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FGasaObjectEventSig);
// A UObject which supports replication and other features.
UCLASS( Blueprintable )
class GASA_API UGasaObject : public UObject
{
GENERATED_BODY()
public:
UGasaObject();
UFUNCTION(BlueprintPure)
FORCEINLINE AActor* GetOwningActor() const { return GetTypedOuter<AActor>(); };
UPROPERTY(BlueprintAssignable, Category="Lifetime")
FGasaObjectEventSig Event_OnDestroyed;
UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category="Lifetime")
virtual void Destroy();
virtual void OnDestroyed();
UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName = "On Destroyed"))
void BP_OnDestroyed();
#pragma region Replication
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Replication")
bool bReplicates;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Replication")
bool bDisconnectOnBadReplication ;
virtual bool ReplicateAsSubobject(AActor* ActorResponsible, UActorChannel* Channel, FOutBunch* Bunch, FReplicationFlags* RepFlags);
UFUNCTION(BlueprintCallable)
void SetIsReplicated(bool DesiredValue)
{
bReplicates = DesiredValue;
}
#pragma endregion Replication
#pragma region NetSlime
// NetSlime interface is generated by GasaGen/GasaGen_NetSlime.cpp
FORCEINLINE ENetworkMode GetNetworkMode() const { return Gasa::GetNetworkMode( this ); }
FORCEINLINE bool IsClient() const { return Gasa::IsClient( this ); }
FORCEINLINE bool IsListenServer() const { return Gasa::IsListenServer( this ); }
FORCEINLINE bool IsNetOwner() const { return Gasa::IsNetOwner( this ); }
FORCEINLINE bool IsServer() const { return Gasa::IsServer( this ); }
FORCEINLINE bool IsSimulatedProxy() const { return Gasa::IsSimulatedProxy( this ); }
FORCEINLINE void NetLog(
FString Message,
EGasaVerbosity Verbosity = EGasaVerbosity::Log,
FLogCategoryBase& Category = LogGasaNet,
bool DumpStack = false,
int32 Line = __builtin_LINE(),
ANSICHAR const* File = __builtin_FILE(),
ANSICHAR const* Func = __builtin_FUNCTION()
)
{
Gasa::NetLog( this, Message, Verbosity, Category, DumpStack, Line, File, Func );
}
#pragma endregion NetSlime
#pragma region UObject
bool CallRemoteFunction(UFunction* Function, void* Parms, FOutParmRec* OutParms, FFrame* Stack) override;
int32 GetFunctionCallspace(UFunction* Function, FFrame* Stack) override;
void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
bool IsSupportedForNetworking() const override;
#pragma endregion UObject
};