Add ammo drops from dead enemies

This commit is contained in:
Sara Montecino 2022-11-12 17:37:22 -08:00
parent 88db9deea4
commit 27edeb0f0c
21 changed files with 272 additions and 66 deletions

View File

@ -0,0 +1 @@

View File

@ -49,6 +49,7 @@ bUseSplitscreen=False
+Profiles=(Name="Ragdoll",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="PhysicsBody",CustomResponses=((Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore)),HelpMessage="Simulating Skeletal Mesh Component. All other channels will be set to default.")
+Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.")
+Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
+Profiles=(Name="Pickup",CollisionEnabled=QueryAndPhysics,bCanModify=True,ObjectTypeName="WorldStatic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap),(Channel="Character",Response=ECR_Overlap)),HelpMessage="Item to pickup")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False,Name="Character")
-ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall")
-ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn")

BIN
Content/AmmoPickup.uasset Executable file

Binary file not shown.

Binary file not shown.

BIN
Content/EnemyPawn_BP.uasset Executable 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.

View File

@ -7,9 +7,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{94A6C6
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{8E2F6A87-1826-34F4-940C-CC23A48F9FE4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PresidentsBrigade", "Intermediate\ProjectFiles\PresidentsBrigade.vcxproj", "{96B177F0-8EDF-4729-A78F-BAD24CB85C00}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PresidentsBrigade", "Intermediate\ProjectFiles\PresidentsBrigade.vcxproj", "{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UE4", "Intermediate\ProjectFiles\UE4.vcxproj", "{79A8FA76-49BB-457C-B380-F831AAAAD3DE}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UE4", "Intermediate\ProjectFiles\UE4.vcxproj", "{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Visualizers", "Visualizers", "{1CCEC849-CC72-4C59-8C36-2F7C38706D4C}"
ProjectSection(SolutionItems) = preProject
@ -35,53 +35,53 @@ Global
Shipping|Win64 = Shipping|Win64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame Editor|Android.ActiveCfg = Invalid|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame Editor|Win32.ActiveCfg = Invalid|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame Editor|Win64.ActiveCfg = DebugGame_Editor|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame Editor|Win64.Build.0 = DebugGame_Editor|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame|Android.ActiveCfg = Android_DebugGame|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame|Android.Build.0 = Android_DebugGame|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame|Win32.ActiveCfg = DebugGame|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame|Win32.Build.0 = DebugGame|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame|Win64.ActiveCfg = DebugGame|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.DebugGame|Win64.Build.0 = DebugGame|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development Editor|Android.ActiveCfg = Invalid|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development Editor|Win32.ActiveCfg = Invalid|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development Editor|Win64.ActiveCfg = Development_Editor|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development Editor|Win64.Build.0 = Development_Editor|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development|Android.ActiveCfg = Android_Development|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development|Android.Build.0 = Android_Development|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development|Win32.ActiveCfg = Development|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development|Win32.Build.0 = Development|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development|Win64.ActiveCfg = Development|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Development|Win64.Build.0 = Development|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Shipping|Android.ActiveCfg = Android_Shipping|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Shipping|Android.Build.0 = Android_Shipping|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Shipping|Win32.ActiveCfg = Shipping|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Shipping|Win32.Build.0 = Shipping|Win32
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Shipping|Win64.ActiveCfg = Shipping|x64
{96B177F0-8EDF-4729-A78F-BAD24CB85C00}.Shipping|Win64.Build.0 = Shipping|x64
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.DebugGame Editor|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.DebugGame Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.DebugGame Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.DebugGame|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.DebugGame|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.DebugGame|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Development Editor|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Development Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Development Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Development|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Development|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Development|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Shipping|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Shipping|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{79A8FA76-49BB-457C-B380-F831AAAAD3DE}.Shipping|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame Editor|Android.ActiveCfg = Invalid|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame Editor|Win32.ActiveCfg = Invalid|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame Editor|Win64.ActiveCfg = DebugGame_Editor|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame Editor|Win64.Build.0 = DebugGame_Editor|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame|Android.ActiveCfg = Android_DebugGame|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame|Android.Build.0 = Android_DebugGame|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame|Win32.ActiveCfg = DebugGame|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame|Win32.Build.0 = DebugGame|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame|Win64.ActiveCfg = DebugGame|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.DebugGame|Win64.Build.0 = DebugGame|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development Editor|Android.ActiveCfg = Invalid|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development Editor|Win32.ActiveCfg = Invalid|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development Editor|Win64.ActiveCfg = Development_Editor|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development Editor|Win64.Build.0 = Development_Editor|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development|Android.ActiveCfg = Android_Development|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development|Android.Build.0 = Android_Development|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development|Win32.ActiveCfg = Development|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development|Win32.Build.0 = Development|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development|Win64.ActiveCfg = Development|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Development|Win64.Build.0 = Development|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Shipping|Android.ActiveCfg = Android_Shipping|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Shipping|Android.Build.0 = Android_Shipping|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Shipping|Win32.ActiveCfg = Shipping|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Shipping|Win32.Build.0 = Shipping|Win32
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Shipping|Win64.ActiveCfg = Shipping|x64
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444}.Shipping|Win64.Build.0 = Shipping|x64
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.DebugGame Editor|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.DebugGame Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.DebugGame Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.DebugGame|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.DebugGame|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.DebugGame|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Development Editor|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Development Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Development Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Development|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Development|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Development|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Shipping|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Shipping|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D}.Shipping|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{79A8FA76-49BB-457C-B380-F831AAAAD3DE} = {94A6C6F3-99B3-346E-9557-ABF9D4064DBD}
{96B177F0-8EDF-4729-A78F-BAD24CB85C00} = {8E2F6A87-1826-34F4-940C-CC23A48F9FE4}
{1FED94F2-9FEC-4D92-9CAE-368909B2BF8D} = {94A6C6F3-99B3-346E-9557-ABF9D4064DBD}
{F7E08F87-96C6-4EFA-AB4B-FFF8D73E1444} = {8E2F6A87-1826-34F4-940C-CC23A48F9FE4}
EndGlobalSection
EndGlobal

View File

@ -34,6 +34,7 @@ ABasePawn::ABasePawn(const FObjectInitializer &object_initializer):
// Set defaults.
max_health = 100;
max_ammo = 25;
}
// Called when the game starts or when spawned
@ -51,6 +52,7 @@ void ABasePawn::BeginPlay()
* Set base state.
*/
current_health = max_health;
current_ammo = max_ammo;
}
void ABasePawn::handle_hit(
@ -142,10 +144,11 @@ void ABasePawn::stop_shooting()
}
void ABasePawn::shoot()
{
if (current_ammo > 0)
{
FVector player_location = player_mesh->GetComponentLocation();
const float y = yaw.calculate_yaw();
LogInfo(FString::Printf(TEXT("Raw yaw: %f"), y));
const FRotator rotator(0, y, 0);
FVector forward = FRotationMatrix(rotator).GetUnitAxis(EAxis::X) * 100;
@ -162,6 +165,8 @@ void ABasePawn::shoot()
);
shoot_time_elapsed = 0;
current_ammo -= 1;
}
}
void ABasePawn::handle_death()

View File

@ -68,7 +68,7 @@ protected:
UPROPERTY(EditAnywhere, Category="Player")
UBoxComponent* collision;
UPROPERTY(BlueprintReadWrite, Category="Player")
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Player")
UStaticMeshComponent* player_mesh;
UPROPERTY(EditAnywhere, Category="Movement")
@ -105,9 +105,18 @@ protected:
UPROPERTY(EditAnywhere, Category = "Attack")
int32 max_health;
/**
* Bullet fire rate.
*/
UPROPERTY(EditAnywhere, Category = "Attack")
float fire_rate_s;
/**
* Max ammor.
*/
UPROPERTY(EditAnywhere, Category = "Attack")
int32 max_ammo;
/**
* Shooting enabled;
*/
@ -123,6 +132,11 @@ protected:
*/
int32 current_health;
/**
* Current ammo.
*/
int32 current_ammo;
/**
* Last yaw.
*/

View File

@ -0,0 +1,35 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "EnemyPawn.h"
#include "Pickup.h"
void AEnemyPawn::BeginPlay()
{
Super::BeginPlay();
/*
* Initialize random stream.
*/
random.Initialize(FMath::Rand());
}
void AEnemyPawn::destroy_self()
{
const bool drop_pickup = random.GetFraction() > .5;
if (drop_pickup)
{
FVector location = get_location() + FVector(100, 100, 0);
FActorSpawnParameters spawnParameters;
spawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
APickup* pickup = GetWorld()->SpawnActor<APickup>(
pickup_class,
location,
FRotator(0,0,0),
spawnParameters
);
}
ABasePawn::destroy_self();
}

View File

@ -0,0 +1,33 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "BasePawn.h"
#include "EnemyPawn.generated.h"
class APickup;
/**
*
*/
UCLASS()
class PRESIDENTSBRIGADE_API AEnemyPawn : public ABasePawn
{
GENERATED_BODY()
protected:
virtual void BeginPlay() override;
virtual void destroy_self() override;
/**
* Pickup class to spawn on death.
*/
UPROPERTY(EditAnywhere, Category = "Player")
TSubclassOf<class APickup> pickup_class;
private:
/**
* Random number stream.
*/
FRandomStream random;
};

View File

@ -0,0 +1,35 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Pickup.h"
#include "Components/BoxComponent.h"
// Sets default values
APickup::APickup(const FObjectInitializer &object_initializer)
{
collision = object_initializer.CreateDefaultSubobject<UBoxComponent>(this, FName("Collision"));
RootComponent = collision;
collision->SetCollisionProfileName(FName("Pickup"));
mesh = object_initializer.CreateDefaultSubobject<UStaticMeshComponent>(this, FName("Mesh"));
mesh->SetupAttachment(RootComponent);
mesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
// Set this actor 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 APickup::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void APickup::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}

View File

@ -0,0 +1,31 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Pickup.generated.h"
class UBoxComponent;
UCLASS()
class PRESIDENTSBRIGADE_API APickup : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
APickup(const FObjectInitializer &object_initializer);
// Called every frame
virtual void Tick(float DeltaTime) override;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
UPROPERTY(EditAnywhere, Category="Pickup")
UBoxComponent* collision;
UPROPERTY(EditAnywhere, Category="Pickup")
UStaticMeshComponent* mesh;
};

View File

@ -7,6 +7,7 @@
#include "Math/UnrealMathUtility.h"
#include "Util.h"
#define LogInfo(Msg) Util::log_info(TEXT("APlayerPawn"), Msg)
#define LogError(Msg) Util::log_error(TEXT("APlayerPawn"), Msg)
APlayerPawn::APlayerPawn(const FObjectInitializer &object_initializer):
@ -38,6 +39,39 @@ void APlayerPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponen
PlayerInputComponent->BindAction("Boost", EInputEvent::IE_Released, this, &APlayerPawn::reset_boost);
}
void APlayerPawn::BeginPlay()
{
Super::BeginPlay();
/*
* Setup collision handler.
*/
collision->OnComponentBeginOverlap.AddDynamic(this, &APlayerPawn::handle_overlap);
}
void APlayerPawn::handle_overlap(
UPrimitiveComponent *overlapped_component,
AActor *other_actor,
UPrimitiveComponent *other_component,
int32 other_body_index,
bool from_sweep,
const FHitResult& hit)
{
UClass* other_class = other_actor->GetClass();
if (ammo_class_map.Contains(other_class))
{
// Update current ammo.
current_ammo += ammo_class_map[other_class];
if (current_ammo > max_ammo)
{
current_ammo = max_ammo;
}
other_actor->Destroy();
LogInfo(FString::Printf(TEXT("Total ammo %d"), current_ammo));
}
}
void APlayerPawn::Tick(float delta_time)
{
Super::Tick(delta_time);

View File

@ -24,6 +24,7 @@ public:
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
protected:
virtual void BeginPlay() override;
virtual void destroy_self() override;
UPROPERTY(EditAnywhere, Category="Player")
@ -35,6 +36,12 @@ protected:
UPROPERTY(EditAnywhere, Category = "Player")
float respawn_s;
/**
* Classes that can add ammo to this object.
*/
UPROPERTY(EditAnywhere, Category = "Player")
TMap<UClass*, int> ammo_class_map;
/**
* Multiplier to apply to current speed while boosting. Applies to max speed and accleration.
*/
@ -54,6 +61,16 @@ protected:
float cooldown_threshold_s;
private:
UFUNCTION()
void handle_overlap(
UPrimitiveComponent *overlapped_component,
AActor *other_actor,
UPrimitiveComponent *other_component,
int32 other_body_index,
bool from_sweep,
const FHitResult& hit
);
void boost();
void reset_boost();
void respawn();

View File

@ -13,15 +13,14 @@ xAdd dash
xShoot from any direction
xShoot at continuous rate when holding shoot button
xAdd player damage
Add player ammo
Add HUD UI
xAdd player ammo
Add win condition
- Time based. Keep president alive until he reaches destination.
Add HUD UI
Add menu
Add local multiplayer
x Blueprint
- C++
Add netcode
Add art
- Car models
- Street shader
@ -29,3 +28,4 @@ Add sounds
Add juice
Add muzzle on shoot
Camera zoom out based on screen size? Looks too small when I shrink the window
Add netcode