void AShooterWeapon::AttachMeshToPawn() { if (MyPawn) { // Remove and hide both first and third person meshes DetachMeshFromPawn(); // For locally controller players we attach both weapons and let the bOnlyOwnerSee, bOwnerNoSee flags deal with visibility. FName AttachPoint = MyPawn->GetWeaponAttachPoint(); if( MyPawn->IsLocallyControlled() == true ) { USkeletalMeshComponent* PawnMesh1p = MyPawn->GetSpecifcPawnMesh(true); USkeletalMeshComponent* PawnMesh3p = MyPawn->GetSpecifcPawnMesh(false); Mesh1P->SetHiddenInGame( false ); Mesh3P->SetHiddenInGame( false ); Mesh1P->AttachTo(PawnMesh1p, AttachPoint); Mesh3P->AttachTo(PawnMesh3p, AttachPoint); } else { USkeletalMeshComponent* UseWeaponMesh = GetWeaponMesh(); USkeletalMeshComponent* UsePawnMesh = MyPawn->GetPawnMesh(); UseWeaponMesh->AttachTo(UsePawnMesh, AttachPoint); UseWeaponMesh->SetHiddenInGame( false ); } } }
void ASFlashlight::BeginPlay() { Super::BeginPlay(); /* Create an instance unique to this actor instance to manipulate emissive intensity */ USkeletalMeshComponent* MeshComp = GetWeaponMesh(); if (MeshComp) { MatDynamic = MeshComp->CreateAndSetMaterialInstanceDynamic(0); } }
ASFlashlight::ASFlashlight(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { StorageSlot = EInventorySlot::Secondary; LightAttachPoint = TEXT("LightSocket"); GetWeaponMesh()->AddLocalRotation(FRotator(0, 0, -90)); LightConeComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("LightConeComp")); LightConeComp->SetCollisionResponseToAllChannels(ECR_Ignore); LightConeComp->AttachTo(GetWeaponMesh(), LightAttachPoint, EAttachLocation::SnapToTarget); SpotLightComp = CreateDefaultSubobject<USpotLightComponent>(TEXT("SpotLightComp")); SpotLightComp->AttachTo(GetWeaponMesh(), LightAttachPoint, EAttachLocation::SnapToTarget); SpotLightComp->SetCastShadows(false); SpotLightComp->AddLocalRotation(FRotator(0, -90, 0)); bIsActive = true; LastEmissiveStrength = -1.0f; EmissiveParamName = TEXT("Brightness"); MaxEmissiveIntensity = 20.0f; }
void AShooterWeapon::SimulateWeaponFire() { if (Role == ROLE_Authority && CurrentState != EWeaponState::Firing) { return; } if (MuzzleFX) { USkeletalMeshComponent* UseWeaponMesh = GetWeaponMesh(); if (!bLoopedMuzzleFX || MuzzlePSC == NULL) { // Split screen requires we create 2 effects. One that we see and one that the other player sees. if( (MyPawn != NULL ) && ( MyPawn->IsLocallyControlled() == true ) ) { AController* PlayerCon = MyPawn->GetController(); if( PlayerCon != NULL ) { Mesh1P->GetSocketLocation(MuzzleAttachPoint); MuzzlePSC = UGameplayStatics::SpawnEmitterAttached(MuzzleFX, Mesh1P, MuzzleAttachPoint); MuzzlePSC->bOwnerNoSee = false; MuzzlePSC->bOnlyOwnerSee = true; Mesh3P->GetSocketLocation(MuzzleAttachPoint); MuzzlePSCSecondary = UGameplayStatics::SpawnEmitterAttached(MuzzleFX, Mesh3P, MuzzleAttachPoint); MuzzlePSCSecondary->bOwnerNoSee = true; MuzzlePSCSecondary->bOnlyOwnerSee = false; } } else { MuzzlePSC = UGameplayStatics::SpawnEmitterAttached(MuzzleFX, UseWeaponMesh, MuzzleAttachPoint); } } } if (!bLoopedFireAnim || !bPlayingFireAnim) { PlayWeaponAnimation(FireAnim); bPlayingFireAnim = true; } if (bLoopedFireSound) { if (FireAC == NULL) { FireAC = PlayWeaponSound(FireLoopSound); } } else { PlayWeaponSound(FireSound); } AShooterPlayerController* PC = (MyPawn != NULL) ? Cast<AShooterPlayerController>(MyPawn->Controller) : NULL; if (PC != NULL && PC->IsLocalController()) { if (FireCameraShake != NULL) { PC->ClientPlayCameraShake(FireCameraShake, 1); } if (FireForceFeedback != NULL) { PC->ClientPlayForceFeedback(FireForceFeedback, false, "Weapon"); } } }
FVector AShooterWeapon::GetMuzzleDirection() const { USkeletalMeshComponent* UseMesh = GetWeaponMesh(); return UseMesh->GetSocketRotation(MuzzleAttachPoint).Vector(); }
FVector AFournoidWeapon::GetMuzzleLocation() const { auto UseMesh = GetWeaponMesh(); return UseMesh->GetSocketLocation(MuzzleSocketName); }