Jukebox improvements (#4537)
* Add jukebox block handler Co-authored-by: peterbell10 <peterbell10@live.co.uk>
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
|
||||
// JukeboxEntity.cpp
|
||||
|
||||
// Implements the cJukeboxEntity class representing a single jukebox in the world
|
||||
|
||||
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
|
||||
|
||||
#include "JukeboxEntity.h"
|
||||
#include "../World.h"
|
||||
#include "../EffectID.h"
|
||||
@@ -23,6 +26,21 @@ cJukeboxEntity::cJukeboxEntity(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, Ve
|
||||
|
||||
cJukeboxEntity::~cJukeboxEntity()
|
||||
{
|
||||
if (m_World && IsPlayingRecord())
|
||||
{
|
||||
// Stop playing music when destroyed by any means
|
||||
m_World->BroadcastSoundParticleEffect(EffectID::SFX_RANDOM_PLAY_MUSIC_DISC, GetPos(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cJukeboxEntity::Destroy(void)
|
||||
{
|
||||
ASSERT(m_World != nullptr);
|
||||
EjectRecord();
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +68,7 @@ bool cJukeboxEntity::UsedBy(cPlayer * a_Player)
|
||||
else
|
||||
{
|
||||
const cItem & HeldItem = a_Player->GetEquippedItem();
|
||||
if (PlayRecord(HeldItem.m_ItemType))
|
||||
if (PlayRecord(HeldItem.m_ItemType) && !a_Player->IsGameModeCreative())
|
||||
{
|
||||
a_Player->GetInventory().RemoveOneEquippedItem();
|
||||
return true;
|
||||
@@ -96,9 +114,9 @@ bool cJukeboxEntity::EjectRecord(void)
|
||||
cItems Drops;
|
||||
Drops.push_back(cItem(static_cast<short>(m_Record), 1, 0));
|
||||
m_Record = 0;
|
||||
m_World->SpawnItemPickups(Drops, Vector3d(0.5, 1, 0.5) + m_Pos, 8);
|
||||
m_World->BroadcastSoundParticleEffect(EffectID::SFX_RANDOM_PLAY_MUSIC_DISC, GetPos(), 0);
|
||||
m_World->SpawnItemPickups(Drops, Vector3d(0.5, 0.5, 0.5) + m_Pos, 10);
|
||||
m_World->SetBlockMeta(m_Pos, E_META_JUKEBOX_OFF);
|
||||
m_World->BroadcastSoundParticleEffect(EffectID::SFX_RANDOM_PLAY_MUSIC_DISC, GetPos(), 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user