Compare commits

..

No commits in common. "a39e01cefa4472707c82cf3fa610d1a2c4486a6b" and "0fcce7fa461a07e6bed99a87dfed7a6c3330559c" have entirely different histories.

130 changed files with 78 additions and 6251 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,5 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACoreUObject_002Fd_003APublic_002Fd_003AAssetRegistry_002Ff_003AAssetData_002Eh/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003AEditor_002Fd_003APropertyEditor_002Fd_003APublic_002Ff_003APropertyCustomizationHelpers_002Eh/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACoreUObject_002Fd_003APublic_002Fd_003AUObject_002Ff_003AUObjectBaseUtility_002Eh/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=72263A5F_002DD5F9_002D3915_002D8DA0_002DCD45C38A70E5_002Fdl_003ASource_003AF_0021_003FEpic_003FUE_005F5_002E5_003FEngine_003FSource_002Fd_003ARuntime_002Fd_003ACore_002Fd_003APublic_002Fd_003AMisc_002Ff_003AMTAccessDetector_002Eh/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

View File

@ -1,116 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "BagConfigAsset.h"
#include "BagShapeAsset.h"
bool UBagConfigAsset::AddSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY)
{
if (!SkillObject || !CanPlaceSkill(SkillObject, PositionX, PositionY))
{
return false;
}
PlacedSkills.Add(FPlacedSkillInfo(SkillObject, PositionX, PositionY));
return true;
}
bool UBagConfigAsset::RemoveSkill(int32 SkillIndex)
{
if (SkillIndex < 0 || SkillIndex >= PlacedSkills.Num())
{
return false;
}
PlacedSkills.RemoveAt(SkillIndex);
return true;
}
bool UBagConfigAsset::CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const
{
if (!SkillObject || !BagShapeAsset)
{
return false;
}
if (!IsSkillWithinBagShape(SkillObject, PositionX, PositionY))
{
return false;
}
if (CheckSkillOverlap(SkillObject, PositionX, PositionY))
{
return false;
}
return true;
}
int32 UBagConfigAsset::GetSkillAtPosition(int32 X, int32 Y) const
{
for (int32 i = 0; i < PlacedSkills.Num(); i++)
{
if (PlacedSkills[i].OccupiesPosition(X, Y))
{
return i;
}
}
return -1;
}
void UBagConfigAsset::ClearAllSkills()
{
PlacedSkills.Empty();
}
bool UBagConfigAsset::CheckSkillOverlap(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const
{
if (!SkillObject)
{
return false;
}
for (int32 i = 0; i < PlacedSkills.Num(); i++)
{
const FPlacedSkillInfo& ExistingSkill = PlacedSkills[i];
if (!ExistingSkill.SkillAsset)
{
continue;
}
// 检查矩形重叠
if (!(PositionX >= ExistingSkill.PositionX + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).X ||
PositionX + GetSkillSizeValue(SkillObject->SkillSize).X <= ExistingSkill.PositionX ||
PositionY >= ExistingSkill.PositionY + GetSkillSizeValue(ExistingSkill.SkillAsset->SkillSize).Y ||
PositionY + GetSkillSizeValue(SkillObject->SkillSize).Y <= ExistingSkill.PositionY))
{
return true; // 有重叠
}
}
return false; // 无重叠
}
bool UBagConfigAsset::IsSkillWithinBagShape(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const
{
if (!BagShapeAsset || !SkillObject)
{
return false;
}
// 检查技能占用的所有格子是否都在激活的背包形状内
for (int32 X = PositionX; X < PositionX + GetSkillSizeValue(SkillObject->SkillSize).X; X++)
{
for (int32 Y = PositionY; Y < PositionY + GetSkillSizeValue(SkillObject->SkillSize).Y; Y++)
{
if (!BagShapeAsset->IsSlotActive(X, Y))
{
return false;
}
}
}
return true;
}

View File

@ -1,102 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "ProjectFish/Definations.h"
#include "SkillAsset.h"
#include "BagConfigAsset.generated.h"
class UBagShapeAsset;
//背包中摆放的技能信息
USTRUCT(BlueprintType)
struct FPlacedSkillInfo
{
GENERATED_BODY()
// 技能对象引用
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Placed Skill")
TObjectPtr< USkillAsset> SkillAsset;
// 技能在背包中的位置X
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Placed Skill Position")
int32 PositionX;
// 技能在背包中的位置Y
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Placed Skill Position")
int32 PositionY;
FPlacedSkillInfo()
{
SkillAsset = nullptr;
PositionX = 0;
PositionY = 0;
}
FPlacedSkillInfo(USkillAsset* InSkillAsset, int32 InX, int32 InY)
{
SkillAsset = InSkillAsset;
PositionX = InX;
PositionY = InY;
}
// 检查技能是否占用指定位置
bool OccupiesPosition(int32 X, int32 Y) const
{
if (!SkillAsset)
{
return false;
}
return X >= PositionX && X < (PositionX + GetSkillSizeValue(SkillAsset->SkillSize).X) &&
Y >= PositionY && Y < (PositionY + GetSkillSizeValue(SkillAsset->SkillSize).Y);
}
};
/**
*
*/
UCLASS(BlueprintType)
class PROJECTFISH_API UBagConfigAsset : public UDataAsset
{
GENERATED_BODY()
public:
// 背包形状资源引用
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BagConfig")
TObjectPtr<UBagShapeAsset> BagShapeAsset;
// 背包中放置的技能列表
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagConfig")
TArray<FPlacedSkillInfo> PlacedSkills;
// 添加技能到背包
UFUNCTION(BlueprintCallable, Category = "BagConfig")
bool AddSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY);
// 移除技能
UFUNCTION(BlueprintCallable, Category = "BagConfig")
bool RemoveSkill(int32 SkillIndex);
// 检查技能是否可以放置在指定位置
UFUNCTION(BlueprintCallable, Category = "BagConfig")
bool CanPlaceSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const;
// 获取指定位置的技能索引
UFUNCTION(BlueprintCallable, Category = "BagConfig")
int32 GetSkillAtPosition(int32 X, int32 Y) const;
// 获取技能总数
UFUNCTION(BlueprintCallable, Category = "BagConfig")
int32 GetSkillCount() const { return PlacedSkills.Num(); }
// 清除所有技能
UFUNCTION(BlueprintCallable, Category = "BagConfig")
void ClearAllSkills();
private:
// 检查技能之间是否有重叠
bool CheckSkillOverlap(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const;
// 检查技能是否在背包形状范围内
bool IsSkillWithinBagShape(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) const;
};

View File

@ -1,56 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "BagShapeAsset.h"
UBagShapeAsset::UBagShapeAsset()
{
InitializeBagShape();
}
void UBagShapeAsset::InitializeBagShape()
{
BagSlots.Empty();
for (int x = 0; x < BagWidth; x++)
{
for (int y = 0; y < BagHeight; y++)
{
BagSlots.Add(FBagSlot(x, y, true));
}
}
}
bool UBagShapeAsset::IsSlotActive(int32 X, int32 Y) const
{
if (X < 0 || X >= BagWidth || Y < 0 || Y >= BagHeight)
return false;
for (auto BagSlot: BagSlots)
{
if (BagSlot.X == X && BagSlot.Y == Y)
return BagSlot.bIsActive;
}
return false;
}
void UBagShapeAsset::SetSlotActive(int32 X, int32 Y, bool Active)
{
if (X < 0 || X >= BagWidth || Y < 0 || Y >= BagHeight)
return;
int SlotIndex = FIndSlotIndex(X, Y);
if (SlotIndex != INDEX_NONE)
{
BagSlots[SlotIndex].bIsActive = Active;
}
}
int32 UBagShapeAsset::FIndSlotIndex(int32 X, int32 Y) const
{
for (int i = 0; i < BagSlots.Num(); i++)
{
if (BagSlots[i].X == X && BagSlots[i].Y == Y)
return i;
}
return INDEX_NONE;
}

View File

@ -1,63 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "BagShapeAsset.generated.h"
USTRUCT(BlueprintType)
struct FBagSlot
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 X;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Y;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bIsActive;
FBagSlot()
{
X = 0;
Y = 0;
bIsActive = false;
}
FBagSlot(int32 InX, int32 InY, bool InIsActive)
{
X = InX;
Y = InY;
bIsActive = InIsActive;
}
};
/**
*
*/
UCLASS(BlueprintType)
class PROJECTFISH_API UBagShapeAsset : public UDataAsset
{
GENERATED_BODY()
public:
UBagShapeAsset();
UFUNCTION(BlueprintCallable, Category="BagShape")
void InitializeBagShape();
UFUNCTION(Blueprintable, BlueprintPure, Category="BagShape")
bool IsSlotActive(int32 X, int32 Y) const;
UFUNCTION(Blueprintable, Category="BagShape")
void SetSlotActive(int32 X, int32 Y, bool Active);
private:
int32 FIndSlotIndex(int32 X, int32 Y) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagShape", meta = (ClampMin = "1", ClampMax = "10"))
int32 BagWidth;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagShape", meta = (ClampMin = "1", ClampMax = "10"))
int32 BagHeight;
//存储格子状态
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="BagShape")
TArray<FBagSlot> BagSlots;
};

View File

@ -1,4 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "SkillAsset.h"

View File

@ -1,53 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "Engine/DataAsset.h"
#include "../Definations.h"
#include "SkillAsset.generated.h"
/**
*
*/
UCLASS(BlueprintType)
class PROJECTFISH_API USkillAsset : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能名称"))
FText SkillName;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (AllowedClasses = "Texture2D", ToolTip = "技能图片"))
FSoftObjectPath SkillTexture;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能Tag"))
FGameplayTag SkillTag;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "背包占用"))
ESkillSize SkillSize = ESkillSize::Small;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "是否为主动技能"))
bool bActiveSkill = true;
//主动技能属性
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD", EditConditionHides, EditCondition = "bActiveSkill"))
float CD;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能CD速度", EditConditionHides, EditCondition = "bActiveSkill"))
float Speed = 1.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能耐久度", EditConditionHides, EditCondition = "bActiveSkill"))
int32 Endurance;
//被动技能属性
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "被动技能触发器,没有配置的话为光环类技能默认进行触发", AllowedClasses = "SkillTrigger", EditConditionHides, EditCondition = "!bActiveSkill"))
TSubclassOf<class USkillTrigger> SkillTrigger;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
TArray<FSkillEffectData> SkillEffects;
};

View File

@ -51,25 +51,6 @@ enum class ETargetSelecterType: uint8
RandomScope UMETA(DisplayName = "指定技能组选择"),
};
UENUM(BlueprintType)
enum class ESkillSize: uint8
{
Small UMETA(DisplayName = "", ToolTip = "技能占用格子 2x2"),
Medium UMETA(DisplayName = "", ToolTip = "技能占用格子 3x2"),
Large UMETA(DisplayName = "", ToolTip = "技能占用格子 4x2"),
};
static FIntPoint GetSkillSizeValue(ESkillSize SizeType)
{
switch (SizeType)
{
case ESkillSize::Small: return FIntPoint(2, 2);
case ESkillSize::Medium: return FIntPoint(3, 2);
case ESkillSize::Large: return FIntPoint(4, 2);
}
return FIntPoint();
}
USTRUCT(BlueprintType)
struct FSkillContext
{
@ -219,10 +200,9 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "附加的附加的韧性值"))
int32 Tenacity_Add;
// UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "物品背包大小"))
// FIntPoint BagSize;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "物品配置"))
class UBagConfigAsset* BagConfig;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "物品背包大小"))
FIntPoint BagSize;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (ToolTip = "技能效果组"))
TArray<FFishingRodSkill> Skills;
@ -301,5 +281,3 @@ struct FShipDataConfig
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera|Collision", meta = (ForceUnits = "cm", ToolTip = "碰撞时的相机抖动类型"))
TSubclassOf<UCameraShakeBase> CollisionCameraShakeClass;
};

View File

@ -14,68 +14,15 @@
#include "SkillEffects/SkillEffect_ModifySpeed.h"
#include "SkillEffects/SkillEffect_SER.h"
// void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkillData skillData, FIntPoint BagPos)
// {
// this->Owner = owner;
// this->SkillManager = skillManager;
// this->SkillData = skillData;
// this->BagPosition = BagPos;
// this->RemainingTime = SkillData->CD;
// this->RemainingEndurance = SkillData->Endurance;
// for (auto effectData: SkillData->SkillEffects)
// {
// USkillEffect* skillEffect = nullptr ;
// switch (effectData.EffectType)
// {
// case ESkillEffectType::Damage:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_Damage::StaticClass());
// break;
// case ESkillEffectType::Heal:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_Heal::StaticClass());
// break;
// case ESkillEffectType::ModifyCooldown:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_ModifyCD::StaticClass());
// break;
// case ESkillEffectType::Charge:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_Charge::StaticClass());
// break;
// case ESkillEffectType::ModifySpeed:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_ModifySpeed::StaticClass());
// break;
// case ESkillEffectType::SkillEnduranceRestore:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_SER::StaticClass());
// break;
// case ESkillEffectType::EnhanceFishRod:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceFishRod::StaticClass());
// break;
// case ESkillEffectType::EnhanceSkill:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceSkill::StaticClass());
// break;
// case ESkillEffectType::DamageReduce:
// skillEffect = NewObject<USkillEffect>(this, USkillEffect_DamageReduce::StaticClass());
// break;
// default:
// const UEnum* EnumPtr = StaticEnum<ESkillEffectType>();
// UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)))
// }
// if (IsValid(skillEffect))
// {
// skillEffect->InitSkillEffect(this, effectData);
// this->SkillEffects.Add(skillEffect);
// }
//
// }
// }
void USkill::InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, const FPlacedSkillInfo& PlacedSkill)
void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkillData skillData, FIntPoint BagPos)
{
this->Owner = owner;
this->SkillManager = skillManager;
this->SkillData = PlacedSkill.SkillAsset;
this->BagPosition = FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY);
this->RemainingTime = SkillData->CD;
this->RemainingEndurance = SkillData->Endurance;
for (auto effectData: SkillData->SkillEffects)
this->SkillData = skillData;
this->BagPosition = BagPos;
this->RemainingTime = SkillData.CD;
this->RemainingEndurance = SkillData.Endurance;
for (auto effectData: skillData.SkillEffects)
{
USkillEffect* skillEffect = nullptr ;
switch (effectData.EffectType)
@ -108,8 +55,8 @@ void USkill::InitSkill(class APawnWithSkill* owner, USkillManager* skillManager,
skillEffect = NewObject<USkillEffect>(this, USkillEffect_DamageReduce::StaticClass());
break;
default:
const UEnum* EnumPtr = StaticEnum<ESkillEffectType>();
UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)))
const UEnum* EnumPtr = StaticEnum<ESkillEffectType>();
UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)))
}
if (IsValid(skillEffect))
{
@ -122,11 +69,11 @@ void USkill::InitSkill(class APawnWithSkill* owner, USkillManager* skillManager,
void USkill::InitSkillTrigger()
{
if (!SkillData->bActiveSkill)
if (!SkillData.bActiveSkill)
{
if (SkillData->SkillTrigger)
if (SkillData.SkillTrigger)
{
USkillTrigger* SkillTrigger = NewObject<USkillTrigger>(this, SkillData->SkillTrigger);
USkillTrigger* SkillTrigger = NewObject<USkillTrigger>(this, SkillData.SkillTrigger);
FSkillContext context;
context.OwnerSkill = this;
context.SkillManager = SkillManager;
@ -144,18 +91,13 @@ void USkill::InitSkillTrigger()
bool USkill::SkillTickAble()
{
//剩余次数无限制或者拥有者没有被韧性眩晕
return (RemainingEndurance >0 || RemainingEndurance == -1 ) && Owner->CurrentTenacity > 0 && SkillData->bActiveSkill;
}
FIntPoint USkill::GetSkillSize()
{
return GetSkillSizeValue(SkillData->SkillSize);
return (RemainingEndurance >0 || RemainingEndurance == -1 ) && Owner->CurrentTenacity > 0 && SkillData.bActiveSkill;
}
void USkill::TickSkill(float deltaTime)
{
if (SkillTickAble())
RemainingTime -= deltaTime * SkillData->Speed;
RemainingTime -= deltaTime * SkillData.Speed;
if (RemainingTime <= 0 )
{
ExecuteSkill();
@ -184,16 +126,16 @@ void USkill::ExecuteSkill()
{
Effect->Execute(context);
}
RemainingTime = SkillData->CD;
OnSkillExecute.Broadcast(SkillData->SkillName.ToString());
RemainingTime = SkillData.CD;
OnSkillExecute.Broadcast(SkillData.SkillName.ToString());
}
FString USkill::GetSkillName() const
{
return SkillData->SkillName.ToString();;
return SkillData.SkillName.ToString();;
}
TObjectPtr<USkillAsset> USkill::GetSkillData()
FSkillData& USkill::GetSkillData()
{
return SkillData;
}
@ -203,7 +145,7 @@ FIntPoint USkill::GetBagPos()
return BagPosition;
}
void USkill::SetSkillData(TObjectPtr<USkillAsset> data)
void USkill::SetSkillData(FSkillData data)
{
SkillData = data;
OnSkillUpdate.Broadcast();
@ -216,8 +158,8 @@ void USkill::ApplyRemainingTimeOffset(int timeOffset)
void USkill::ApplyRemainingRemainingEnduranceOffset(int Offset)
{
if (SkillData->Endurance != -1)
this->RemainingEndurance = FMath::Max(this->RemainingEndurance + Offset, SkillData->Endurance);
if (SkillData.Endurance != -1)
this->RemainingEndurance = FMath::Max(this->RemainingEndurance + Offset, SkillData.Endurance);
}
class APawnWithSkill* USkill::GetOwner()

View File

@ -6,7 +6,6 @@
#include "SkillEffect.h"
#include "ProjectFish/Definations.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "UObject/Object.h"
#include "Skill.generated.h"
@ -20,8 +19,7 @@ class PROJECTFISH_API USkill : public UObject
{
GENERATED_BODY()
public:
//void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData, FIntPoint BagPos);
void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, const FPlacedSkillInfo& PlacedSkill);
void InitSkill(class APawnWithSkill* owner, USkillManager* skillManager, FSkillData SkillData, FIntPoint BagPos);
void InitSkillTrigger();
void TickSkill(float deltaTime);
void ExecuteSkill();
@ -29,23 +27,20 @@ public:
FString GetSkillName() const;
class APawnWithSkill* GetOwner();
TObjectPtr<USkillAsset> GetSkillData();
FSkillData& GetSkillData();
TArray<USkillEffect*> GetAllSkillEffects()
{
return SkillEffects;
}
FIntPoint GetBagPos();
void SetSkillData( TObjectPtr<USkillAsset> SkillData);
void SetSkillData( FSkillData SkillData);
UFUNCTION(BlueprintCallable)
void ApplyRemainingTimeOffset(int timeOffset);
void ApplyRemainingRemainingEnduranceOffset(int Offset);
UFUNCTION(BlueprintPure)
bool SkillTickAble();
UFUNCTION(BlueprintPure)
FIntPoint GetSkillSize();
protected:
UPROPERTY(BlueprintAssignable)
FSkillUpdate OnSkillUpdate;
@ -53,7 +48,7 @@ protected:
FSkillExecute OnSkillExecute;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果"))
TObjectPtr< USkillAsset> SkillData;
FSkillData SkillData;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果"))
USkillManager* SkillManager;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ToolTip = "技能效果"))

View File

@ -27,7 +27,7 @@ void USkillEffect::Execute(const FSkillContext& context)
}
else
{
strTargets += (Cast<USkill>(target))->GetSkillData()->SkillName.ToString() + "|" ;
strTargets += (Cast<USkill>(target))->GetSkillData().SkillName.ToString() + "|" ;
}
}
@ -35,7 +35,7 @@ void USkillEffect::Execute(const FSkillContext& context)
FString type = EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)) ;
UE_LOG(LogTemp, Warning, TEXT("技能:%s 拥有者: %s 目标: %s 效果: %s")
, *OwnerSkill->GetSkillData()->SkillName.ToString()
, *OwnerSkill->GetSkillData().SkillName.ToString()
,*OwnerSkill->GetOwner()->GetActorNameOrLabel()
,*strTargets
, *( GetSkillEffectDes()));
@ -62,7 +62,7 @@ TArray<UObject*> USkillEffect::GetApplyTargets(const FSkillContext& context)
for (auto skill: context.SkillManager->GetAllSkills())
{
if (effectData.SkillSelecter.ApplySkillTags.HasTag(skill->GetSkillData()->SkillTag))
if (effectData.SkillSelecter.ApplySkillTags.HasTag(skill->GetSkillData().SkillTag))
{
result.Add(skill);
}

View File

@ -21,7 +21,7 @@ void USkillEffect_ModifyCD::Execute(const FSkillContext& context)
{
//修改技能的冷却时间
USkill* skill = Cast<USkill>(target);
skill->GetSkillData()->CD = FMath::Max(1, skill->GetSkillData()->CD + effectData.EffectValue);
skill->GetSkillData().CD = FMath::Max(1, skill->GetSkillData().CD + effectData.EffectValue);
skill->ApplyRemainingTimeOffset(effectData.EffectValue);
}

View File

@ -22,13 +22,13 @@ void USkillEffect_ModifySpeed::Execute(const FSkillContext& context)
{
//修改技能的冷却倍率
USkill* skill = Cast<USkill>(target);
skill->GetSkillData()->Speed = effectData.EffectValue;
skill->GetSkillData().Speed = effectData.EffectValue;
//延时结束效果
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [&]()
{
UE_LOG(LogTemp, Log, TEXT("取消CD充能效果"));
skill->GetSkillData()->Speed = 1;
skill->GetSkillData().Speed = 1;
}, UKismetStringLibrary::Conv_StringToInt(effectData.ParamAddition), false); // 单次触发

View File

@ -3,7 +3,6 @@
#include "SkillManager.h"
#include "Skill.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
void USkillManager::Tick(float DeltaTime)
{
@ -43,64 +42,49 @@ void USkillManager::AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize)
// this->SkillPawns = Pawns;
// }
// USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos)
// {
// TMap<FIntPoint, int32>* states = PawnBagState.Find(Pawn);
// FIntPoint BagSize = *PawnInfo.Find(Pawn);
// bool bAddAble = true;
// for (int y = 0; y < BagSize.Y; y++)
// {
// for (int x = 0; x < BagSize.X; x++)
// {
// bAddAble = true;
// for (int skillX = 0; skillX < data.SkillWeight.X; skillX++)
// {
// for (int skillY = 0; skillY < data.SkillWeight.Y; skillY++)
// {
// if (states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) == nullptr
// || *states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) != -1)
// {
// bAddAble = false;
// }
// }
// }
// //满足条件
// if (bAddAble)
// {
// BagPos = FIntPoint(x, y);
// USkill* skill = NewObject<USkill>(this);
// skill->InitSkill(Pawn, this, data, BagPos);
// Skills.Add(skill);
// //设置占用状态
// for (int xTemp = 0; xTemp < data.SkillWeight.X; xTemp++)
// {
// for (int yTemp = 0; yTemp < data.SkillWeight.Y; yTemp++)
// {
// states->Add(FIntPoint(xTemp, yTemp) + FIntPoint(x, y), GetSkillIndex(skill));
// }
// }
//
// return skill;
// }
// }
// }
//
// return nullptr;
// }
void USkillManager::AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn, TArray<USkill*>& SkillObjects,
TArray<FIntPoint>& BagPositions)
USkill* USkillManager::AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos)
{
TMap<FIntPoint, int32>* states = PawnBagState.Find(Pawn);
FIntPoint BagSize = *PawnInfo.Find(Pawn);
for (auto PlacedSkill: Bag->PlacedSkills)
bool bAddAble = true;
for (int y = 0; y < BagSize.Y; y++)
{
USkill* skill = NewObject<USkill>(this);
skill->InitSkill(Pawn, this, PlacedSkill);
SkillObjects.Add(skill);
BagPositions.Add(FIntPoint(PlacedSkill.PositionX, PlacedSkill.PositionY));
for (int x = 0; x < BagSize.X; x++)
{
bAddAble = true;
for (int skillX = 0; skillX < data.SkillWeight.X; skillX++)
{
for (int skillY = 0; skillY < data.SkillWeight.Y; skillY++)
{
if (states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) == nullptr
|| *states->Find(FIntPoint(x, y) + FIntPoint(skillX, skillY)) != -1)
{
bAddAble = false;
}
}
}
//满足条件
if (bAddAble)
{
BagPos = FIntPoint(x, y);
USkill* skill = NewObject<USkill>(this);
skill->InitSkill(Pawn, this, data, BagPos);
Skills.Add(skill);
//设置占用状态
for (int xTemp = 0; xTemp < data.SkillWeight.X; xTemp++)
{
for (int yTemp = 0; yTemp < data.SkillWeight.Y; yTemp++)
{
states->Add(FIntPoint(xTemp, yTemp) + FIntPoint(x, y), GetSkillIndex(skill));
}
}
return skill;
}
}
}
return nullptr;
}
void USkillManager::OnAllSkillAdded()
@ -116,7 +100,7 @@ class USkill* USkillManager::GetSkillByTag(FGameplayTag Tag)
{
for (auto Skill : Skills)
{
if (Skill->GetSkillData()->SkillTag == Tag)
if (Skill->GetSkillData().SkillTag == Tag)
return Skill;
}
return nullptr;
@ -133,7 +117,7 @@ TArray<USkill*> USkillManager::GetSkillsAround(USkill* TargetSkill)
TMap<FIntPoint, int32> *BagStates = PawnBagState.Find(TargetSkill->GetOwner());
FIntPoint BagPos = TargetSkill->GetBagPos();
FIntPoint BagSize = *PawnInfo.Find(TargetSkill->GetOwner());
TObjectPtr<USkillAsset> data = TargetSkill->GetSkillData();
FSkillData data = TargetSkill->GetSkillData();
int beginX = FMath::Max(0, BagPos.X- 1);
int endX = FMath::Min(BagSize.X - 1, BagPos.X + 1);
int beginY = FMath::Max(0, BagPos.Y - 1);

View File

@ -24,12 +24,9 @@ public:
UFUNCTION(BlueprintCallable)
void AddPawn(class APawnWithSkill* Pawn, FIntPoint BagSize);
// UFUNCTION(BlueprintCallable)
// USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos);
UFUNCTION(BlueprintCallable)
void AddBagWithSkills(UBagConfigAsset* Bag, APawnWithSkill* Pawn,
TArray<USkill*>& SkillObjects, TArray<FIntPoint>& BagPositions);
USkill* AddSkill(FSkillData data, APawnWithSkill* Pawn, FIntPoint& BagPos);
UFUNCTION(BlueprintCallable)
void OnAllSkillAdded();

View File

@ -1,33 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetActions/BagConfigAssetTypeAction.h"
#include "AssetEditor/BagConfigAssetEditor.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
UClass* FBagConfigAssetTypeAction::GetSupportedClass() const
{
return UBagConfigAsset::StaticClass();
}
void FBagConfigAssetTypeAction::OpenAssetEditor(const TArray<UObject*>& InObjects,
TSharedPtr<class IToolkitHost> EditWithinLevelEditor)
{
EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone;
for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt)
{
if (UBagConfigAsset* BagConfigAsset = Cast<UBagConfigAsset>(*ObjIt))
{
TSharedRef<FBagConfigAssetEditor> EditorToolkit = MakeShareable(new FBagConfigAssetEditor());
EditorToolkit->Initialize(Mode, EditWithinLevelEditor, BagConfigAsset);
}
}
}
uint32 FBagConfigAssetTypeAction::GetCategories()
{
return MyAssetCategory;
}

View File

@ -1,41 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetActions/BagShapeAssetTypeAction.h"
#include "AssetEditor/BagShapeAssetEditor.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
UClass* FBagShapeAssetTypeAction::GetSupportedClass() const
{
return UBagShapeAsset::StaticClass();
}
void FBagShapeAssetTypeAction::OpenAssetEditor(const TArray<UObject*>& InObjects,
TSharedPtr<IToolkitHost> EditWithinLevelEditor)
{
EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone;
for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt)
{
if (UBagShapeAsset* BagShapeAsset = Cast<UBagShapeAsset>(*ObjIt))
{
TSharedRef<FBagShapeAssetEditor> EditorToolkit = MakeShareable(new FBagShapeAssetEditor());
EditorToolkit->Initialize(Mode, EditWithinLevelEditor, BagShapeAsset);
}
}
}
uint32 FBagShapeAssetTypeAction::GetCategories()
{
//系统原有
//return EAssetTypeCategories::Gameplay;
return MyAssetCategory;
}
void FBagShapeAssetTypeAction::GetActions(const TArray<UObject*>& InObjects, struct FToolMenuSection& Section)
{
FAssetTypeActions_Base::GetActions(InObjects, Section);
}

View File

@ -1,17 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetActions/SkillAssetTypeAction.h"
#include "ProjectFish/DataAsset/SkillAsset.h"
UClass* FSkillAssetTypeAction::GetSupportedClass() const
{
return USkillAsset::StaticClass();
}
uint32 FSkillAssetTypeAction::GetCategories()
{
return MyAssetCategory;
}

View File

@ -1,75 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetEditor/BagConfigAssetEditor.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "Widgets/BagConfigEditorWidget.h"
const FName FBagConfigAssetEditor::BagConfigEditorTabId(TEXT("BagConfigEditor"));
void FBagConfigAssetEditor::Initialize(const EToolkitMode::Type Mode,
const TSharedPtr<class IToolkitHost>& InitToolkitHost, class UBagConfigAsset* InBagConfigAsset)
{
BagConfigAsset = InBagConfigAsset;
const TSharedRef<FTabManager::FLayout> StandaloneDefaultLayout = FTabManager::NewLayout("Standalone_BagConfigAssetEditor_Layout_v1")
->AddArea
(
FTabManager::NewPrimaryArea()->SetOrientation(Orient_Vertical)
->Split
(
FTabManager::NewStack()
->SetSizeCoefficient(1.0f)
->AddTab(BagConfigEditorTabId, ETabState::OpenedTab)
)
);
FAssetEditorToolkit::InitAssetEditor(Mode, InitToolkitHost, TEXT("BagShapeAssetEditorApp"), StandaloneDefaultLayout, true, true, InBagConfigAsset);
}
FName FBagConfigAssetEditor::GetToolkitFName() const
{
return FName("BagConfigEditor");
}
FText FBagConfigAssetEditor::GetBaseToolkitName() const
{
return FText::FromString("BagConfig");
}
FString FBagConfigAssetEditor::GetWorldCentricTabPrefix() const
{
return TEXT("BagConfig");
}
FLinearColor FBagConfigAssetEditor::GetWorldCentricTabColorScale() const
{
return FLinearColor::White;
}
void FBagConfigAssetEditor::RegisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
WorkspaceMenuCategory = tabManager->AddLocalWorkspaceMenuCategory( FText::FromString("BagShape"));
tabManager->RegisterTabSpawner(BagConfigEditorTabId, FOnSpawnTab::CreateSP(this, &FBagConfigAssetEditor::SpawnBagConfigEditorTab))
.SetDisplayName( FText::FromString("BagShapeEditor"))
.SetGroup(WorkspaceMenuCategory.ToSharedRef());
}
void FBagConfigAssetEditor::UnregisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
tabManager->UnregisterTabSpawner(BagConfigEditorTabId);
}
TSharedRef<SDockTab> FBagConfigAssetEditor::SpawnBagConfigEditorTab(const FSpawnTabArgs& Args)
{
return SNew(SDockTab)
.TabRole(ETabRole::NomadTab)
.Label(FText::FromString(FString::Printf(TEXT("Bag Class Editor - %s"), *BagConfigAsset->GetName())))
[
SNew(SBagConfigEditorWidget)
.BagConfigAsset(BagConfigAsset)
];
}

View File

@ -1,74 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetEditor/BagShapeAssetEditor.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
#include "Widgets/BagShapeEditorWidget.h"
const FName FBagShapeAssetEditor::BagShapeEditorTabId(TEXT("BagShapeEditor"));
void FBagShapeAssetEditor::Initialize(const EToolkitMode::Type Mode,
const TSharedPtr<class IToolkitHost>& InitToolkitHost, UBagShapeAsset* InBagShapeAsset)
{
BagShapeAsset = InBagShapeAsset;
const TSharedRef<FTabManager::FLayout> StandaloneDefaultLayout = FTabManager::NewLayout("Standalone_BagShapeAssetEditor_Layout_v1")
->AddArea
(
FTabManager::NewPrimaryArea()->SetOrientation(Orient_Vertical)
->Split
(
FTabManager::NewStack()
->SetSizeCoefficient(1.0f)
->AddTab(BagShapeEditorTabId, ETabState::OpenedTab)
)
);
FAssetEditorToolkit::InitAssetEditor(Mode, InitToolkitHost, TEXT("BagShapeAssetEditorApp"), StandaloneDefaultLayout, true, true, InBagShapeAsset);
}
FName FBagShapeAssetEditor::GetToolkitFName() const
{
return FName("BagShapeEditor");
}
FText FBagShapeAssetEditor::GetBaseToolkitName() const
{
return FText::FromString("Base BagShapeEditor");
}
FString FBagShapeAssetEditor::GetWorldCentricTabPrefix() const
{
return TEXT("ShapeTab");
}
FLinearColor FBagShapeAssetEditor::GetWorldCentricTabColorScale() const
{
//return FLinearColor::White;
return FLinearColor(1.f, 0.8f, 0.45f, 0.5f);
}
void FBagShapeAssetEditor::RegisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
WorkspaceMenuCategory = tabManager->AddLocalWorkspaceMenuCategory( FText::FromString("BagShape"));
tabManager->RegisterTabSpawner(BagShapeEditorTabId, FOnSpawnTab::CreateSP(this, &FBagShapeAssetEditor::SpawnBagShapeEditorTab))
.SetDisplayName( FText::FromString("BagShapeEditor"))
.SetGroup(WorkspaceMenuCategory.ToSharedRef());
}
void FBagShapeAssetEditor::UnregisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
tabManager->UnregisterTabSpawner(BagShapeEditorTabId);
}
TSharedRef<SDockTab> FBagShapeAssetEditor::SpawnBagShapeEditorTab(const FSpawnTabArgs& Args)
{
return SNew(SDockTab)
.TabRole(ETabRole::PanelTab)
[
SNew(SBagShapeEditorWidget)
.BagShapeAsset(BagShapeAsset)
];
}

Some files were not shown because too many files have changed in this diff Show More