/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
App/include/util/SoundChannel.h
171 строка
5 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
/* Copyright 2003-2014 ROBLOX Corporation, All Rights Reserved */ #pragma once #include "v8tree/Instance.h" #include "Reflection/Event.h" #include "Util/Sound.h" #include "Util/RunStateOwner.h" namespace FMOD { class Channel; } struct FMOD_CHANNEL; namespace RBX { class PartInstance; extern void registerSound(); namespace Soundscape { enum RollOffMode { Inverse = 0, Linear, }; // A simple sound object extern const char* const sSoundChannel; class SoundChannel : public DescribedCreatable<SoundChannel, Instance, sSoundChannel> , public Diagnostics::Countable<SoundChannel> { private: typedef DescribedCreatable<SoundChannel, Instance, sSoundChannel> Super; shared_ptr<Sound> sound; FMOD::Channel* fmod_channel; // the latest channel RBX::Timer<RBX::Time::Fast> lastTimePosReplication; // to regulate how often we replicate the time SoundId soundId; float volume; float pitch; float minDistance; float maxDistance; RollOffMode rollOff; float defaultFrequency; double soundPositionSeconds; int numOfTimesLooped; unsigned lastSoundPositionMsec; bool playOnRemove; bool is3D : 1; bool looped : 1; bool soundDisabled : 1; // a cached value coming from SoundService int playCount; // actual number of how many times this sound has played int reqPlayCount; // requested number of play calls. Hack to get play() and pause() to replicate (-1 stopped, 0 paused, 1+ play) mutable bool invalidChannel : 1; PartInstance* part; // The Part (if any) that this sound is attached to rbx::signals::scoped_connection serverUpdatedTimeConnection; rbx::signals::scoped_connection serverScriptUpdatedTimeConnection; rbx::signals::scoped_connection serverResumedSoundConnection; /** * Some sounds are "played" everywhere, but should only be heard by certain peers. * For example, sounds in Player GUIs should only be heard by the Player that sees the GUI. **/ bool isHeardLocally(const Instance* context) const; // see if everyone in the world can hear this sound bool isHeardGlobally() const; void updateLooped(); void update3D(FMOD::Channel* channel); void playLocal(const Instance *context); void playSound(bool isResuming = false); void playSound(const Instance* context, bool isResuming = false); void releaseChannel(); void loadSound(const Instance *context, bool shouldPlayOnLoad); void serverUpdatedTimePositionFromScript(unsigned int timePosition); void serverUpdatedTimePosition(unsigned int timePosition); bool controlledByAndIsServer() const; protected: /*override*/ bool askSetParent(const Instance* instance) const; /*override*/ void onAncestorChanged(const AncestorChanged& event); /*override*/ void onServiceProvider(ServiceProvider* oldProvider, ServiceProvider* newProvider); public: rbx::signal<void(std::string soundId, int)> soundLoopedSignal; rbx::signal<void(std::string soundId)> soundPausedSignal; rbx::signal<void(std::string soundId)> soundStoppedSignal; rbx::signal<void(std::string soundId)> soundPlayedSignal; rbx::signal<void(std::string soundId)> soundEndedSignal; rbx::remote_signal<void(int)> timePositionUpdatedFromServerSignal; rbx::remote_signal<void(int)> timePositionUpdatedFromServerScriptSignal; rbx::remote_signal<void(int)> soundResumedFromServerSignal; SoundChannel(); ~SoundChannel(); static Reflection::BoundProp<bool> sound_desc_playOnRemove; bool doFmodChannelAddressesMatch(const FMOD::Channel *channel) const; FMOD::Channel* getFMODChannel() { return fmod_channel; } void setSoundId(SoundId value); const SoundId &getSoundId() const; float getVolume() const; void setVolume(float value); float getPitch() const; void setPitch(float value); float getMinDistance() const; void setMinDistance(float value); float getMaxDistance() const; void setMaxDistance(float value); RollOffMode getRollOffMode() const { return rollOff; } void setRollOffMode(Soundscape::RollOffMode value); bool getLooped() const; void setLooped(bool value); int getPlayCount() const { return playCount; } void setPlayCount(int value); void resume(); void play(); void pause(); void stop(); // does not replicate play count void playLocal(); void pauseLocal(); //// bool isPlaying() const; bool isPaused() const; bool isSoundLoaded() const; double getSoundLength() const; void setSoundPosition(double position, bool setFromLua = false); void setSoundPositionLua(double position); double getSoundPosition() const; bool getHasPlayed() const; void setHasPlayed(bool value); void updateListenState(const Time::Interval& timeSinceLastStep); static void soundEnded(weak_ptr<SoundChannel> channelWeak, std::string soundId); void onChannelEnd(const FMOD_CHANNEL *channel); void onSoundLoaded(const Instance *context, bool shouldPlayOnLoad); }; } // namespace Soundscape } // namespace RBX