Ejemplo n.º 1
0
void AConstructorWeapon::AltFire()
{
	Super::AltFire();

	if (GetWorld() && GetWorld()->GetAuthGameMode() && GetWorld()->GetAuthGameMode<ARadeGameMode>())
	{
		TheLevelBlockConstructor = GetWorld()->GetAuthGameMode<ARadeGameMode>()->TheLevelBlockConstructor;
	}

	if (TheLevelBlockConstructor)
	{
		FVector CamLoc;
		FRotator CamRot;
		ThePlayer->Controller->GetPlayerViewPoint(CamLoc, CamRot); // Get the camera position and rotation
		FVector StartTrace = Mesh1P->GetSocketLocation(TEXT("FireSocket"));
		FVector Direction = CamRot.Vector();
		FVector EndTrace = StartTrace + Direction *MainFire.FireDistance;

		if (TheLevelBlockConstructor->DestroyBlock(EndTrace, this))    UseAltFireAmmo();


	}
}
Ejemplo n.º 2
0
// Pre Alt Fire
void AWeapon::PreAltFire()
{
	if (!ThePlayer)return;

	// Bp Pre Alternative Fire
	BP_PreAltFire();

	// If not shooting , stop everything
	if (!bShooting)
	{
		ThePlayer->GetWorldTimerManager().ClearTimer(PreAltFireTimeHandle);
		return;
	}


	// Currently Equiping this weapon
	if (ThePlayer->ArmsAnimInstance && ThePlayer->ArmsAnimInstance->IsAnimState(EAnimState::Equip))
	{
		// Try after a small delay
		FTimerHandle MyHandle;
		ThePlayer->GetWorldTimerManager().SetTimer(MyHandle, this, &AWeapon::PreAltFire, 0.2, false);
		return;
	}

	// Wrong Player Anim State
	if (!CanShoot())return;

	// Seprate Ammo check
	if (bAltFireSeparateAmmo)
	{
		
		if (!AlternativeFire.CanFire())
		{
			// BP no ammo for Alt fire
			BP_NoAmmo();
			return;
		}
	}
	// Unified ammo Check
	else if (AlternativeFire.FireCost > 0 && AlternativeFire.FireCost > MainFire.CurrentAmmo)
	{
			BP_NoAmmo();
			return;
	}


	// The real Alt fire event
	AltFire();

	// Use Alt Fire Ammo
	if (bUseAmmo)UseAltFireAmmo();


	// Set Player Anim State
	ThePlayer->ServerSetAnimID(EAnimState::Fire);

	// Decrease move speed when shooting
	ThePlayer->ResetMoveSpeed();


	///	Stop Fire Anim
	FTimerHandle MyHandle;
	ThePlayer->GetWorldTimerManager().SetTimer(MyHandle, this, &AWeapon::StopFireAnim, 0.1, false);
}