#pragma once

#include "CoreMinimal.h"
#include "GameFramework/SaveGame.h"
#include "HyperTwistCore/HyperTwistCoreLibrary.h"
#include "HyperTwistSimulation/HyperTwistVirtual3333ProjectionLibrary.h"

#include "HyperTwistFourDimensionalSaveGame.generated.h"

UCLASS()
class UNREALHYPERTWIST_API UHyperTwistFourDimensionalSaveGame : public USaveGame
{
	GENERATED_BODY()

public:
	UPROPERTY()
	int32 SchemaVersion = 1;

	UPROPERTY()
	int32 PuzzleOrder = 0;

	UPROPERTY()
	bool bUsesCellFirstState = false;

	UPROPERTY()
	FHyperTwistPuzzleState CellFirstState;

	UPROPERTY()
	FHyperTwistVirtual3333RuntimeState VisibleSliceState;

	UPROPERTY()
	EHyperTwistVirtual3333Axis SliceAxis = EHyperTwistVirtual3333Axis::W;

	UPROPERTY()
	int32 SliceCoordinate = 1;

	UPROPERTY()
	EHyperTwistVirtual3333Axis RotationAxis = EHyperTwistVirtual3333Axis::X;

	UPROPERTY()
	bool bRenderCellShells = false;

	UPROPERTY()
	FString LastAppliedNotation;

	UPROPERTY()
	FString SavedAtUtc;
};
