76 lines
1.9 KiB
C++
76 lines
1.9 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Actor.h"
|
|
// FDeformComputeShader.h 假定包含了 FDeformationCSDispatchParams 结构
|
|
#include "FDeformComputeShader.h"
|
|
|
|
#include "IronBlock.generated.h"
|
|
|
|
class UTextureRenderTarget2D;
|
|
class UMaterialInstanceDynamic;
|
|
class UStaticMeshComponent;
|
|
|
|
UCLASS()
|
|
class BLADESMITH_API AIronBlock : public AActor
|
|
{
|
|
GENERATED_BODY()
|
|
UPROPERTY(EditAnywhere)
|
|
UStaticMeshComponent* StaticMeshComp;
|
|
|
|
/** 用于Ping-Pong缓冲的渲染目标 A */
|
|
UPROPERTY()
|
|
UTextureRenderTarget2D* PositionRenderTarget0;
|
|
|
|
/** 用于Ping-Pong缓冲的渲染目标 B */
|
|
UPROPERTY()
|
|
UTextureRenderTarget2D* PositionRenderTarget1;
|
|
|
|
/** 应用于网格的动态材质实例 */
|
|
UPROPERTY()
|
|
UMaterialInstanceDynamic* DynMaterial;
|
|
|
|
/** 应用于网格的动态材质实例 */
|
|
UPROPERTY()
|
|
UMaterialInstanceDynamic* DynCalMaterial;
|
|
|
|
UPROPERTY(EditAnywhere)
|
|
float ImpactForce;
|
|
|
|
UPROPERTY(EditAnywhere)
|
|
float ImpactAffectRange;
|
|
UPROPERTY(EditAnywhere)
|
|
float TexSize;
|
|
public:
|
|
// Sets default values for this actor's properties
|
|
AIronBlock();
|
|
|
|
UFUNCTION(BlueprintCallable)
|
|
void OnHammerHit(const FHitResult& HitResult);
|
|
|
|
protected:
|
|
// Called when the game starts or when spawned
|
|
virtual void BeginPlay() override;
|
|
virtual void PostInitProperties();
|
|
/** 初始化两个渲染目标和它们的初始数据 */
|
|
void InitializePositionTexture();
|
|
|
|
/** 创建一个配置好用于变形计算的 RenderTarget */
|
|
UTextureRenderTarget2D* CreateDeformRT(const FString& RTName, int32 Size);
|
|
|
|
/** 设置动态材质实例和参数 */
|
|
void SetupDeformationMaterial(UTexture2D* OrigTex);
|
|
|
|
private:
|
|
/** * 双缓冲纹理索引
|
|
* 0: 读 RT0, 写 RT1
|
|
* 1: 读 RT1, 写 RT0
|
|
*/
|
|
int32 CurrentTextureIndex = 0;
|
|
|
|
public:
|
|
// Called every frame
|
|
virtual void Tick(float DeltaTime) override;
|
|
}; |