Illusion-UE5/hwanyoung2/Plugins/FMODStudio/Source/FMODStudioEditor/Private/FMODEventEditor.h
2024-02-10 17:06:19 -05:00

88 lines
2.8 KiB
C++

// Copyright (c), Firelight Technologies Pty, Ltd. 2012-2023.
#pragma once
#include "Toolkits/AssetEditorToolkit.h"
#include "fmod_studio_common.h"
namespace FMOD
{
namespace Studio
{
class EventDescription;
class EventInstance;
}
}
static bool operator==(const FMOD_STUDIO_PARAMETER_ID &a, const FMOD_STUDIO_PARAMETER_ID &b)
{
return (a.data1 == b.data1 && a.data2 == b.data2);
}
FORCEINLINE uint32 GetTypeHash(const FMOD_STUDIO_PARAMETER_ID& id)
{
return FCrc::MemCrc_DEPRECATED(&id, sizeof(FMOD_STUDIO_PARAMETER_ID));
}
class FFMODEventEditor : public FAssetEditorToolkit
{
public:
virtual void RegisterTabSpawners(const TSharedRef<class FTabManager> &NewTabManager) override;
virtual void UnregisterTabSpawners(const TSharedRef<class FTabManager> &NewTabManager) override;
/**
* Edits the specified event
*
* @param Mode Asset editing mode for this editor (standalone or world-centric)
* @param InitToolkitHost When Mode is WorldCentric, this is the level editor instance to spawn this editor within
* @param Event The event to edit
*/
void InitFMODEventEditor(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost> &InitToolkitHost, class UFMODEvent *Event);
/** Constructor */
FFMODEventEditor();
/** Destructor */
virtual ~FFMODEventEditor();
UFMODEvent *GetEditedEvent() const;
FMOD::Studio::EventDescription *GetEventDescription() const;
void PlayEvent();
void PauseEvent();
void StopEvent();
float GetParameterValue(FMOD_STUDIO_PARAMETER_ID Id);
void SetParameterValue(FMOD_STUDIO_PARAMETER_ID ParameterId, float Value);
void AddParameter(FMOD_STUDIO_PARAMETER_ID ParameterId, float Value);
/** IToolkit interface */
virtual FName GetToolkitFName() const override;
virtual FText GetBaseToolkitName() const override;
virtual FString GetWorldCentricTabPrefix() const override;
virtual FLinearColor GetWorldCentricTabColorScale() const override;
private:
TMap<FMOD_STUDIO_PARAMETER_ID, float> ParameterValues;
FMOD::Studio::EventInstance *CurrentPreviewEventInstance;
void HandlePreBanksReloaded();
void HandleBanksReloaded();
void HandleBeginPIE(bool bSimulating);
/** Creates all internal widgets for the tabs to point at */
void CreateInternalWidgets();
/** Spawns the tab with the FMOD event inside */
TSharedRef<SDockTab> SpawnTab_EventEditor(const FSpawnTabArgs &Args);
TSharedPtr<class SFMODEventEditorPanel> FMODEventEditorPanel;
TSharedPtr<SDockTab> OwnerTab;
/** The tab id for the event editor tab */
static const FName EventEditorTabId;
/** FMOD event editor app identifier string */
static const FName FMODEventEditorAppIdentifier;
class UFMODEvent *EditedEvent;
FDelegateHandle BeginPIEDelegateHandle;
};