Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Content/Resource/Texture/UI/RoleState/HealthBorder.uasset
Normal file
BIN
Content/Resource/Texture/UI/RoleState/HealthBorder.uasset
Normal file
Binary file not shown.
BIN
Content/Resource/Texture/UI/RoleState/HealthMask.uasset
Normal file
BIN
Content/Resource/Texture/UI/RoleState/HealthMask.uasset
Normal file
Binary file not shown.
Binary file not shown.
BIN
Content/Resource/Texture/UI/RoleState/SatietyBorder.uasset
Normal file
BIN
Content/Resource/Texture/UI/RoleState/SatietyBorder.uasset
Normal file
Binary file not shown.
BIN
Content/Resource/Texture/UI/RoleState/SatietyMask.uasset
Normal file
BIN
Content/Resource/Texture/UI/RoleState/SatietyMask.uasset
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -10,7 +10,10 @@ namespace UI.Level.StateBar;
|
|||||||
public class UBusyWidgetStateBar : UPW_MinimalWidget
|
public class UBusyWidgetStateBar : UPW_MinimalWidget
|
||||||
{
|
{
|
||||||
protected UBusyWidgetHealthBar? WBP_HealthBar { get { return GetWidget("WBP_HealthBar") as UBusyWidgetHealthBar; } }
|
protected UBusyWidgetHealthBar? WBP_HealthBar { get { return GetWidget("WBP_HealthBar") as UBusyWidgetHealthBar; } }
|
||||||
protected UBusyWidgetSatietyBar? WBP_SatietyBar { get { return GetWidget("WBP_SatietyBar") as UBusyWidgetSatietyBar; } }
|
// protected UBusyWidgetSatietyBar? WBP_SatietyBar { get { return GetWidget("WBP_SatietyBar") as UBusyWidgetSatietyBar; } }
|
||||||
|
|
||||||
|
protected List<UBusyWidgetSatietyBar> SatietyBars = new();
|
||||||
|
protected List<UBusyWidgetHealthBar> HealthBars = new();
|
||||||
|
|
||||||
protected UBusyRoleStateController? UIController;
|
protected UBusyRoleStateController? UIController;
|
||||||
|
|
||||||
@ -18,13 +21,26 @@ public class UBusyWidgetStateBar : UPW_MinimalWidget
|
|||||||
public override void Construct()
|
public override void Construct()
|
||||||
{
|
{
|
||||||
base.Construct();
|
base.Construct();
|
||||||
WBP_SatietyBar.SetSatietyConfig(100, 200);
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; ++i)
|
||||||
|
{
|
||||||
|
if (GetWidget($"WBP_SatietyBar_{i}") is UBusyWidgetSatietyBar Bar)
|
||||||
|
{
|
||||||
|
SatietyBars.Add(Bar);
|
||||||
|
}
|
||||||
|
if (GetWidget("WBP_HealthBar") is UBusyWidgetHealthBar HpBar)
|
||||||
|
{
|
||||||
|
HealthBars.Add(HpBar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UIController = UUIFunctionLibrary.GetUIController(this, "RoleState") as UBusyRoleStateController;
|
UIController = UUIFunctionLibrary.GetUIController(this, "RoleState") as UBusyRoleStateController;
|
||||||
|
|
||||||
InitRoleAttribute();
|
InitRoleAttribute();
|
||||||
UIController.OnAttributeChangeDelegate += OnAttributeChanged;
|
UIController.OnAttributeChangeDelegate += OnAttributeChanged;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitRoleAttribute()
|
public void InitRoleAttribute()
|
||||||
@ -34,7 +50,12 @@ public class UBusyWidgetStateBar : UPW_MinimalWidget
|
|||||||
float CurSatiety = UIController.GetControlledAttribute("Hunger");
|
float CurSatiety = UIController.GetControlledAttribute("Hunger");
|
||||||
float MaxSatiety = UIController.GetControlledAttribute("MaxHunger");
|
float MaxSatiety = UIController.GetControlledAttribute("MaxHunger");
|
||||||
WBP_HealthBar.SetHpConfig(CurHealth, MaxHealth);
|
WBP_HealthBar.SetHpConfig(CurHealth, MaxHealth);
|
||||||
WBP_SatietyBar.SetSatietyConfig(CurSatiety, MaxSatiety);
|
|
||||||
|
foreach (UBusyWidgetSatietyBar Bar in SatietyBars)
|
||||||
|
{
|
||||||
|
Bar.SetSatietyConfig(CurSatiety, MaxSatiety);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Destruct()
|
public override void Destruct()
|
||||||
@ -43,13 +64,22 @@ public class UBusyWidgetStateBar : UPW_MinimalWidget
|
|||||||
UIController.OnAttributeChangeDelegate -= OnAttributeChanged;
|
UIController.OnAttributeChangeDelegate -= OnAttributeChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetSatiety(float Satiety)
|
||||||
|
{
|
||||||
|
foreach(UBusyWidgetSatietyBar Bar in SatietyBars)
|
||||||
|
{
|
||||||
|
Bar.OnSatietyChanged(Satiety);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[UFunction()]
|
[UFunction()]
|
||||||
protected void OnAttributeChanged(FName AttributeName, float NewValue, float OldValue)
|
protected void OnAttributeChanged(FName AttributeName, float NewValue, float OldValue)
|
||||||
{
|
{
|
||||||
if (AttributeName == "Hunger")
|
if (AttributeName == "Hunger")
|
||||||
{
|
{
|
||||||
WBP_SatietyBar.OnSatietyChanged(NewValue);
|
SetSatiety(NewValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
#include "Camera/CameraComponent.h"
|
#include "Camera/CameraComponent.h"
|
||||||
#include "Data/BusyPawnConfig.h"
|
#include "Data/BusyPawnConfig.h"
|
||||||
#include "GameFramework/SpringArmComponent.h"
|
#include "GameFramework/SpringArmComponent.h"
|
||||||
|
#include "Level/RoleTask/BusyTaskSubSystem.h"
|
||||||
|
|
||||||
|
|
||||||
ABusyPlayerRole::ABusyPlayerRole()
|
ABusyPlayerRole::ABusyPlayerRole()
|
||||||
@ -45,3 +46,51 @@ void ABusyPlayerRole::InitPawnAttributes(const struct FBusyPawnBaseConfig& Confi
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ABusyPlayerRole::AddTask(UBusyRoleTaskBase* RoleTask)
|
||||||
|
{
|
||||||
|
if (RoleTask)
|
||||||
|
{
|
||||||
|
RoleTasks.Enqueue(RoleTask);
|
||||||
|
}
|
||||||
|
ProcessTasks();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ABusyPlayerRole::ProcessTasks()
|
||||||
|
{
|
||||||
|
const auto PeekPtr = RoleTasks.Peek();
|
||||||
|
if (PeekPtr == nullptr)
|
||||||
|
{
|
||||||
|
// 已经没有任务了,开启一个6s的回家定时器
|
||||||
|
if (GoBackTimerHandle.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GetWorldTimerManager().SetTimer(GoBackTimerHandle, [this]()
|
||||||
|
{
|
||||||
|
if (UBusyTaskSubSystem* SubSystem = UBusyTaskSubSystem::Get(this))
|
||||||
|
{
|
||||||
|
AddTask(SubSystem->CreateGoBackTask());
|
||||||
|
}
|
||||||
|
}, 6.0, false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GetWorldTimerManager().ClearTimer(GoBackTimerHandle); // 有任务的情况,清掉回家的定时器
|
||||||
|
const TWeakObjectPtr<UBusyRoleTaskBase>& Task = *PeekPtr;
|
||||||
|
if (!Task.Get()) // Task无效,pop掉再指向一次
|
||||||
|
{
|
||||||
|
RoleTasks.Pop();
|
||||||
|
ProcessTasks();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Task->IsActive()) // 正在激活, 直接返回
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Task->Activate(this, FOnBusyRoleTaskFinished::CreateLambda([this](bool bIsCancel)
|
||||||
|
{
|
||||||
|
RoleTasks.Pop();
|
||||||
|
ProcessTasks();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -109,6 +109,7 @@ void UBusyPawnMovement::MoveTick(const float DeltaTime)
|
|||||||
if (NewLocation.Equals(CurrentLocation))
|
if (NewLocation.Equals(CurrentLocation))
|
||||||
{
|
{
|
||||||
BusyMoveState = EBusyMoveState::None;
|
BusyMoveState = EBusyMoveState::None;
|
||||||
|
OnMoveFinished.Broadcast();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
#include "EnhancedInput/Public/EnhancedInputSubsystems.h"
|
#include "EnhancedInput/Public/EnhancedInputSubsystems.h"
|
||||||
#include "Level/LevelPlayerState.h"
|
#include "Level/LevelPlayerState.h"
|
||||||
#include "EnhancedInput/Public/EnhancedInputComponent.h"
|
#include "EnhancedInput/Public/EnhancedInputComponent.h"
|
||||||
|
#include "Level/RoleTask/BusyTaskSubSystem.h"
|
||||||
|
|
||||||
|
|
||||||
inline static void BindEnhancedInputAction(UEnhancedInputComponent* EnhancedInput, const UInputAction* Action, UObject* Target, const FName& Callback)
|
inline static void BindEnhancedInputAction(UEnhancedInputComponent* EnhancedInput, const UInputAction* Action, UObject* Target, const FName& Callback)
|
||||||
@ -181,6 +182,20 @@ void ALevelPlayerController::OnSwitchRole(const FInputActionValue& Value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ALevelPlayerController::OnMove(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
if (ABusyPlayerRole* ControlledRole = GetControlledRole())
|
||||||
|
{
|
||||||
|
if (UBusyTaskSubSystem* SubSystem = UBusyTaskSubSystem::Get(this))
|
||||||
|
{
|
||||||
|
if (FVector2D CursorPosition; GetCursorPosition(CursorPosition))
|
||||||
|
{
|
||||||
|
ControlledRole->AddTask(SubSystem->CreateMoveTask(CursorPosition));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ALevelPlayerController::OnRoleSkillTriggered(FGameplayTag GameplayTag)
|
void ALevelPlayerController::OnRoleSkillTriggered(FGameplayTag GameplayTag)
|
||||||
{
|
{
|
||||||
AActor* ControlledRole = GetControlledRole();
|
AActor* ControlledRole = GetControlledRole();
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
#include "Level/RoleTask/BusyRoleMoveTask.h"
|
||||||
|
#include "Level/Actor/BusyPlayerRole.h"
|
||||||
|
|
||||||
|
void UBusyRoleMoveTask::Activate(ABusyPlayerRole* Owner, const FOnBusyRoleTaskFinished& Delegate)
|
||||||
|
{
|
||||||
|
UBusyRoleTaskBase::Activate(Owner, Delegate);
|
||||||
|
Owner->MovementComponent->MoveTo(TargetLocation);
|
||||||
|
Owner->MovementComponent->OnMoveFinished.AddDynamic(this, &ThisClass::OnMoveFinished);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UBusyRoleMoveTask::Cancel()
|
||||||
|
{
|
||||||
|
UBusyRoleTaskBase::Cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UBusyRoleMoveTask::SetTargetLocation(const FVector2D& NewLocation)
|
||||||
|
{
|
||||||
|
TargetLocation = NewLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UBusyRoleMoveTask::OnMoveFinished()
|
||||||
|
{
|
||||||
|
if (OnFinishedDelegate.IsBound())
|
||||||
|
{
|
||||||
|
OnFinishedDelegate.Execute(false);
|
||||||
|
}
|
||||||
|
TaskOwner->MovementComponent->OnMoveFinished.RemoveDynamic(this, &ThisClass::OnMoveFinished);
|
||||||
|
bIsActive = false;
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
#include "Level/RoleTask/BusyRolePickTask.h"
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
#include "Level/RoleTask/BusyTaskSubSystem.h"
|
||||||
|
#include "Level/RoleTask/BusyRoleMoveTask.h"
|
||||||
|
|
||||||
|
bool UBusyRoleTaskBase::IsActive() const
|
||||||
|
{
|
||||||
|
return bIsActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UBusyRoleTaskBase::Activate(ABusyPlayerRole* Owner, const FOnBusyRoleTaskFinished& Delegate)
|
||||||
|
{
|
||||||
|
TaskOwner = Owner;
|
||||||
|
bIsActive = true;
|
||||||
|
OnFinishedDelegate = Delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UBusyRoleTaskBase::Cancel()
|
||||||
|
{
|
||||||
|
bIsActive = false;
|
||||||
|
if (OnFinishedDelegate.IsBound())
|
||||||
|
{
|
||||||
|
OnFinishedDelegate.Execute(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UBusyTaskSubSystem* UBusyTaskSubSystem::Get(const UObject* Object)
|
||||||
|
{
|
||||||
|
const UWorld* World = Object->GetWorld();
|
||||||
|
return World->GetSubsystem<UBusyTaskSubSystem>();
|
||||||
|
}
|
||||||
|
|
||||||
|
UBusyRoleTaskBase* UBusyTaskSubSystem::CreatePickTask(const ABusyStaticResource* Resource)
|
||||||
|
{
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UBusyRoleTaskBase* UBusyTaskSubSystem::CreateMoveTask(const FVector2D& TargetPosition)
|
||||||
|
{
|
||||||
|
UBusyRoleMoveTask* Task = NewObject<UBusyRoleMoveTask>();
|
||||||
|
Task->SetTargetLocation(TargetPosition);
|
||||||
|
return Task;
|
||||||
|
}
|
||||||
|
|
||||||
|
UBusyRoleTaskBase* UBusyTaskSubSystem::CreateGoBackTask()
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UBusyRoleTaskBase* UBusyTaskSubSystem::CreateBuildTask(const FName& BuildingID, const FVector2D& TargetPosition)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UBusyRoleTaskBase* UBusyTaskSubSystem::CreateDismantleTask(const FName& BuildingID, const FVector2D& TargetPosition)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
@ -11,6 +11,8 @@ GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
|
|||||||
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
|
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
|
||||||
|
|
||||||
|
|
||||||
|
class UBusyRoleTaskBase;
|
||||||
|
|
||||||
UCLASS(Blueprintable, BlueprintType)
|
UCLASS(Blueprintable, BlueprintType)
|
||||||
class UBusyPlayerRoleAttributeSet: public UBusyPawnAttributeSet
|
class UBusyPlayerRoleAttributeSet: public UBusyPawnAttributeSet
|
||||||
{
|
{
|
||||||
@ -45,11 +47,18 @@ public:
|
|||||||
|
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
|
||||||
virtual void InitPawnAttributes(const struct FBusyPawnBaseConfig& Config)override;
|
virtual void InitPawnAttributes(const struct FBusyPawnBaseConfig& Config)override;
|
||||||
|
|
||||||
virtual void OnMoveDirectionChanged_Implementation(const FVector2D& InDirection) override {}
|
virtual void OnMoveDirectionChanged_Implementation(const FVector2D& InDirection) override {}
|
||||||
|
|
||||||
|
public:
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void AddTask(UBusyRoleTaskBase* RoleTask);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ProcessTasks();
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/*--------------------相机相关--------------------------*/
|
/*--------------------相机相关--------------------------*/
|
||||||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
||||||
@ -57,4 +66,9 @@ protected:
|
|||||||
|
|
||||||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
||||||
TObjectPtr<class UCameraComponent> CameraComponent;
|
TObjectPtr<class UCameraComponent> CameraComponent;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
FTimerHandle GoBackTimerHandle;
|
||||||
|
TQueue<TWeakObjectPtr<UBusyRoleTaskBase>> RoleTasks;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -34,6 +34,7 @@ enum class EBusyMoveState: uint8
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBusyMoveFinishedSignature);
|
||||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBusyMoveDirectionChanged, FVector2D, Direction);
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBusyMoveDirectionChanged, FVector2D, Direction);
|
||||||
|
|
||||||
|
|
||||||
@ -106,6 +107,9 @@ public:
|
|||||||
public:
|
public:
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
||||||
FBusyMoveDirectionChanged MoveDirectionChangedDelegate;
|
FBusyMoveDirectionChanged MoveDirectionChangedDelegate;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
||||||
|
FBusyMoveFinishedSignature OnMoveFinished;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement")
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement")
|
||||||
|
|||||||
@ -97,6 +97,9 @@ public:
|
|||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void OnSwitchRole(const FInputActionValue& Value);
|
void OnSwitchRole(const FInputActionValue& Value);
|
||||||
|
|
||||||
|
UFUNCTION()
|
||||||
|
void OnMove(const FInputActionValue& Value);
|
||||||
|
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void OnRoleSkillTriggered(FGameplayTag GameplayTag);
|
void OnRoleSkillTriggered(FGameplayTag GameplayTag);
|
||||||
|
|
||||||
|
|||||||
22
Source/BusyRabbit/Public/Level/RoleTask/BusyRoleMoveTask.h
Normal file
22
Source/BusyRabbit/Public/Level/RoleTask/BusyRoleMoveTask.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Level/RoleTask/BusyTaskSubSystem.h"
|
||||||
|
#include "BusyRoleMoveTask.generated.h"
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class UBusyRoleMoveTask : public UBusyRoleTaskBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
virtual void Activate(ABusyPlayerRole* Owner, const FOnBusyRoleTaskFinished& Delegate) override;
|
||||||
|
virtual void Cancel() override;
|
||||||
|
public:
|
||||||
|
void SetTargetLocation(const FVector2D& NewLocation);
|
||||||
|
|
||||||
|
private:
|
||||||
|
UFUNCTION()
|
||||||
|
void OnMoveFinished();
|
||||||
|
|
||||||
|
private:
|
||||||
|
FVector2D TargetLocation = FVector2D();
|
||||||
|
};
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class BusyRolePickTask
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
};
|
||||||
69
Source/BusyRabbit/Public/Level/RoleTask/BusyTaskSubSystem.h
Normal file
69
Source/BusyRabbit/Public/Level/RoleTask/BusyTaskSubSystem.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Level/Actor/BusyPlayerRole.h"
|
||||||
|
#include "BusyTaskSubSystem.generated.h"
|
||||||
|
|
||||||
|
class ABusyStaticResource;
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_OneParam(FOnBusyRoleTaskFinished, bool);
|
||||||
|
|
||||||
|
|
||||||
|
enum EBusyRoleTaskType
|
||||||
|
{
|
||||||
|
Unknown = 0,
|
||||||
|
MoveTask = 1,
|
||||||
|
GobackTask = 2,
|
||||||
|
PickTask = 3,
|
||||||
|
BuildTask = 4,
|
||||||
|
DismantleTask = 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class UBusyRoleTaskBase : public UObject
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool IsActive() const;
|
||||||
|
|
||||||
|
virtual void Activate(ABusyPlayerRole* Owner, const FOnBusyRoleTaskFinished &Delegate);
|
||||||
|
virtual void Cancel();
|
||||||
|
protected:
|
||||||
|
bool bIsActive;
|
||||||
|
EBusyRoleTaskType TaskType;
|
||||||
|
TWeakObjectPtr<ABusyPlayerRole> TaskOwner;
|
||||||
|
FOnBusyRoleTaskFinished OnFinishedDelegate;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UCLASS(BlueprintType)
|
||||||
|
class UBusyTaskSubSystem : public UWorldSubsystem
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
static UBusyTaskSubSystem* Get(const UObject* Object);
|
||||||
|
public:
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
UBusyRoleTaskBase* CreatePickTask(const ABusyStaticResource* Resource);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
UBusyRoleTaskBase* CreateMoveTask(const FVector2D& TargetPosition);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
UBusyRoleTaskBase* CreateGoBackTask();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
UBusyRoleTaskBase* CreateBuildTask(const FName& BuildingID, const FVector2D& TargetPosition);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
UBusyRoleTaskBase* CreateDismantleTask(const FName& BuildingID, const FVector2D& TargetPosition);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user