- moved MarkPrecacheSounds completely to the script side and added native support to make this a usable feature.

This commit is contained in:
Christoph Oelckers 2018-11-25 07:43:05 +01:00
parent 8fa16b6c30
commit 7012179904
16 changed files with 76 additions and 65 deletions

View File

@ -685,8 +685,6 @@ public:
void LevelSpawned(); // Called after BeginPlay if this actor was spawned by the world
void HandleSpawnFlags(); // Translates SpawnFlags into in-game flags.
virtual void MarkPrecacheSounds() const; // Marks sounds used by this actor for precaching.
virtual void Activate (AActor *activator);
void CallActivate(AActor *activator);

View File

@ -92,7 +92,6 @@ public:
virtual void AddInventory (AInventory *item) override;
virtual void RemoveInventory (AInventory *item) override;
virtual bool UseInventory (AInventory *item) override;
virtual void MarkPrecacheSounds () const override;
virtual void BeginPlay () override;
virtual bool UpdateWaterLevel (bool splash) override;

View File

@ -161,18 +161,6 @@ bool AInventory::Massacre()
return false;
}
//===========================================================================
//
// AInventory :: MarkPrecacheSounds
//
//===========================================================================
void AInventory::MarkPrecacheSounds() const
{
Super::MarkPrecacheSounds();
PickupSound.MarkUsed();
}
//===========================================================================
//
// AInventory :: Grind

View File

@ -72,7 +72,6 @@ public:
virtual void Finalize(FStateDefinitions &statedef) override;
virtual void Serialize(FSerializer &arc) override;
virtual void MarkPrecacheSounds() const override;
virtual void OnDestroy() override;
virtual void Tick() override;
virtual bool Massacre() override;

View File

@ -184,18 +184,6 @@ void AWeapon::Serialize(FSerializer &arc)
}
//===========================================================================
//
// AWeapon :: MarkPrecacheSounds
//
//===========================================================================
void AWeapon::MarkPrecacheSounds() const
{
Super::MarkPrecacheSounds();
UpSound.MarkUsed();
ReadySound.MarkUsed();
}
/* Weapon slots ***********************************************************/

View File

@ -159,8 +159,6 @@ public:
bool bAltFire; // *** only accessed from ZScript. Set when this weapon's alternate fire is used.
bool bDehAmmo;
virtual void MarkPrecacheSounds() const;
void Finalize(FStateDefinitions &statedef) override;
void Serialize(FSerializer &arc) override;

View File

@ -5310,26 +5310,6 @@ void AActor::CallPostBeginPlay()
E_WorldThingSpawned(this);
}
void AActor::MarkPrecacheSounds() const
{
SeeSound.MarkUsed();
AttackSound.MarkUsed();
PainSound.MarkUsed();
DeathSound.MarkUsed();
ActiveSound.MarkUsed();
UseSound.MarkUsed();
BounceSound.MarkUsed();
WallBounceSound.MarkUsed();
CrushPainSound.MarkUsed();
}
DEFINE_ACTION_FUNCTION(AActor, MarkPrecacheSounds)
{
PARAM_SELF_PROLOGUE(AActor);
self->MarkPrecacheSounds();
return 0;
}
bool AActor::isFast()
{
if (flags5&MF5_ALWAYSFAST) return true;

View File

@ -833,16 +833,16 @@ void APlayerPawn::Serialize(FSerializer &arc)
//===========================================================================
//
// APlayerPawn :: MarkPrecacheSounds
// APlayerPawn :: MarkPlayerSounds
//
//===========================================================================
void APlayerPawn::MarkPrecacheSounds() const
DEFINE_ACTION_FUNCTION(APlayerPawn, MarkPlayerSounds)
{
Super::MarkPrecacheSounds();
S_MarkPlayerSounds(GetSoundClass());
PARAM_SELF_PROLOGUE(APlayerPawn);
S_MarkPlayerSounds(self->GetSoundClass());
return 0;
}
//===========================================================================
//
// APlayerPawn :: BeginPlay

View File

@ -2232,18 +2232,20 @@ void AAmbientSound::Serialize(FSerializer &arc)
//==========================================================================
//
// AmbientSound :: MarkPrecacheSounds
// AmbientSound :: MarkAmbientSounds
//
//==========================================================================
void AAmbientSound::MarkPrecacheSounds() const
DEFINE_ACTION_FUNCTION(AAmbientSound, MarkAmbientSounds)
{
Super::MarkPrecacheSounds();
FAmbientSound *ambient = Ambients.CheckKey(args[0]);
PARAM_SELF_PROLOGUE(AAmbientSound);
FAmbientSound *ambient = Ambients.CheckKey(self->args[0]);
if (ambient != NULL)
{
ambient->sound.MarkUsed();
}
return 0;
}
//==========================================================================
@ -2458,3 +2460,11 @@ void S_ParseMusInfo()
}
DEFINE_ACTION_FUNCTION(DObject, MarkSound)
{
PARAM_PROLOGUE;
PARAM_SOUND(sound_id);
sound_id.MarkUsed();
return 0;
}

View File

@ -504,14 +504,9 @@ void S_PrecacheLevel ()
{
IFVIRTUALPTR(actor, AActor, MarkPrecacheSounds)
{
// Without the type cast this picks the 'void *' assignment...
VMValue params[1] = { actor };
VMCall(func, params, 1, nullptr, 0);
}
else
{
actor->MarkPrecacheSounds();
}
}
for (auto snd : gameinfo.PrecachedSounds)
{

View File

@ -420,6 +420,18 @@ class Actor : Thinker native
native clearscope static Vector2 RotateVector(Vector2 vec, double angle);
native clearscope static double Normalize180(double ang);
virtual void MarkPrecacheSounds()
{
MarkSound(SeeSound);
MarkSound(AttackSound);
MarkSound(PainSound);
MarkSound(DeathSound);
MarkSound(ActiveSound);
MarkSound(UseSound);
MarkSound(BounceSound);
MarkSound(WallBounceSound);
MarkSound(CrushPainSound);
}
bool IsPointerEqual(int ptr_select1, int ptr_select2)
{
@ -439,7 +451,6 @@ class Actor : Thinker native
virtual native void Die(Actor source, Actor inflictor, int dmgflags = 0, Name MeansOfDeath = 'none');
virtual native bool Slam(Actor victim);
virtual native void Touch(Actor toucher);
virtual native void MarkPrecacheSounds();
native void Substitute(Actor replacement);
// Called by PIT_CheckThing to check if two actors actually can collide.

View File

@ -385,6 +385,7 @@ class Object native
native static void S_ResumeSound (bool notsfx);
native static bool S_ChangeMusic(String music_name, int order = 0, bool looping = true, bool force = false);
native static float S_GetLength(Sound sound_id);
native static void MarkSound(Sound snd);
native static uint BAM(double angle);
native static void SetMusicVolume(float vol);
native static uint MSTime();

View File

@ -74,6 +74,17 @@ class Inventory : Actor native
Stop;
}
//===========================================================================
//
// AInventory :: MarkPrecacheSounds
//
//===========================================================================
override void MarkPrecacheSounds()
{
Super.MarkPrecacheSounds();
MarkSound(PickupSound);
}
//===========================================================================
//

View File

@ -78,6 +78,18 @@ class Weapon : StateProvider native
Stop;
}
//===========================================================================
//
// AWeapon :: MarkPrecacheSounds
//
//===========================================================================
override void MarkPrecacheSounds()
{
Super.MarkPrecacheSounds();
MarkSound(UpSound);
MarkSound(ReadySound);
}
virtual int, int CheckAddToSlots()
{

View File

@ -113,6 +113,18 @@ class PlayerPawn : Actor native
Obituary "$OB_MPDEFAULT";
}
//===========================================================================
//
// APlayerPawn :: MarkPrecacheSounds
//
//===========================================================================
override void MarkPrecacheSounds()
{
Super.MarkPrecacheSounds();
MarkPlayerSounds();
}
//----------------------------------------------------------------------------
//
//
@ -2065,6 +2077,7 @@ class PlayerPawn : Actor native
native void CheckEnvironment();
native void CheckUse();
native void CheckWeaponButtons();
native void MarkPlayerSounds();
}
class PlayerChunk : PlayerPawn

View File

@ -66,6 +66,14 @@ class AmbientSound : Actor native
+NOSECTOR
+DONTSPLASH
}
native void MarkAmbientSounds();
override void MarkPrecacheSounds()
{
Super.MarkPrecacheSounds();
MarkAmbientSounds();
}
}
class AmbientSoundNoGravity : AmbientSound