initial commit
This commit is contained in:
commit
7f4fd950df
150
AdventureCameraPawn.cpp
Normal file
150
AdventureCameraPawn.cpp
Normal file
@ -0,0 +1,150 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "AdventureCameraPawn.h"
|
||||
|
||||
#include "AdventureMap.h"
|
||||
#include "AdventurePlayerController.h"
|
||||
#include "AdventureCharacter.h"
|
||||
|
||||
#include "GameFramework/PlayerController.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
#include "math.h"
|
||||
|
||||
// Sets default values
|
||||
AAdventureCameraPawn::AAdventureCameraPawn()
|
||||
{
|
||||
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
ESASize = .01;
|
||||
BaseScrollSpeed = 15;
|
||||
ScrollAccelleration = BaseScrollSpeed * 2;
|
||||
|
||||
ESAMaxBoundSlope = 1 / (1 - (1-ESASize));
|
||||
ESAMaxBoundIntercept = 1 - ESAMaxBoundSlope;
|
||||
|
||||
ESAMinBoundSlope = -1 / ESASize;
|
||||
ESAMinBoundIntercept = 0 - (ESAMinBoundSlope * ESASize);
|
||||
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void AAdventureCameraPawn::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
ControllerRef = (AAdventurePlayerController*)UGameplayStatics::GetPlayerController(GetWorld(), 0);
|
||||
|
||||
Viewport = GetWorld()->GetGameViewport();
|
||||
ViewSize = Viewport->Viewport->GetSizeXY();
|
||||
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
void AAdventureCameraPawn::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
}
|
||||
|
||||
// Called to bind functionality to input
|
||||
void AAdventureCameraPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||
{
|
||||
Super::SetupPlayerInputComponent(PlayerInputComponent);
|
||||
if (PlayerInputComponent)
|
||||
{
|
||||
PlayerInputComponent->BindAxis("Mouse X", this, &AAdventureCameraPawn::EdgeScrollSide);
|
||||
PlayerInputComponent->BindAxis("Mouse Y", this, &AAdventureCameraPawn::EdgeScrollVert);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AAdventureCameraPawn::EdgeScrollSide(float AxisValue)
|
||||
{
|
||||
float mouseX;
|
||||
float mouseY;
|
||||
ControllerRef->GetMousePosition(mouseX, mouseY);
|
||||
float mousePosX = mouseX / ViewSize.X;
|
||||
float VertAccelleration = GetInputAxisValue("Mouse Y") * (ScrollAccelleration * .75);
|
||||
|
||||
if (mousePosX <= ESASize) // if in LEFT area
|
||||
{
|
||||
////// Scroll LEFT with Vert Accelleration
|
||||
float SpeedX = (mousePosX * ESAMinBoundSlope + ESAMinBoundIntercept) * BaseScrollSpeed;
|
||||
AddActorLocalOffset(FVector(VertAccelleration, -SpeedX, 0));
|
||||
|
||||
if (AxisValue < .0 && mousePosX <= .005) // if mouse moving LEFT and touching EDGE
|
||||
{
|
||||
////// Add LEFT accelleration
|
||||
SpeedX = AxisValue * ScrollAccelleration;
|
||||
AddActorLocalOffset(FVector(0, SpeedX, 0));
|
||||
}
|
||||
}
|
||||
|
||||
if (mousePosX >= 1-ESASize) // if in RIGHT area
|
||||
{
|
||||
////// Scroll RIGHT
|
||||
float SpeedX = (mousePosX * ESAMaxBoundSlope + ESAMaxBoundIntercept) * BaseScrollSpeed;
|
||||
AddActorLocalOffset(FVector(VertAccelleration, SpeedX, 0));
|
||||
|
||||
if (AxisValue > .0 && mousePosX >= .995) // if mouse moving RIGHT and touching EDGE
|
||||
{
|
||||
////// Add RIGHT accelleration
|
||||
SpeedX = AxisValue * ScrollAccelleration;
|
||||
AddActorLocalOffset(FVector(0, SpeedX, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AAdventureCameraPawn::EdgeScrollVert(float AxisValue)
|
||||
{
|
||||
float mouseX;
|
||||
float mouseY;
|
||||
ControllerRef->GetMousePosition(mouseX, mouseY);
|
||||
float mousePosY = mouseY / ViewSize.Y;
|
||||
float SideAccelleration = GetInputAxisValue("Mouse X") * (ScrollAccelleration * .75);
|
||||
|
||||
if (mousePosY <= ESASize) // if in TOP area
|
||||
{
|
||||
////// Scroll TOP
|
||||
float SpeedY = (mousePosY * ESAMinBoundSlope + ESAMinBoundIntercept) * BaseScrollSpeed;
|
||||
AddActorLocalOffset(FVector(SpeedY, SideAccelleration, 0));
|
||||
|
||||
if (AxisValue > .0 && mousePosY <= .005) // if mouse moving TOP and touching EDGE
|
||||
{
|
||||
////// Add TOP accelleration
|
||||
SpeedY = AxisValue * ScrollAccelleration;
|
||||
AddActorLocalOffset(FVector(SpeedY, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
if (mousePosY >= 1-ESASize) // if in BOTTOM area
|
||||
{
|
||||
////// Scroll BOTTOM
|
||||
float SpeedY = (mousePosY * ESAMaxBoundSlope + ESAMaxBoundIntercept) * BaseScrollSpeed;
|
||||
AddActorLocalOffset(FVector(-SpeedY, SideAccelleration, 0));
|
||||
|
||||
if (AxisValue < .0 && mousePosY >= .995) // if mouse moving BOTTOM and touching EDGE
|
||||
{
|
||||
////// add BOTTOM accelleration
|
||||
SpeedY = AxisValue * ScrollAccelleration;
|
||||
AddActorLocalOffset(FVector(SpeedY, 0, 0));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void AAdventureCameraPawn::FollowAdvPawn()
|
||||
{
|
||||
UE_LOG(LogTemp, Warning, TEXT("following..."));
|
||||
|
||||
AdvPawnLocationCurrent = AdvPawnRef->GetActorLocation();
|
||||
AdvPawnLocationDelta = AdvPawnLocationCurrent - AdvPawnLocationPrevious;
|
||||
|
||||
UE_LOG(LogTemp, Warning, TEXT("%s"), *AdvPawnLocationDelta.ToString());
|
||||
|
||||
AddActorLocalOffset(AdvPawnLocationDelta);
|
||||
|
||||
AdvPawnLocationPrevious = AdvPawnLocationCurrent;
|
||||
}
|
75
AdventureCameraPawn.h
Normal file
75
AdventureCameraPawn.h
Normal file
@ -0,0 +1,75 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Pawn.h"
|
||||
#include "AdventureCameraPawn.generated.h"
|
||||
|
||||
UCLASS()
|
||||
class FRAY_API AAdventureCameraPawn : public APawn
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Sets default values for this pawn's properties
|
||||
AAdventureCameraPawn();
|
||||
|
||||
UPROPERTY()
|
||||
UGameViewportClient* Viewport;
|
||||
UPROPERTY()
|
||||
FIntPoint ViewSize;
|
||||
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Config")
|
||||
class AAdventureMap* AdvMapRef;
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Config")
|
||||
class AAdventurePlayerController* ControllerRef;
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Config")
|
||||
class AAdventureCharacter* AdvPawnRef;
|
||||
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
|
||||
float ESASize;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
|
||||
float ScrollAccelleration;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
|
||||
float BaseScrollSpeed;
|
||||
|
||||
UPROPERTY()
|
||||
FVector AdvPawnLocationPrevious;
|
||||
UPROPERTY()
|
||||
FVector AdvPawnLocationCurrent;
|
||||
UPROPERTY()
|
||||
FVector AdvPawnLocationDelta;
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Runtime")
|
||||
bool bAdvPawnIsMoving;
|
||||
|
||||
UPROPERTY(BlueprintReadWrite, Category = "Runtime")
|
||||
class AHexTile* SelectedHex;
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
float ESAMaxBoundSlope;
|
||||
float ESAMaxBoundIntercept;
|
||||
|
||||
float ESAMinBoundSlope;
|
||||
float ESAMinBoundIntercept;
|
||||
|
||||
|
||||
public:
|
||||
// Called every frame
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
// Called to bind functionality to input
|
||||
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void EdgeScrollSide(float AxisValue);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void EdgeScrollVert(float AxisValue);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void FollowAdvPawn();
|
||||
};
|
34
AdventureCharacter.cpp
Normal file
34
AdventureCharacter.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "AdventureCharacter.h"
|
||||
|
||||
// Sets default values
|
||||
AAdventureCharacter::AAdventureCharacter()
|
||||
{
|
||||
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void AAdventureCharacter::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
void AAdventureCharacter::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
}
|
||||
|
||||
// Called to bind functionality to input
|
||||
void AAdventureCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||
{
|
||||
Super::SetupPlayerInputComponent(PlayerInputComponent);
|
||||
|
||||
}
|
||||
|
29
AdventureCharacter.h
Normal file
29
AdventureCharacter.h
Normal file
@ -0,0 +1,29 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Character.h"
|
||||
#include "AdventureCharacter.generated.h"
|
||||
|
||||
UCLASS()
|
||||
class FRAY_API AAdventureCharacter : public ACharacter
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Sets default values for this character's properties
|
||||
AAdventureCharacter();
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
public:
|
||||
// Called every frame
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
// Called to bind functionality to input
|
||||
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||
|
||||
};
|
88
AdventureMap.cpp
Normal file
88
AdventureMap.cpp
Normal file
@ -0,0 +1,88 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "AdventureMap.h"
|
||||
#include "HexTile.h"
|
||||
#include "AdventureCameraPawn.h"
|
||||
#include "AdventureCharacter.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
|
||||
// Sets default values
|
||||
AAdventureMap::AAdventureMap()
|
||||
{
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void AAdventureMap::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
UWorld* World = GetWorld();
|
||||
if (IsValid(BaseTileClass))
|
||||
{
|
||||
MakeGrid();
|
||||
}
|
||||
}
|
||||
|
||||
// Every Hex Tile's index within the Grid Array can be derived from its Q and R coordinates
|
||||
int32 AAdventureMap::GridIndex(int32 qAxial, int32 rAxial)
|
||||
{
|
||||
/*
|
||||
* The Q axis is (i.e. columns are) oriented diagonally.
|
||||
* The Hex Grid has a rough square shape, hence the Q coordinates must be offset by -1 every other row.
|
||||
*/
|
||||
int32 column = qAxial + FMath::FloorToInt(rAxial / 2);
|
||||
return (rAxial * GridSize) + column;
|
||||
}
|
||||
|
||||
// Called once on Begin Play
|
||||
void AAdventureMap::MakeGrid()
|
||||
{
|
||||
UWorld* World = GetWorld();
|
||||
FVector NextHexAt = FVector();
|
||||
float HexWidth = sqrt(3) * TileSize;
|
||||
int QOffset = 0;
|
||||
|
||||
for (int r = 1; r <= GridSize; r++)
|
||||
{
|
||||
float XOffset = 0.f;
|
||||
|
||||
if (r % 2 != 0)
|
||||
{
|
||||
if (r > 1)
|
||||
{
|
||||
QOffset--; // The Q axis is (i.e. columns are) oriented diagonally.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
XOffset = HexWidth / 2;
|
||||
}
|
||||
|
||||
for (int q = 1; q <= GridSize; q++)
|
||||
{
|
||||
NextHexAt.X = XOffset + (HexWidth * q);
|
||||
NextHexAt.Y = TileSize * 1.5f * r;
|
||||
NextHexAt.Z = 0.f;
|
||||
|
||||
FTransform SpawnTransform = FTransform(NextHexAt);
|
||||
AHexTile* Tile = World->SpawnActor<AHexTile>(BaseTileClass, SpawnTransform);
|
||||
|
||||
Tile->Q = q - 1 + QOffset;
|
||||
Tile->R = r - 1;
|
||||
|
||||
Grid.Add(Tile);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& tile : Grid)
|
||||
{
|
||||
tile->Index = GridIndex(tile->Q, tile->R);
|
||||
}
|
||||
}
|
||||
|
||||
AHexTile* AAdventureMap::RandomHex()
|
||||
{
|
||||
int32 SpawnHex = GridIndex(FMath::RandRange(0, GridSize), FMath::RandRange(0, GridSize));
|
||||
return Grid[SpawnHex];
|
||||
}
|
51
AdventureMap.h
Normal file
51
AdventureMap.h
Normal file
@ -0,0 +1,51 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "AdventureMap.generated.h"
|
||||
|
||||
class AHexTile;
|
||||
class AAdventureCharacter;
|
||||
|
||||
UCLASS()
|
||||
class FRAY_API AAdventureMap : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Sets default values for this actor's properties
|
||||
AAdventureMap();
|
||||
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Config")
|
||||
TSubclassOf<AHexTile> BaseTileClass;
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Config")
|
||||
TSubclassOf<ACharacter> BasePartyCharacterClass;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Config")
|
||||
int32 GridSize = 100; // squared is the number of Tiles
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Config")
|
||||
int32 TileSize = 100;
|
||||
UPROPERTY(VisibleInstanceOnly, BlueprintReadWrite, Category = "MapData")
|
||||
TArray<AHexTile*> Grid;
|
||||
UFUNCTION(BlueprintCallable)
|
||||
int32 GridIndex(int32 q, int32 r);
|
||||
|
||||
// Player spawn section
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
|
||||
APawn* CameraPawn;
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
|
||||
AAdventureCharacter* PlayerCharacter;
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void MakeGrid();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
AHexTile* RandomHex();
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
|
||||
|
||||
};
|
16
AdventurePlayerController.cpp
Normal file
16
AdventurePlayerController.cpp
Normal file
@ -0,0 +1,16 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "AdventurePlayerController.h"
|
||||
#include "AdventureMap.h"
|
||||
#include "HexTile.h"
|
||||
#include "AdventureCameraPawn.h"
|
||||
#include "AdventureCharacter.h"
|
||||
|
||||
|
||||
AAdventurePlayerController::AAdventurePlayerController()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
PrimaryActorTick.bStartWithTickEnabled = true;
|
||||
|
||||
}
|
27
AdventurePlayerController.h
Normal file
27
AdventurePlayerController.h
Normal file
@ -0,0 +1,27 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/PlayerController.h"
|
||||
|
||||
#include "AdventurePlayerController.generated.h"
|
||||
|
||||
class AAdventureMap;
|
||||
class AHexTile;
|
||||
class AAdventureCameraPawn;
|
||||
class AAdventureCharacter;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class FRAY_API AAdventurePlayerController : public APlayerController
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
AAdventurePlayerController();
|
||||
|
||||
public:
|
||||
};
|
34
Clickable.cpp
Normal file
34
Clickable.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "Clickable.h"
|
||||
|
||||
// Sets default values for this component's properties
|
||||
UClickable::UClickable()
|
||||
{
|
||||
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
|
||||
// off to improve performance if you don't need them.
|
||||
PrimaryComponentTick.bCanEverTick = true;
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
|
||||
// Called when the game starts
|
||||
void UClickable::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Called every frame
|
||||
void UClickable::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
|
||||
{
|
||||
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
||||
|
||||
// ...
|
||||
}
|
||||
|
28
Clickable.h
Normal file
28
Clickable.h
Normal file
@ -0,0 +1,28 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Components/ActorComponent.h"
|
||||
#include "Clickable.generated.h"
|
||||
|
||||
|
||||
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
|
||||
class FRAY_API UClickable : public UActorComponent
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Sets default values for this component's properties
|
||||
UClickable();
|
||||
|
||||
protected:
|
||||
// Called when the game starts
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
public:
|
||||
// Called every frame
|
||||
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
||||
|
||||
|
||||
};
|
23
FRAY.Build.cs
Normal file
23
FRAY.Build.cs
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class FRAY : ModuleRules
|
||||
{
|
||||
public FRAY(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
|
||||
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
|
||||
|
||||
PrivateDependencyModuleNames.AddRange(new string[] { });
|
||||
|
||||
// Uncomment if you are using Slate UI
|
||||
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
|
||||
|
||||
// Uncomment if you are using online features
|
||||
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
|
||||
|
||||
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
|
||||
}
|
||||
}
|
14
FRAY.Target.cs
Normal file
14
FRAY.Target.cs
Normal file
@ -0,0 +1,14 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class FRAYTarget : TargetRules
|
||||
{
|
||||
public FRAYTarget( TargetInfo Target) : base(Target)
|
||||
{
|
||||
Type = TargetType.Game;
|
||||
DefaultBuildSettings = BuildSettingsVersion.V2;
|
||||
ExtraModuleNames.AddRange( new string[] { "FRAY" } );
|
||||
}
|
||||
}
|
6
FRAY.cpp
Normal file
6
FRAY.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "FRAY.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, FRAY, "FRAY" );
|
6
FRAY.h
Normal file
6
FRAY.h
Normal file
@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
14
FRAYEditor.Target.cs
Normal file
14
FRAYEditor.Target.cs
Normal file
@ -0,0 +1,14 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class FRAYEditorTarget : TargetRules
|
||||
{
|
||||
public FRAYEditorTarget( TargetInfo Target) : base(Target)
|
||||
{
|
||||
Type = TargetType.Editor;
|
||||
DefaultBuildSettings = BuildSettingsVersion.V2;
|
||||
ExtraModuleNames.AddRange( new string[] { "FRAY" } );
|
||||
}
|
||||
}
|
5
FRAYGameModeBase.cpp
Normal file
5
FRAYGameModeBase.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
|
||||
#include "FRAYGameModeBase.h"
|
||||
|
17
FRAYGameModeBase.h
Normal file
17
FRAYGameModeBase.h
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/GameModeBase.h"
|
||||
#include "FRAYGameModeBase.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class FRAY_API AFRAYGameModeBase : public AGameModeBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
};
|
44
HexTile.cpp
Normal file
44
HexTile.cpp
Normal file
@ -0,0 +1,44 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "HexTile.h"
|
||||
#include "AdventurePlayerController.h"
|
||||
|
||||
#include "Kismet/KismetMathLibrary.h"
|
||||
|
||||
// Sets default values
|
||||
AHexTile::AHexTile()
|
||||
{
|
||||
TileSize = 100.f;
|
||||
|
||||
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("Scene"));
|
||||
|
||||
this->FillCornersArray();
|
||||
|
||||
// OnClicked.AddDynamic(this, )
|
||||
}
|
||||
|
||||
void AHexTile::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
}
|
||||
|
||||
FVector AHexTile::Corner(int32 i)
|
||||
{
|
||||
FVector TileCenter = this->GetActorTransform().GetLocation();
|
||||
|
||||
int32 Angle_Deg = 60 * i - 30;
|
||||
float Angle_Rad = UKismetMathLibrary::GetPI()/180 * Angle_Deg;
|
||||
float X = TileCenter.X + TileSize * cos(Angle_Rad);
|
||||
float Y = TileCenter.Y + TileSize * sin(Angle_Rad);
|
||||
|
||||
return FVector(X, Y, 0.f);
|
||||
}
|
||||
void AHexTile::FillCornersArray()
|
||||
{
|
||||
for (int32 i = 0 ; i < 6; i++)
|
||||
{
|
||||
Corners.Emplace(Corner(i + 1));
|
||||
}
|
||||
}
|
||||
|
48
HexTile.h
Normal file
48
HexTile.h
Normal file
@ -0,0 +1,48 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
|
||||
#include "HexTile.generated.h"
|
||||
|
||||
class USceneComponent;
|
||||
class UStaticMeshComponent;
|
||||
|
||||
class AAdventurePlayerController;
|
||||
|
||||
UCLASS()
|
||||
class FRAY_API AHexTile : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Sets default value for this actor's properties
|
||||
AHexTile();
|
||||
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Config")
|
||||
float TileSize;
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
||||
USceneComponent* SceneComponent;
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
FVector Corner(int32 i);
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime")
|
||||
TArray<FVector> Corners;
|
||||
UFUNCTION()
|
||||
void FillCornersArray();
|
||||
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime")
|
||||
int32 Q;
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime")
|
||||
int32 R;
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Runtime")
|
||||
int32 Index;
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
};
|
||||
|
28
WalkAnimInstance.cpp
Normal file
28
WalkAnimInstance.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "WalkAnimInstance.h"
|
||||
#include "GameFramework/Pawn.h"
|
||||
#include "GameFramework/PawnMovementComponent.h"
|
||||
|
||||
|
||||
void UWalkAnimInstance::NativeInitializeAnimation()
|
||||
{
|
||||
if (Pawn == nullptr)
|
||||
{
|
||||
Pawn = TryGetPawnOwner();
|
||||
}
|
||||
|
||||
if (IsValid(Pawn))
|
||||
{
|
||||
MovementComponent = Pawn->GetMovementComponent();
|
||||
}
|
||||
}
|
||||
|
||||
void UWalkAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
|
||||
{
|
||||
if (Pawn && MovementComponent)
|
||||
{
|
||||
Speed = Pawn->GetVelocity().Size();
|
||||
}
|
||||
}
|
34
WalkAnimInstance.h
Normal file
34
WalkAnimInstance.h
Normal file
@ -0,0 +1,34 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Animation/AnimInstance.h"
|
||||
#include "WalkAnimInstance.generated.h"
|
||||
|
||||
class APawn;
|
||||
class UPawnMovementComponent;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class FRAY_API UWalkAnimInstance : public UAnimInstance
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Movement")
|
||||
float Speed;
|
||||
|
||||
UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "Movement")
|
||||
APawn* Pawn;
|
||||
|
||||
UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "Movement")
|
||||
UPawnMovementComponent* MovementComponent;
|
||||
|
||||
virtual void NativeInitializeAnimation() override;
|
||||
|
||||
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
|
||||
|
||||
};
|
Loading…
Reference in New Issue
Block a user