Files
WizardingHub/Source/WizardingCentral/Characters/LumiController.cpp
T

145 lines
4.6 KiB
C++

// Copyright Team Lumi. All Rights Reserved.
#include "LumiController.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputMappingContext.h"
void ALumiController::ShowMouseCursor()
{
FInputModeGameAndUI InputMode;
InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);
InputMode.SetHideCursorDuringCapture(false);
bShowMouseCursor = true;
SetInputMode(InputMode);
}
void ALumiController::HideMouseCursor()
{
FInputModeGameAndUI InputMode;
InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways);
InputMode.SetHideCursorDuringCapture(true);
bShowMouseCursor = false;
SetInputMode(InputMode);
}
void ALumiController::GetLumiCharacter(ALumiCharacter*& OutLumiCharacter) const
{
OutLumiCharacter = LumiCharacter;
}
ALumiCharacter* ALumiController::GetLumiCharacter() const
{
return LumiCharacter;
}
void ALumiController::OnPossess(APawn* InPawn)
{
Super::OnPossess(InPawn);
LumiCharacter = Cast<ALumiCharacter>(InPawn);
checkf(
LumiCharacter,
TEXT("ALumiController::OnPossess() InPawn is not a ALumiCharacter!")
);
EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent);
checkf(
EnhancedInputComponent,
TEXT("ALumiController::OnPossess() InputComponent is not a UEnhancedInputComponent!")
);
UEnhancedInputLocalPlayerSubsystem* EnhancedInputSubsystem =
ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer());
checkf(
EnhancedInputSubsystem,
TEXT("ALumiController::OnPossess() EnhancedInputSubsystem is nullptr!")
);
checkf(
InputMappingContext,
TEXT("ALumiController::OnPossess() InputMappingContext is nullptr!")
);
EnhancedInputSubsystem->ClearAllMappings();
EnhancedInputSubsystem->AddMappingContext(InputMappingContext, MappingPriority);
if (GrabAction)
{
EnhancedInputComponent->BindAction(GrabAction,
ETriggerEvent::Triggered,
LumiCharacter,
&ALumiCharacter::OnGrabActionTriggered);
}
if (JumpAction)
{
EnhancedInputComponent->BindAction(JumpAction,
ETriggerEvent::Started,
LumiCharacter,
&ALumiCharacter::OnJumpActionStarted);
EnhancedInputComponent->BindAction(JumpAction,
ETriggerEvent::Ongoing,
LumiCharacter,
&ALumiCharacter::OnJumpActionOngoing);
EnhancedInputComponent->BindAction(JumpAction,
ETriggerEvent::Completed,
LumiCharacter,
&ALumiCharacter::OnJumpActionCompleted);
}
if (MoveAction)
{
EnhancedInputComponent->BindAction(MoveAction,
ETriggerEvent::Triggered,
LumiCharacter,
&ALumiCharacter::OnMoveActionTriggered);
}
if (LookAction)
{
EnhancedInputComponent->BindAction(LookAction,
ETriggerEvent::Triggered,
LumiCharacter,
&ALumiCharacter::OnLookActionTriggered);
}
if (SpellAction)
{
EnhancedInputComponent->BindAction(SpellAction,
ETriggerEvent::Started,
this,
&ALumiController::OnSpellActionStarted);
EnhancedInputComponent->BindAction(SpellAction,
ETriggerEvent::Completed,
this,
&ALumiController::OnSpellActionCompleted);
EnhancedInputComponent->BindAction(SpellPositionAction,
ETriggerEvent::Triggered,
LumiCharacter,
&ALumiCharacter::OnSpellPositionActionTriggered);
}
if (SpellTrainSwitchAction)
{
EnhancedInputComponent->BindAction(SpellTrainSwitchAction,
ETriggerEvent::Completed,
LumiCharacter,
&ALumiCharacter::OnSpellTrainSwitchActionCompleted);
}
}
void ALumiController::OnUnPossess()
{
EnhancedInputComponent->ClearActionBindings();
Super::OnUnPossess();
}
void ALumiController::OnSpellActionStarted()
{
// ShowMouseCursor();
LumiCharacter->OnSpellActionStarted();
}
void ALumiController::OnSpellActionCompleted()
{
LumiCharacter->OnSpellActionCompleted();
// HideMouseCursor();
}