Files
BladeSmith/Source/BladeSmith/IronBlock.h
T

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;
};