From abccaaa14c8a5cbe5d2afec57ea749ec1b04fbfb Mon Sep 17 00:00:00 2001 From: Cody Larkin Date: Wed, 17 Jun 2026 22:49:44 -0400 Subject: [PATCH] Cody WIP before cleanup --- .../Mannequins/Meshes/SK_Mannequin.uasset | Bin 0 -> 192715 bytes .../ProofOfConcept/ProjectileBase_BP.uasset | Bin 0 -> 35267 bytes .../PlayerCharacter/DDICharacter.cpp | 12 +- .../PlayerCharacter/DDICharacter.cpp~ | 124 ++++++++++++++++++ .../Weapons/Projectiles/ProjectileBase.cpp | 3 +- Source/OpenConflict/Weapons/WeaponBase.cpp | 80 +++++++++++ Source/OpenConflict/Weapons/WeaponBase.h | 10 ++ 7 files changed, 224 insertions(+), 5 deletions(-) create mode 100644 Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset create mode 100644 Content/ProofOfConcept/ProjectileBase_BP.uasset create mode 100644 Source/OpenConflict/PlayerCharacter/DDICharacter.cpp~ diff --git a/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset new file mode 100644 index 0000000000000000000000000000000000000000..d19866ba1fa4fef1b1041f829257278e3944558e GIT binary patch literal 192715 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%0Dyrad*Jq& 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 T8Ts|rfTfet0pM>Mi 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 literal 0 HcmV?d00001 diff --git a/Content/ProofOfConcept/ProjectileBase_BP.uasset b/Content/ProofOfConcept/ProjectileBase_BP.uasset new file mode 100644 index 0000000000000000000000000000000000000000..0aa2f0331e1ae7c7c6ab1649a2b18dc6bb76fe8b GIT binary patch literal 35267 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 uZq zg1s+YQJn$bY5R5IA6>e7)g=tt(MtMmyW6Sh5e;H-<#Z97i1Z9TM#iplJ>&->rw- z*>G&T4xJ)ps^TzoPOLZ(2wPNn;7GJyLghPhhy=HJ;NMKxWtiQVK1-t?B3;i}+y4*= zz|cMpUI$=%^yuO{8NcEN)fkJuVEK;sk8qqvTYac}heSJ~*bW&y{()-XWg%a?6at31<52_Tal^w>*ycO4M;U@H+j0NH_5h$y2d*BFl;b;)wV(i9u<&*}ITT%W04_Z+@XaE2J literal 0 HcmV?d00001 diff --git a/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp b/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp index 9238158..d3bda86 100644 --- a/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp +++ b/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp @@ -65,22 +65,26 @@ bool ADDICharacter::Server_SpawnProjectile_Validate() void ADDICharacter::Server_SpawnProjectile_Implementation() { FVector Location = GetActorLocation(); - FRotator Rotation = GetActorRotation(); + if (GetMesh()->DoesSocketExist("headSocket")) + Location = GetMesh()->GetSocketLocation("headSocket"); //Socket_Projectile + FRotator Rotation = GetViewRotation(); FVector Dir = GetActorForwardVector(); - // GetActorEyesViewPoint(Location, Rotation); + GetActorEyesViewPoint(Location, Rotation); - Location += Dir * 55.f; + Location += Dir * 155.f; if (!ProjectileClass) { - GEngine->AddOnScreenDebugMessage(1, 10.f, FColor::Emerald, "No Projectile Set"); + GEngine->AddOnScreenDebugMessage(2, 10.f, FColor::Emerald, "No Projectile Set"); return; } FActorSpawnParameters SpawnInfo; SpawnInfo.Owner = this; SpawnInfo.Instigator = GetInstigator(); + + GEngine->AddOnScreenDebugMessage(-1,10.f,FColor::Red,FString::Printf(TEXT("Server Spawning Projectile Location %f,%f,%f"), Location.X, Location.Y, Location.Z)); GetWorld()->SpawnActor(ProjectileClass, Location, Rotation, SpawnInfo); } diff --git a/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp~ b/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp~ new file mode 100644 index 0000000..d3bda86 --- /dev/null +++ b/Source/OpenConflict/PlayerCharacter/DDICharacter.cpp~ @@ -0,0 +1,124 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "DDICharacter.h" + +#include "Components/CapsuleComponent.h" +#include "GameFramework/SpringArmComponent.h" +#include "OpenConflict/Weapons/Projectiles/ProjectileBase.h" + +// Sets default values +ADDICharacter::ADDICharacter() +{ + // 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; + bReplicates = true; + // bReplicateMovement = true; + + CameraComponent = CreateDefaultSubobject(TEXT("CameraComponent")); + CameraComponent->SetupAttachment(GetMesh(), "headSocket"); + CameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f)); + CameraComponent->bUsePawnControlRotation = true; + + HealthComponent = CreateDefaultSubobject(TEXT("HealthComponent")); + + GetCapsuleComponent()->SetCollisionProfileName(TEXT("BlockAllDynamic")); + GetCapsuleComponent()->SetGenerateOverlapEvents(true); + GetCapsuleComponent()->SetNotifyRigidBodyCollision(true); + + +} + +// Called when the game starts or when spawned +void ADDICharacter::BeginPlay() +{ + Super::BeginPlay(); + + if (GetCapsuleComponent()) + { + GetCapsuleComponent()->OnComponentHit.AddDynamic(this, &ADDICharacter::OnHit); + } + +} + +// Called every frame +void ADDICharacter::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + +void ADDICharacter::OnHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) +{ + Server_CharacterHit(HitComponent, OtherActor, OtherComp, NormalImpulse, Hit); +} + +void ADDICharacter::TakeDamage(int Damage) +{ + HealthComponent->TakeDamage(Damage); +} + +bool ADDICharacter::Server_SpawnProjectile_Validate() +{ + return true; +} +void ADDICharacter::Server_SpawnProjectile_Implementation() +{ + FVector Location = GetActorLocation(); + if (GetMesh()->DoesSocketExist("headSocket")) + Location = GetMesh()->GetSocketLocation("headSocket"); //Socket_Projectile + FRotator Rotation = GetViewRotation(); + FVector Dir = GetActorForwardVector(); + + GetActorEyesViewPoint(Location, Rotation); + + Location += Dir * 155.f; + + if (!ProjectileClass) + { + GEngine->AddOnScreenDebugMessage(2, 10.f, FColor::Emerald, "No Projectile Set"); + return; + } + + FActorSpawnParameters SpawnInfo; + SpawnInfo.Owner = this; + SpawnInfo.Instigator = GetInstigator(); + + GEngine->AddOnScreenDebugMessage(-1,10.f,FColor::Red,FString::Printf(TEXT("Server Spawning Projectile Location %f,%f,%f"), Location.X, Location.Y, Location.Z)); + GetWorld()->SpawnActor(ProjectileClass, Location, Rotation, SpawnInfo); +} + +void ADDICharacter::Client_CharacterHit_Implementation() +{ + TakeDamage(10); + OnDamageTaken(); + +} +bool ADDICharacter::Client_CharacterHit_Validate() +{ + return true; +} +void ADDICharacter::Server_CharacterHit_Implementation(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) +{ + if (AProjectileBase* Projectile = Cast(OtherActor)) + { + // if (Cast(Projectile->Owner) == this) + GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Emerald, "Damage dealt"); + Client_CharacterHit(); + } +} +bool ADDICharacter::Server_CharacterHit_Validate(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) +{ + return true; +} + +void ADDICharacter::OnRep_Health() +{ + GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "Health Replicated"); +} + +void ADDICharacter::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const +{ + Super::GetLifetimeReplicatedProps(OutLifetimeProps); + DOREPLIFETIME(ADDICharacter, HealthComponent); +} \ No newline at end of file diff --git a/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp b/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp index e794add..88a1b71 100644 --- a/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp +++ b/Source/OpenConflict/Weapons/Projectiles/ProjectileBase.cpp @@ -33,13 +33,14 @@ void AProjectileBase::BeginPlay() if (collision) collision->OnComponentHit.AddDynamic(this, &AProjectileBase::OnHit); - } // Called every frame void AProjectileBase::Tick(float DeltaTime) { Super::Tick(DeltaTime); + FVector Location = GetActorLocation(); + GEngine->AddOnScreenDebugMessage(3,10.f,FColor::Red,FString::Printf(TEXT("Projectile Location %f,%f,%f"), Location.X, Location.Y, Location.Z)); } diff --git a/Source/OpenConflict/Weapons/WeaponBase.cpp b/Source/OpenConflict/Weapons/WeaponBase.cpp index 3df1ecd..bac4bc2 100644 --- a/Source/OpenConflict/Weapons/WeaponBase.cpp +++ b/Source/OpenConflict/Weapons/WeaponBase.cpp @@ -13,6 +13,7 @@ AWeaponBase::AWeaponBase() } + // Called when the game starts or when spawned void AWeaponBase::BeginPlay() { @@ -46,3 +47,82 @@ void AWeaponBase::MagRepacking() // } } } + +void AWeaponBase::Server_SpawnProjectile_Implementation() +{ + FVector Location; + if (WeaponMesh->DoesSocketExist("Socket_Projectile")) + Location = WeaponMesh->GetSocketLocation("Socket_Projectile"); + FRotator Rotation = GetActorRotation(); + FVector Dir = GetOwner()->GetActorForwardVector(); + + // GetActorEyesViewPoint(Location, Rotation); + if (Location.Equals(FVector::ZeroVector)) + Location += Dir * 55.f; + else + { + GEngine->AddOnScreenDebugMessage(2,10.f,FColor::Green,TEXT("Server Failed to get Socket Location")); + return; + } + + if (!ProjectileClass) + { + GEngine->AddOnScreenDebugMessage(2, 10.f, FColor::Emerald, "Server No Projectile Set"); + return; + } + + FActorSpawnParameters SpawnInfo; + SpawnInfo.Owner = GetOwner(); + SpawnInfo.Instigator = GetInstigator(); + SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + + GEngine->AddOnScreenDebugMessage(2,10.f,FColor::Red,FString::Printf(TEXT("Server Spawning Projectile Location %f,%f,%f"), Location.X, Location.Y, Location.Z)); + AActor* projectile = GetWorld()->SpawnActor(ProjectileClass, Location, Rotation, SpawnInfo); + + if (!projectile) + GEngine->AddOnScreenDebugMessage(2,10.f,FColor::Red,TEXT("Failed to Spawn")); + + Client_SpawnProjectile(); +} + +bool AWeaponBase::Server_SpawnProjectile_Validate() +{ + return true; +} + +void AWeaponBase::Client_SpawnProjectile_Implementation() +{ + FVector Location; + if (WeaponMesh->DoesSocketExist("Socket_Projectile")) + Location = WeaponMesh->GetSocketLocation("Socket_Projectile"); + FRotator Rotation = GetActorRotation(); + FVector Dir = GetActorForwardVector(); + + // GetActorEyesViewPoint(Location, Rotation); + if (Location.Equals(FVector::ZeroVector)) + Location += Dir * 55.f; + else + { + GEngine->AddOnScreenDebugMessage(1,10.f,FColor::Green,TEXT("Client Failed to get Socket Location")); + return; + } + + if (!ProjectileClass) + { + GEngine->AddOnScreenDebugMessage(1, 10.f, FColor::Emerald, "Client No Projectile Set"); + return; + } + + FActorSpawnParameters SpawnInfo; + SpawnInfo.Owner = this; + SpawnInfo.Instigator = GetInstigator(); + SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + + GEngine->AddOnScreenDebugMessage(1,10.f,FColor::Red,FString::Printf(TEXT("Client Spawning Projectile Location %f,%f,%f"), Location.X, Location.Y, Location.Z)); + GetWorld()->SpawnActor(ProjectileClass, Location, Rotation, SpawnInfo); +} + +bool AWeaponBase::Client_SpawnProjectile_Validate() +{ + return true; +} \ No newline at end of file diff --git a/Source/OpenConflict/Weapons/WeaponBase.h b/Source/OpenConflict/Weapons/WeaponBase.h index f65d3f3..964b223 100644 --- a/Source/OpenConflict/Weapons/WeaponBase.h +++ b/Source/OpenConflict/Weapons/WeaponBase.h @@ -37,6 +37,9 @@ private: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Weapon Ammo", meta=(AllowPrivateAccess=true)) int RESERVE_AMMO_POOL_DEFAULT = 120; + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Weapon Ammo", meta=(AllowPrivateAccess=true)) + TSubclassOf ProjectileClass; + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta=(AllowPrivateAccess=true)) USkeletalMeshComponent* WeaponMesh; @@ -55,6 +58,13 @@ public: /*Functions*/ UFUNCTION() void MagRepacking(); + + + UFUNCTION(Server, Reliable, WithValidation, BlueprintCallable) + void Server_SpawnProjectile(); + + UFUNCTION(Client, Reliable, WithValidation, BlueprintCallable) + void Client_SpawnProjectile(); /*C++ only declarations*/ private: