music and character
This commit is contained in:
parent
ced215fb80
commit
5ee23687d8
@ -4,14 +4,14 @@
|
||||
+EditProfiles=(Name="Trigger",CustomResponses=((Channel=Projectile, Response=ECR_Ignore)))
|
||||
|
||||
[/Script/EngineSettings.GameMapsSettings]
|
||||
EditorStartupMap=/Game/FirstPersonCPP/Maps/FirstPersonExampleMap
|
||||
EditorStartupMap=/Game/train.train
|
||||
LocalMapOptions=
|
||||
TransitionMap=
|
||||
bUseSplitscreen=True
|
||||
TwoPlayerSplitscreenLayout=Horizontal
|
||||
ThreePlayerSplitscreenLayout=FavorTop
|
||||
GameInstanceClass=/Script/Engine.GameInstance
|
||||
GameDefaultMap=/Game/FirstPersonCPP/Maps/FirstPersonExampleMap
|
||||
GameDefaultMap=/Game/train.train
|
||||
ServerDefaultMap=/Engine/Maps/Entry
|
||||
GlobalDefaultGameMode=/Script/SevenStars.SevenStarsGameMode
|
||||
GlobalDefaultServerGameMode=None
|
||||
|
@ -5,3 +5,5 @@ ProjectName=First Person Template
|
||||
|
||||
[/Script/EngineSettings.GeneralProjectSettings]
|
||||
ProjectID=806DC1DF487FAA81AFF13EA89823009B
|
||||
bAllowWindowResize=False
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
BIN
Content/FirstPersonCharacter.uasset
Normal file
BIN
Content/FirstPersonCharacter.uasset
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Content/Music/sevenstars_loop.uasset
Normal file
BIN
Content/Music/sevenstars_loop.uasset
Normal file
Binary file not shown.
Binary file not shown.
BIN
Content/train_BuiltData.uasset
Normal file
BIN
Content/train_BuiltData.uasset
Normal file
Binary file not shown.
@ -1,7 +1,6 @@
|
||||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "SevenStarsCharacter.h"
|
||||
#include "SevenStarsProjectile.h"
|
||||
#include "Animation/AnimInstance.h"
|
||||
#include "Camera/CameraComponent.h"
|
||||
#include "Components/CapsuleComponent.h"
|
||||
@ -9,18 +8,14 @@
|
||||
#include "GameFramework/InputSettings.h"
|
||||
#include "HeadMountedDisplayFunctionLibrary.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
#include "MotionControllerComponent.h"
|
||||
#include "XRMotionControllerBase.h" // for FXRMotionControllerBase::RightHandSourceId
|
||||
|
||||
DEFINE_LOG_CATEGORY_STATIC(LogFPChar, Warning, All);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// ASevenStarsCharacter
|
||||
|
||||
ASevenStarsCharacter::ASevenStarsCharacter()
|
||||
{
|
||||
// Set size for collision capsule
|
||||
GetCapsuleComponent()->InitCapsuleSize(55.f, 96.0f);
|
||||
GetCapsuleComponent()->InitCapsuleSize(20.f, 96.0f);
|
||||
|
||||
// set our turn rates for input
|
||||
BaseTurnRate = 45.f;
|
||||
@ -31,100 +26,17 @@ ASevenStarsCharacter::ASevenStarsCharacter()
|
||||
FirstPersonCameraComponent->SetupAttachment(GetCapsuleComponent());
|
||||
FirstPersonCameraComponent->RelativeLocation = FVector(-39.56f, 1.75f, 64.f); // Position the camera
|
||||
FirstPersonCameraComponent->bUsePawnControlRotation = true;
|
||||
|
||||
// Create a mesh component that will be used when being viewed from a '1st person' view (when controlling this pawn)
|
||||
Mesh1P = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("CharacterMesh1P"));
|
||||
Mesh1P->SetOnlyOwnerSee(true);
|
||||
Mesh1P->SetupAttachment(FirstPersonCameraComponent);
|
||||
Mesh1P->bCastDynamicShadow = false;
|
||||
Mesh1P->CastShadow = false;
|
||||
Mesh1P->RelativeRotation = FRotator(1.9f, -19.19f, 5.2f);
|
||||
Mesh1P->RelativeLocation = FVector(-0.5f, -4.4f, -155.7f);
|
||||
|
||||
// Create a gun mesh component
|
||||
FP_Gun = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("FP_Gun"));
|
||||
FP_Gun->SetOnlyOwnerSee(true); // only the owning player will see this mesh
|
||||
FP_Gun->bCastDynamicShadow = false;
|
||||
FP_Gun->CastShadow = false;
|
||||
// FP_Gun->SetupAttachment(Mesh1P, TEXT("GripPoint"));
|
||||
FP_Gun->SetupAttachment(RootComponent);
|
||||
|
||||
FP_MuzzleLocation = CreateDefaultSubobject<USceneComponent>(TEXT("MuzzleLocation"));
|
||||
FP_MuzzleLocation->SetupAttachment(FP_Gun);
|
||||
FP_MuzzleLocation->SetRelativeLocation(FVector(0.2f, 48.4f, -10.6f));
|
||||
|
||||
// Default offset from the character location for projectiles to spawn
|
||||
GunOffset = FVector(100.0f, 0.0f, 10.0f);
|
||||
|
||||
// Note: The ProjectileClass and the skeletal mesh/anim blueprints for Mesh1P, FP_Gun, and VR_Gun
|
||||
// are set in the derived blueprint asset named MyCharacter to avoid direct content references in C++.
|
||||
|
||||
// Create VR Controllers.
|
||||
R_MotionController = CreateDefaultSubobject<UMotionControllerComponent>(TEXT("R_MotionController"));
|
||||
R_MotionController->MotionSource = FXRMotionControllerBase::RightHandSourceId;
|
||||
R_MotionController->SetupAttachment(RootComponent);
|
||||
L_MotionController = CreateDefaultSubobject<UMotionControllerComponent>(TEXT("L_MotionController"));
|
||||
L_MotionController->SetupAttachment(RootComponent);
|
||||
|
||||
// Create a gun and attach it to the right-hand VR controller.
|
||||
// Create a gun mesh component
|
||||
VR_Gun = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("VR_Gun"));
|
||||
VR_Gun->SetOnlyOwnerSee(true); // only the owning player will see this mesh
|
||||
VR_Gun->bCastDynamicShadow = false;
|
||||
VR_Gun->CastShadow = false;
|
||||
VR_Gun->SetupAttachment(R_MotionController);
|
||||
VR_Gun->SetRelativeRotation(FRotator(0.0f, -90.0f, 0.0f));
|
||||
|
||||
VR_MuzzleLocation = CreateDefaultSubobject<USceneComponent>(TEXT("VR_MuzzleLocation"));
|
||||
VR_MuzzleLocation->SetupAttachment(VR_Gun);
|
||||
VR_MuzzleLocation->SetRelativeLocation(FVector(0.000004, 53.999992, 10.000000));
|
||||
VR_MuzzleLocation->SetRelativeRotation(FRotator(0.0f, 90.0f, 0.0f)); // Counteract the rotation of the VR gun model.
|
||||
|
||||
// Uncomment the following line to turn motion controllers on by default:
|
||||
//bUsingMotionControllers = true;
|
||||
}
|
||||
|
||||
void ASevenStarsCharacter::BeginPlay()
|
||||
{
|
||||
// Call the base class
|
||||
Super::BeginPlay();
|
||||
|
||||
//Attach gun mesh component to Skeleton, doing it here because the skeleton is not yet created in the constructor
|
||||
FP_Gun->AttachToComponent(Mesh1P, FAttachmentTransformRules(EAttachmentRule::SnapToTarget, true), TEXT("GripPoint"));
|
||||
|
||||
// Show or hide the two versions of the gun based on whether or not we're using motion controllers.
|
||||
if (bUsingMotionControllers)
|
||||
{
|
||||
VR_Gun->SetHiddenInGame(false, true);
|
||||
Mesh1P->SetHiddenInGame(true, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
VR_Gun->SetHiddenInGame(true, true);
|
||||
Mesh1P->SetHiddenInGame(false, true);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Input
|
||||
|
||||
void ASevenStarsCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
|
||||
{
|
||||
// set up gameplay key bindings
|
||||
check(PlayerInputComponent);
|
||||
|
||||
// Bind jump events
|
||||
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
|
||||
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
|
||||
|
||||
// Bind fire event
|
||||
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &ASevenStarsCharacter::OnFire);
|
||||
|
||||
// Enable touchscreen input
|
||||
EnableTouchscreenMovement(PlayerInputComponent);
|
||||
|
||||
PlayerInputComponent->BindAction("ResetVR", IE_Pressed, this, &ASevenStarsCharacter::OnResetVR);
|
||||
|
||||
// Bind movement events
|
||||
PlayerInputComponent->BindAxis("MoveForward", this, &ASevenStarsCharacter::MoveForward);
|
||||
PlayerInputComponent->BindAxis("MoveRight", this, &ASevenStarsCharacter::MoveRight);
|
||||
@ -138,122 +50,6 @@ void ASevenStarsCharacter::SetupPlayerInputComponent(class UInputComponent* Play
|
||||
PlayerInputComponent->BindAxis("LookUpRate", this, &ASevenStarsCharacter::LookUpAtRate);
|
||||
}
|
||||
|
||||
void ASevenStarsCharacter::OnFire()
|
||||
{
|
||||
// try and fire a projectile
|
||||
if (ProjectileClass != NULL)
|
||||
{
|
||||
UWorld* const World = GetWorld();
|
||||
if (World != NULL)
|
||||
{
|
||||
if (bUsingMotionControllers)
|
||||
{
|
||||
const FRotator SpawnRotation = VR_MuzzleLocation->GetComponentRotation();
|
||||
const FVector SpawnLocation = VR_MuzzleLocation->GetComponentLocation();
|
||||
World->SpawnActor<ASevenStarsProjectile>(ProjectileClass, SpawnLocation, SpawnRotation);
|
||||
}
|
||||
else
|
||||
{
|
||||
const FRotator SpawnRotation = GetControlRotation();
|
||||
// MuzzleOffset is in camera space, so transform it to world space before offsetting from the character location to find the final muzzle position
|
||||
const FVector SpawnLocation = ((FP_MuzzleLocation != nullptr) ? FP_MuzzleLocation->GetComponentLocation() : GetActorLocation()) + SpawnRotation.RotateVector(GunOffset);
|
||||
|
||||
//Set Spawn Collision Handling Override
|
||||
FActorSpawnParameters ActorSpawnParams;
|
||||
ActorSpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButDontSpawnIfColliding;
|
||||
|
||||
// spawn the projectile at the muzzle
|
||||
World->SpawnActor<ASevenStarsProjectile>(ProjectileClass, SpawnLocation, SpawnRotation, ActorSpawnParams);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// try and play the sound if specified
|
||||
if (FireSound != NULL)
|
||||
{
|
||||
UGameplayStatics::PlaySoundAtLocation(this, FireSound, GetActorLocation());
|
||||
}
|
||||
|
||||
// try and play a firing animation if specified
|
||||
if (FireAnimation != NULL)
|
||||
{
|
||||
// Get the animation object for the arms mesh
|
||||
UAnimInstance* AnimInstance = Mesh1P->GetAnimInstance();
|
||||
if (AnimInstance != NULL)
|
||||
{
|
||||
AnimInstance->Montage_Play(FireAnimation, 1.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ASevenStarsCharacter::OnResetVR()
|
||||
{
|
||||
UHeadMountedDisplayFunctionLibrary::ResetOrientationAndPosition();
|
||||
}
|
||||
|
||||
void ASevenStarsCharacter::BeginTouch(const ETouchIndex::Type FingerIndex, const FVector Location)
|
||||
{
|
||||
if (TouchItem.bIsPressed == true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ((FingerIndex == TouchItem.FingerIndex) && (TouchItem.bMoved == false))
|
||||
{
|
||||
OnFire();
|
||||
}
|
||||
TouchItem.bIsPressed = true;
|
||||
TouchItem.FingerIndex = FingerIndex;
|
||||
TouchItem.Location = Location;
|
||||
TouchItem.bMoved = false;
|
||||
}
|
||||
|
||||
void ASevenStarsCharacter::EndTouch(const ETouchIndex::Type FingerIndex, const FVector Location)
|
||||
{
|
||||
if (TouchItem.bIsPressed == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
TouchItem.bIsPressed = false;
|
||||
}
|
||||
|
||||
//Commenting this section out to be consistent with FPS BP template.
|
||||
//This allows the user to turn without using the right virtual joystick
|
||||
|
||||
//void ASevenStarsCharacter::TouchUpdate(const ETouchIndex::Type FingerIndex, const FVector Location)
|
||||
//{
|
||||
// if ((TouchItem.bIsPressed == true) && (TouchItem.FingerIndex == FingerIndex))
|
||||
// {
|
||||
// if (TouchItem.bIsPressed)
|
||||
// {
|
||||
// if (GetWorld() != nullptr)
|
||||
// {
|
||||
// UGameViewportClient* ViewportClient = GetWorld()->GetGameViewport();
|
||||
// if (ViewportClient != nullptr)
|
||||
// {
|
||||
// FVector MoveDelta = Location - TouchItem.Location;
|
||||
// FVector2D ScreenSize;
|
||||
// ViewportClient->GetViewportSize(ScreenSize);
|
||||
// FVector2D ScaledDelta = FVector2D(MoveDelta.X, MoveDelta.Y) / ScreenSize;
|
||||
// if (FMath::Abs(ScaledDelta.X) >= 4.0 / ScreenSize.X)
|
||||
// {
|
||||
// TouchItem.bMoved = true;
|
||||
// float Value = ScaledDelta.X * BaseTurnRate;
|
||||
// AddControllerYawInput(Value);
|
||||
// }
|
||||
// if (FMath::Abs(ScaledDelta.Y) >= 4.0 / ScreenSize.Y)
|
||||
// {
|
||||
// TouchItem.bMoved = true;
|
||||
// float Value = ScaledDelta.Y * BaseTurnRate;
|
||||
// AddControllerPitchInput(Value);
|
||||
// }
|
||||
// TouchItem.Location = Location;
|
||||
// }
|
||||
// TouchItem.Location = Location;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
void ASevenStarsCharacter::MoveForward(float Value)
|
||||
{
|
||||
if (Value != 0.0f)
|
||||
@ -283,18 +79,3 @@ void ASevenStarsCharacter::LookUpAtRate(float Rate)
|
||||
// calculate delta for this frame from the rate information
|
||||
AddControllerPitchInput(Rate * BaseLookUpRate * GetWorld()->GetDeltaSeconds());
|
||||
}
|
||||
|
||||
bool ASevenStarsCharacter::EnableTouchscreenMovement(class UInputComponent* PlayerInputComponent)
|
||||
{
|
||||
if (FPlatformMisc::SupportsTouchInput() || GetDefault<UInputSettings>()->bUseMouseForTouch)
|
||||
{
|
||||
PlayerInputComponent->BindTouch(EInputEvent::IE_Pressed, this, &ASevenStarsCharacter::BeginTouch);
|
||||
PlayerInputComponent->BindTouch(EInputEvent::IE_Released, this, &ASevenStarsCharacter::EndTouch);
|
||||
|
||||
//Commenting this out to be more consistent with FPS BP template.
|
||||
//PlayerInputComponent->BindTouch(EInputEvent::IE_Repeat, this, &ASevenStarsCharacter::TouchUpdate);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -17,34 +17,10 @@ class ASevenStarsCharacter : public ACharacter
|
||||
UPROPERTY(VisibleDefaultsOnly, Category=Mesh)
|
||||
class USkeletalMeshComponent* Mesh1P;
|
||||
|
||||
/** Gun mesh: 1st person view (seen only by self) */
|
||||
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
|
||||
class USkeletalMeshComponent* FP_Gun;
|
||||
|
||||
/** Location on gun mesh where projectiles should spawn. */
|
||||
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
|
||||
class USceneComponent* FP_MuzzleLocation;
|
||||
|
||||
/** Gun mesh: VR view (attached to the VR controller directly, no arm, just the actual gun) */
|
||||
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
|
||||
class USkeletalMeshComponent* VR_Gun;
|
||||
|
||||
/** Location on VR gun mesh where projectiles should spawn. */
|
||||
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
|
||||
class USceneComponent* VR_MuzzleLocation;
|
||||
|
||||
/** First person camera */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
|
||||
class UCameraComponent* FirstPersonCameraComponent;
|
||||
|
||||
/** Motion controller (right hand) */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
|
||||
class UMotionControllerComponent* R_MotionController;
|
||||
|
||||
/** Motion controller (left hand) */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
|
||||
class UMotionControllerComponent* L_MotionController;
|
||||
|
||||
public:
|
||||
ASevenStarsCharacter();
|
||||
|
||||
@ -64,10 +40,6 @@ public:
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Gameplay)
|
||||
FVector GunOffset;
|
||||
|
||||
/** Projectile class to spawn */
|
||||
UPROPERTY(EditDefaultsOnly, Category=Projectile)
|
||||
TSubclassOf<class ASevenStarsProjectile> ProjectileClass;
|
||||
|
||||
/** Sound to play each time we fire */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Gameplay)
|
||||
class USoundBase* FireSound;
|
||||
@ -82,12 +54,6 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
/** Fires a projectile. */
|
||||
void OnFire();
|
||||
|
||||
/** Resets HMD orientation and position in VR. */
|
||||
void OnResetVR();
|
||||
|
||||
/** Handles moving forward/backward */
|
||||
void MoveForward(float Val);
|
||||
|
||||
@ -106,32 +72,11 @@ protected:
|
||||
*/
|
||||
void LookUpAtRate(float Rate);
|
||||
|
||||
struct TouchData
|
||||
{
|
||||
TouchData() { bIsPressed = false;Location=FVector::ZeroVector;}
|
||||
bool bIsPressed;
|
||||
ETouchIndex::Type FingerIndex;
|
||||
FVector Location;
|
||||
bool bMoved;
|
||||
};
|
||||
void BeginTouch(const ETouchIndex::Type FingerIndex, const FVector Location);
|
||||
void EndTouch(const ETouchIndex::Type FingerIndex, const FVector Location);
|
||||
void TouchUpdate(const ETouchIndex::Type FingerIndex, const FVector Location);
|
||||
TouchData TouchItem;
|
||||
|
||||
protected:
|
||||
// APawn interface
|
||||
virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override;
|
||||
// End of APawn interface
|
||||
|
||||
/*
|
||||
* Configures input for touchscreen devices if there is a valid touch interface for doing so
|
||||
*
|
||||
* @param InputComponent The input component pointer to bind controls to
|
||||
* @returns true if touch controls were enabled.
|
||||
*/
|
||||
bool EnableTouchscreenMovement(UInputComponent* InputComponent);
|
||||
|
||||
public:
|
||||
/** Returns Mesh1P subobject **/
|
||||
FORCEINLINE class USkeletalMeshComponent* GetMesh1P() const { return Mesh1P; }
|
||||
|
@ -9,27 +9,10 @@
|
||||
|
||||
ASevenStarsHUD::ASevenStarsHUD()
|
||||
{
|
||||
// Set the crosshair texture
|
||||
static ConstructorHelpers::FObjectFinder<UTexture2D> CrosshairTexObj(TEXT("/Game/FirstPerson/Textures/FirstPersonCrosshair"));
|
||||
CrosshairTex = CrosshairTexObj.Object;
|
||||
}
|
||||
|
||||
|
||||
void ASevenStarsHUD::DrawHUD()
|
||||
{
|
||||
Super::DrawHUD();
|
||||
|
||||
// Draw very simple crosshair
|
||||
|
||||
// find center of the Canvas
|
||||
const FVector2D Center(Canvas->ClipX * 0.5f, Canvas->ClipY * 0.5f);
|
||||
|
||||
// offset by half the texture's dimensions so that the center of the texture aligns with the center of the Canvas
|
||||
const FVector2D CrosshairDrawPosition( (Center.X),
|
||||
(Center.Y + 20.0f));
|
||||
|
||||
// draw the crosshair
|
||||
FCanvasTileItem TileItem( CrosshairDrawPosition, CrosshairTex->Resource, FLinearColor::White);
|
||||
TileItem.BlendMode = SE_BLEND_Translucent;
|
||||
Canvas->DrawItem( TileItem );
|
||||
}
|
||||
|
@ -14,12 +14,6 @@ class ASevenStarsHUD : public AHUD
|
||||
public:
|
||||
ASevenStarsHUD();
|
||||
|
||||
/** Primary draw call for the HUD */
|
||||
virtual void DrawHUD() override;
|
||||
|
||||
private:
|
||||
/** Crosshair asset pointer */
|
||||
class UTexture2D* CrosshairTex;
|
||||
|
||||
};
|
||||
|
||||
|
@ -1,43 +0,0 @@
|
||||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "SevenStarsProjectile.h"
|
||||
#include "GameFramework/ProjectileMovementComponent.h"
|
||||
#include "Components/SphereComponent.h"
|
||||
|
||||
ASevenStarsProjectile::ASevenStarsProjectile()
|
||||
{
|
||||
// Use a sphere as a simple collision representation
|
||||
CollisionComp = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComp"));
|
||||
CollisionComp->InitSphereRadius(5.0f);
|
||||
CollisionComp->BodyInstance.SetCollisionProfileName("Projectile");
|
||||
CollisionComp->OnComponentHit.AddDynamic(this, &ASevenStarsProjectile::OnHit); // set up a notification for when this component hits something blocking
|
||||
|
||||
// Players can't walk on it
|
||||
CollisionComp->SetWalkableSlopeOverride(FWalkableSlopeOverride(WalkableSlope_Unwalkable, 0.f));
|
||||
CollisionComp->CanCharacterStepUpOn = ECB_No;
|
||||
|
||||
// Set as root component
|
||||
RootComponent = CollisionComp;
|
||||
|
||||
// Use a ProjectileMovementComponent to govern this projectile's movement
|
||||
ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileComp"));
|
||||
ProjectileMovement->UpdatedComponent = CollisionComp;
|
||||
ProjectileMovement->InitialSpeed = 3000.f;
|
||||
ProjectileMovement->MaxSpeed = 3000.f;
|
||||
ProjectileMovement->bRotationFollowsVelocity = true;
|
||||
ProjectileMovement->bShouldBounce = true;
|
||||
|
||||
// Die after 3 seconds by default
|
||||
InitialLifeSpan = 3.0f;
|
||||
}
|
||||
|
||||
void ASevenStarsProjectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
|
||||
{
|
||||
// Only add impulse and destroy projectile if we hit a physics
|
||||
if ((OtherActor != NULL) && (OtherActor != this) && (OtherComp != NULL) && OtherComp->IsSimulatingPhysics())
|
||||
{
|
||||
OtherComp->AddImpulseAtLocation(GetVelocity() * 100.0f, GetActorLocation());
|
||||
|
||||
Destroy();
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "SevenStarsProjectile.generated.h"
|
||||
|
||||
UCLASS(config=Game)
|
||||
class ASevenStarsProjectile : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
/** Sphere collision component */
|
||||
UPROPERTY(VisibleDefaultsOnly, Category=Projectile)
|
||||
class USphereComponent* CollisionComp;
|
||||
|
||||
/** Projectile movement component */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement, meta = (AllowPrivateAccess = "true"))
|
||||
class UProjectileMovementComponent* ProjectileMovement;
|
||||
|
||||
public:
|
||||
ASevenStarsProjectile();
|
||||
|
||||
/** called when projectile hits something */
|
||||
UFUNCTION()
|
||||
void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
|
||||
|
||||
/** Returns CollisionComp subobject **/
|
||||
FORCEINLINE class USphereComponent* GetCollisionComp() const { return CollisionComp; }
|
||||
/** Returns ProjectileMovement subobject **/
|
||||
FORCEINLINE class UProjectileMovementComponent* GetProjectileMovement() const { return ProjectileMovement; }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user