diff --git a/Source/M4_CPP/private/M4_PlayerPawn.cpp b/Source/M4_CPP/private/M4_PlayerPawn.cpp index 4cb925d..a79344f 100644 --- a/Source/M4_CPP/private/M4_PlayerPawn.cpp +++ b/Source/M4_CPP/private/M4_PlayerPawn.cpp @@ -85,17 +85,18 @@ void AM4_PlayerPawn::Shoot(const FInputActionInstance& Inst) if (Proj) { UWorld* World = GetWorld(); - //GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, TEXT("Using the Wand!")); if (World) { FActorSpawnParameters SpawnParams; SpawnParams.Owner = this; - const FVector InitialLocation = FVector(GetActorLocation().X, GetActorLocation().Y, GetActorLocation().Z); + const FVector InitialLocation = FVector(0, GetActorLocation().Y, GetActorLocation().Z); const FRotator InitialRotation = FRotator(0.f); - AM4_Projectile* Projectile = World->SpawnActor(Proj, InitialLocation, InitialRotation, SpawnParams); - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("Spell Casted!")); + if (Projectile) + { + Projectile->FireInDir(InitialLocation); + } } } }; diff --git a/Source/M4_CPP/private/M4_Projectile.cpp b/Source/M4_CPP/private/M4_Projectile.cpp index 7a6e987..a312406 100644 --- a/Source/M4_CPP/private/M4_Projectile.cpp +++ b/Source/M4_CPP/private/M4_Projectile.cpp @@ -10,23 +10,14 @@ AM4_Projectile::AM4_Projectile() if(!RootComponent) { RootComponent = CreateDefaultSubobject(TEXT("ProjectileSceneComponent")); - } - - if(!CollisionComp) - { - CollisionComp = CreateDefaultSubobject(TEXT("MeshComponent")); - RootComponent = CollisionComp; - } - - if (!ProjectileMeshComponent) - { ProjectileMeshComponent = CreateDefaultSubobject(TEXT("ProjectileMeshComponent")); + ProjectileMeshComponent->SetupAttachment(RootComponent); static ConstructorHelpers::FObjectFinder Mesh(TEXT("/Game/CTP/04_Mesh/SM_Projectile.SM_Projectile")); - if(Mesh.Succeeded()) - { - ProjectileMeshComponent->SetStaticMesh(Mesh.Object); - } + if(Mesh.Succeeded()) + { + ProjectileMeshComponent->SetStaticMesh(Mesh.Object); + } static ConstructorHelpers::FObjectFinder Material(TEXT("/Game/CTP/05_Material/M_Player.M_Player")); if (Material.Succeeded()) @@ -35,18 +26,29 @@ AM4_Projectile::AM4_Projectile() } ProjectileMeshComponent->SetMaterial(0, ProjectileMat); - ProjectileMeshComponent->SetRelativeScale3D(FVector(.2f, .2f, .25f)); + ProjectileMeshComponent->SetRelativeScale3D(FVector(.3f, .3f, .35f)); ProjectileMeshComponent->SetMobility(EComponentMobility::Movable); - ProjectileMeshComponent->SetupAttachment(RootComponent); + ProjectileMeshComponent->SetRelativeLocation(InitialLoc); - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, TEXT("Using the Wand!")); + ProjectileMovementComponent = CreateDefaultSubobject(TEXT("ProjectileMovementComponent")); + ProjectileMovementComponent->SetUpdatedComponent(CollisionComp); + ProjectileMovementComponent->InitialSpeed = 380.f; + ProjectileMovementComponent->MaxSpeed = 380.f; + ProjectileMovementComponent->bRotationFollowsVelocity = false; + ProjectileMovementComponent->bShouldBounce = false; + ProjectileMovementComponent->ProjectileGravityScale = 0.0f; + InitialLifeSpan = 10.f; + } + + if(!CollisionComp) + { + CollisionComp = CreateDefaultSubobject(TEXT("MeshComponent")); + } +} ///FAIRE SUPER GAFFE AUX INDENTATIONS ET LES FOR LOOPS sont à bien faire. ///Ce qui est critique dans notre code doit être vraiment bien mis en évidence sans être obscurci par la boucle. ///Gestion des pointeurs à revoir, lisibilité des fonctions critiques - } -} - void AM4_Projectile::BeginPlay() { @@ -59,9 +61,16 @@ void AM4_Projectile::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPr } +void AM4_Projectile::FireInDir(const FVector& ShootDir) +{ + SetActorLocation(InitialLoc); + ProjectileMovementComponent->Velocity.Z = -1 * ((ShootDir.Z + 390.f) * ProjectileMovementComponent->InitialSpeed); + // ProjectileMovementComponent->Velocity.Y = InitialLoc.Y; + // ProjectileMovementComponent->Velocity.X = InitialLoc.X; +} + // Called every frame -void AM4_Projectile::Tick( float DeltaTime ) +void AM4_Projectile::Tick(float DeltaTime) { Super::Tick( DeltaTime); - NewLoc = InitialLoc + FVector(InitialLoc.X * Speed * DeltaTime, InitialLoc.Y * Speed * DeltaTime, InitialLoc.Z * Speed * DeltaTime); } \ No newline at end of file diff --git a/Source/M4_CPP/public/M4_Projectile.h b/Source/M4_CPP/public/M4_Projectile.h index 7d34b32..ee8b780 100644 --- a/Source/M4_CPP/public/M4_Projectile.h +++ b/Source/M4_CPP/public/M4_Projectile.h @@ -1,4 +1,6 @@ -#pragma once +#include "GameFramework/ProjectileMovementComponent.h" + +#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" @@ -24,6 +26,9 @@ public: UPROPERTY(VisibleDefaultsOnly, Category = Projectile) UMeshComponent* CollisionComp; + + UPROPERTY(VisibleAnywhere, Category = Movement) + UProjectileMovementComponent* ProjectileMovementComponent; UPROPERTY(VisibleDefaultsOnly, Category = Projectile) UStaticMeshComponent* ProjectileMeshComponent; @@ -32,4 +37,5 @@ public: UMaterialInstanceDynamic* ProjectileMat; void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp,FVector Impulse, const FHitResult& Hit); + void FireInDir(const FVector& ShootDir); };