diff --git a/Content/ProofOfConcept/DDICharacter_BP.uasset b/Content/ProofOfConcept/DDICharacter_BP.uasset index 6e2c703..50ca0af 100644 Binary files a/Content/ProofOfConcept/DDICharacter_BP.uasset and b/Content/ProofOfConcept/DDICharacter_BP.uasset differ diff --git a/Content/ProofOfConcept/ProjectileBase_BP.uasset b/Content/ProofOfConcept/ProjectileBase_BP.uasset index f4f07ea..2f27ed3 100644 Binary files a/Content/ProofOfConcept/ProjectileBase_BP.uasset and b/Content/ProofOfConcept/ProjectileBase_BP.uasset differ diff --git a/Source/OpenConflict/PlayerCharacter/Components/DDIHealth.h b/Source/OpenConflict/PlayerCharacter/Components/DDIHealth.h index 00a35f1..8ec3581 100644 --- a/Source/OpenConflict/PlayerCharacter/Components/DDIHealth.h +++ b/Source/OpenConflict/PlayerCharacter/Components/DDIHealth.h @@ -36,13 +36,13 @@ protected: ClassNames ClassName; /*Functions*/ - UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable, Category = "Health") - void TakeDamage(int DamageValue); public: /*Properties*/ /*Functions*/ + UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable, Category = "Health") + void TakeDamage(int DamageValue); /*C++ only declarations*/ private: diff --git a/Source/OpenConflict/PlayerCharacter/Components/HealthSegmentStruct.h b/Source/OpenConflict/PlayerCharacter/Components/HealthSegmentStruct.h index 72fb3f1..5761a30 100644 --- a/Source/OpenConflict/PlayerCharacter/Components/HealthSegmentStruct.h +++ b/Source/OpenConflict/PlayerCharacter/Components/HealthSegmentStruct.h @@ -9,7 +9,7 @@ struct FHealthSegment : public FTableRowBase GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Health Segments") - ClassNames Class; + ClassNames Class = ClassNames::Basic; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Health Segments") TArray SegmentList; diff --git a/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp b/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp index dfc4a9b..28baea2 100644 --- a/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp +++ b/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp @@ -50,11 +50,10 @@ void ADDICharacter::Tick(float DeltaTime) void ADDICharacter::OnHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) { - if (OtherActor->Owner == this) - return; - - AProjectileBase* Projectile = Cast(OtherActor); - if (HealthComponent && Projectile) - HealthComponent->TakeDamage(10); +} + +void ADDICharacter::TakeDamage(int Damage) +{ + HealthComponent->TakeDamage(Damage); } diff --git a/Source/OpenConflict/PlayerCharacter/DDICharacter.h b/Source/OpenConflict/PlayerCharacter/DDICharacter.h index 27a309a..62518e9 100644 --- a/Source/OpenConflict/PlayerCharacter/DDICharacter.h +++ b/Source/OpenConflict/PlayerCharacter/DDICharacter.h @@ -35,6 +35,8 @@ public: UFUNCTION() void OnHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); + UFUNCTION() + void TakeDamage(int Damage); /*C++ only declarations*/ private: diff --git a/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp b/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp index 7b69a95..c4761ac 100644 --- a/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp +++ b/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp @@ -3,14 +3,22 @@ #include "ProjectileBase.h" +#include "OpenConflict/PlayerCharacter/DDICharacter.h" + // Sets default values AProjectileBase::AProjectileBase() { // 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; + bReplicates = true; + bNetLoadOnClient = true; + + InitialLifeSpan = 3.f; + collision = CreateDefaultSubobject("Collision"); RootComponent = collision; + collision->BodyInstance.SetCollisionProfileName(TEXT("BlockAllDynamic")); projectileMesh = CreateDefaultSubobject("ProjectileMesh"); projectileMesh->SetupAttachment(collision); @@ -22,6 +30,9 @@ AProjectileBase::AProjectileBase() void AProjectileBase::BeginPlay() { Super::BeginPlay(); + + if (collision) + collision->OnComponentHit.AddDynamic(this, &AProjectileBase::OnHit); } @@ -32,3 +43,12 @@ void AProjectileBase::Tick(float DeltaTime) } + +void AProjectileBase::OnHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) +{ + if (ADDICharacter* character = Cast(OtherActor)) + { + Destroy(); + character->TakeDamage(10); + } +} \ No newline at end of file diff --git a/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.h b/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.h index 427905e..7341cff 100644 --- a/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.h +++ b/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.h @@ -33,7 +33,10 @@ public: UProjectileMovementComponent* projectileMotion; /*Functions*/ + UFUNCTION() + void OnHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); + /*C++ only declarations*/ private: /*Properties*/ diff --git a/Source/OpenConflict/Weapons/WeaponBase.cpp b/Source/OpenConflict/Weapons/WeaponBase.cpp new file mode 100644 index 0000000..6449d14 --- /dev/null +++ b/Source/OpenConflict/Weapons/WeaponBase.cpp @@ -0,0 +1,27 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "WeaponBase.h" + +// Sets default values +AWeaponBase::AWeaponBase() +{ + // 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 AWeaponBase::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void AWeaponBase::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + diff --git a/Source/OpenConflict/Weapons/WeaponBase.h b/Source/OpenConflict/Weapons/WeaponBase.h new file mode 100644 index 0000000..962ab25 --- /dev/null +++ b/Source/OpenConflict/Weapons/WeaponBase.h @@ -0,0 +1,26 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "WeaponBase.generated.h" + +UCLASS() +class OPENCONFLICT_API AWeaponBase : public AActor +{ + GENERATED_BODY() + +public: + // Sets default values for this actor's properties + AWeaponBase(); + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + +public: + // Called every frame + virtual void Tick(float DeltaTime) override; + +};