mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-07-05 01:51:38 +00:00
Merge pull request #427 from TES3MP/0.6.3 while resolving conflicts
Conflicts: apps/openmw-mp/CMakeLists.txt apps/openmw-mp/Script/Functions/Objects.cpp apps/openmw-mp/Script/Functions/Objects.hpp apps/openmw-mp/Script/ScriptFunctions.hpp
This commit is contained in:
commit
98eece808b
9 changed files with 130 additions and 28 deletions
|
@ -44,6 +44,7 @@ Programmers
|
||||||
crussell187
|
crussell187
|
||||||
DanielVukelich
|
DanielVukelich
|
||||||
darkf
|
darkf
|
||||||
|
David Cernat (davidcernat)
|
||||||
devnexen
|
devnexen
|
||||||
Dieho
|
Dieho
|
||||||
Dmitry Shkurskiy (endorph)
|
Dmitry Shkurskiy (endorph)
|
||||||
|
|
50
apps/openmw-mp/Script/Functions/Worldstate.cpp
Normal file
50
apps/openmw-mp/Script/Functions/Worldstate.cpp
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#include <components/openmw-mp/NetworkMessages.hpp>
|
||||||
|
|
||||||
|
#include <apps/openmw-mp/Networking.hpp>
|
||||||
|
#include <apps/openmw-mp/Player.hpp>
|
||||||
|
#include <apps/openmw-mp/Script/ScriptFunctions.hpp>
|
||||||
|
|
||||||
|
#include "Worldstate.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void WorldstateFunctions::SetHour(unsigned short pid, double hour) noexcept
|
||||||
|
{
|
||||||
|
Player *player;
|
||||||
|
GET_PLAYER(pid, player, );
|
||||||
|
|
||||||
|
player->hour = hour;
|
||||||
|
player->month = -1;
|
||||||
|
player->day = -1;
|
||||||
|
|
||||||
|
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_GAME_TIME)->setPlayer(player);
|
||||||
|
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_GAME_TIME)->Send(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WorldstateFunctions::SetMonth(unsigned short pid, int month) noexcept
|
||||||
|
{
|
||||||
|
Player *player;
|
||||||
|
GET_PLAYER(pid, player, );
|
||||||
|
|
||||||
|
player->hour = -1;
|
||||||
|
player->month = month;
|
||||||
|
player->day = -1;
|
||||||
|
|
||||||
|
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_GAME_TIME)->setPlayer(player);
|
||||||
|
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_GAME_TIME)->Send(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void WorldstateFunctions::SetDay(unsigned short pid, int day) noexcept
|
||||||
|
{
|
||||||
|
Player *player;
|
||||||
|
GET_PLAYER(pid, player, );
|
||||||
|
|
||||||
|
player->hour = -1;
|
||||||
|
player->month = -1;
|
||||||
|
player->day = day;
|
||||||
|
|
||||||
|
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_GAME_TIME)->setPlayer(player);
|
||||||
|
mwmp::Networking::get().getPlayerPacketController()->GetPacket(ID_GAME_TIME)->Send(false);
|
||||||
|
}
|
44
apps/openmw-mp/Script/Functions/Worldstate.hpp
Normal file
44
apps/openmw-mp/Script/Functions/Worldstate.hpp
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#ifndef OPENMW_WORLDSTATEAPI_HPP
|
||||||
|
#define OPENMW_WORLDSTATEAPI_HPP
|
||||||
|
|
||||||
|
#include "../Types.hpp"
|
||||||
|
|
||||||
|
#define WORLDSTATEAPI \
|
||||||
|
{"SetHour", WorldstateFunctions::SetHour},\
|
||||||
|
{"SetMonth", WorldstateFunctions::SetMonth},\
|
||||||
|
{"SetDay", WorldstateFunctions::SetDay}
|
||||||
|
|
||||||
|
class WorldstateFunctions
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the game hour for a player and send a GameTime packet to that player.
|
||||||
|
*
|
||||||
|
* \param pid The player ID.
|
||||||
|
* \param hour The hour.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void SetHour(unsigned short pid, double hour) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the game month for a player and send a GameTime packet to that player.
|
||||||
|
*
|
||||||
|
* \param pid The player ID.
|
||||||
|
* \param month The month.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void SetMonth(unsigned short pid, int month) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the game day for a player and send a GameTime packet to that player.
|
||||||
|
*
|
||||||
|
* \param pid The player ID.
|
||||||
|
* \param day The day.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void SetDay(unsigned short pid, int day) noexcept;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //OPENMW_WORLDSTATEAPI_HPP
|
|
@ -423,7 +423,7 @@ namespace MWBase
|
||||||
/// Cycle to next or previous weapon
|
/// Cycle to next or previous weapon
|
||||||
virtual void cycleWeapon(bool next) = 0;
|
virtual void cycleWeapon(bool next) = 0;
|
||||||
|
|
||||||
virtual void playSound(const std::string& soundId, bool preventOverlapping = false, float volume = 1.f, float pitch = 1.f) = 0;
|
virtual void playSound(const std::string& soundId, float volume = 1.f, float pitch = 1.f) = 0;
|
||||||
|
|
||||||
// In WindowManager for now since there isn't a VFS singleton
|
// In WindowManager for now since there isn't a VFS singleton
|
||||||
virtual std::string correctIconPath(const std::string& path) = 0;
|
virtual std::string correctIconPath(const std::string& path) = 0;
|
||||||
|
|
|
@ -200,7 +200,7 @@ namespace MWGui
|
||||||
{
|
{
|
||||||
if ((mCurrentPage+1)*2 < mPages.size())
|
if ((mCurrentPage+1)*2 < mPages.size())
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWindowManager()->playSound("book page2", true);
|
MWBase::Environment::get().getWindowManager()->playSound("book page2");
|
||||||
|
|
||||||
++mCurrentPage;
|
++mCurrentPage;
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ namespace MWGui
|
||||||
{
|
{
|
||||||
if (mCurrentPage > 0)
|
if (mCurrentPage > 0)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWindowManager()->playSound("book page", true);
|
MWBase::Environment::get().getWindowManager()->playSound("book page");
|
||||||
|
|
||||||
--mCurrentPage;
|
--mCurrentPage;
|
||||||
|
|
||||||
|
|
|
@ -956,6 +956,9 @@ namespace MWGui
|
||||||
|
|
||||||
updateMap();
|
updateMap();
|
||||||
|
|
||||||
|
if (!mMap->isVisible())
|
||||||
|
mMap->onFrame(frameDuration);
|
||||||
|
|
||||||
mHud->onFrame(frameDuration);
|
mHud->onFrame(frameDuration);
|
||||||
|
|
||||||
mDebugWindow->onFrame(frameDuration);
|
mDebugWindow->onFrame(frameDuration);
|
||||||
|
@ -2043,16 +2046,12 @@ namespace MWGui
|
||||||
mInventoryWindow->cycle(next);
|
mInventoryWindow->cycle(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowManager::playSound(const std::string& soundId, bool preventOverlapping, float volume, float pitch)
|
void WindowManager::playSound(const std::string& soundId, float volume, float pitch)
|
||||||
{
|
{
|
||||||
if (soundId.empty())
|
if (soundId.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MWBase::SoundManager *sndmgr = MWBase::Environment::get().getSoundManager();
|
MWBase::Environment::get().getSoundManager()->playSound(soundId, volume, pitch, MWSound::Type::Sfx, MWSound::PlayMode::NoEnv);
|
||||||
if (preventOverlapping && sndmgr->getSoundPlaying(MWWorld::Ptr(), soundId))
|
|
||||||
return;
|
|
||||||
|
|
||||||
sndmgr->playSound(soundId, volume, pitch, MWSound::Type::Sfx, MWSound::PlayMode::NoEnv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowManager::updateSpellWindow()
|
void WindowManager::updateSpellWindow()
|
||||||
|
|
|
@ -452,7 +452,7 @@ namespace MWGui
|
||||||
/// Cycle to next or previous weapon
|
/// Cycle to next or previous weapon
|
||||||
virtual void cycleWeapon(bool next);
|
virtual void cycleWeapon(bool next);
|
||||||
|
|
||||||
virtual void playSound(const std::string& soundId, bool preventOverlapping = false, float volume = 1.f, float pitch = 1.f);
|
virtual void playSound(const std::string& soundId, float volume = 1.f, float pitch = 1.f);
|
||||||
|
|
||||||
// In WindowManager for now since there isn't a VFS singleton
|
// In WindowManager for now since there isn't a VFS singleton
|
||||||
virtual std::string correctIconPath(const std::string& path);
|
virtual std::string correctIconPath(const std::string& path);
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
|
|
||||||
#include "../mwmechanics/actorutil.hpp"
|
#include "../mwmechanics/actorutil.hpp"
|
||||||
|
|
||||||
#include "sound_output.hpp"
|
|
||||||
#include "sound_buffer.hpp"
|
#include "sound_buffer.hpp"
|
||||||
#include "sound_decoder.hpp"
|
#include "sound_decoder.hpp"
|
||||||
|
#include "sound_output.hpp"
|
||||||
#include "sound.hpp"
|
#include "sound.hpp"
|
||||||
|
|
||||||
#include "openal_output.hpp"
|
#include "openal_output.hpp"
|
||||||
|
@ -577,6 +577,9 @@ namespace MWSound
|
||||||
Sound_Buffer *sfx = loadSound(Misc::StringUtils::lowerCase(soundId));
|
Sound_Buffer *sfx = loadSound(Misc::StringUtils::lowerCase(soundId));
|
||||||
if(!sfx) return nullptr;
|
if(!sfx) return nullptr;
|
||||||
|
|
||||||
|
// Only one copy of given sound can be played at time, so stop previous copy
|
||||||
|
stopSound(sfx, MWWorld::ConstPtr());
|
||||||
|
|
||||||
Sound *sound = getSoundRef();
|
Sound *sound = getSoundRef();
|
||||||
sound->init(volume * sfx->mVolume, volumeFromType(type), pitch, mode|type|Play_2D);
|
sound->init(volume * sfx->mVolume, volumeFromType(type), pitch, mode|type|Play_2D);
|
||||||
if(!mOutput->playSound(sound, sfx->mHandle, offset))
|
if(!mOutput->playSound(sound, sfx->mHandle, offset))
|
||||||
|
@ -611,7 +614,7 @@ namespace MWSound
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
// Only one copy of given sound can be played at time on ptr, so stop previous copy
|
// Only one copy of given sound can be played at time on ptr, so stop previous copy
|
||||||
stopSound3D(ptr, soundId);
|
stopSound(sfx, ptr);
|
||||||
|
|
||||||
bool played;
|
bool played;
|
||||||
Sound *sound = getSoundRef();
|
Sound *sound = getSoundRef();
|
||||||
|
@ -678,12 +681,11 @@ namespace MWSound
|
||||||
mOutput->finishSound(sound);
|
mOutput->finishSound(sound);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundManager::stopSound3D(const MWWorld::ConstPtr &ptr, const std::string& soundId)
|
void SoundManager::stopSound(Sound_Buffer *sfx, const MWWorld::ConstPtr &ptr)
|
||||||
{
|
{
|
||||||
SoundMap::iterator snditer = mActiveSounds.find(ptr);
|
SoundMap::iterator snditer = mActiveSounds.find(ptr);
|
||||||
if(snditer != mActiveSounds.end())
|
if(snditer != mActiveSounds.end())
|
||||||
{
|
{
|
||||||
Sound_Buffer *sfx = loadSound(Misc::StringUtils::lowerCase(soundId));
|
|
||||||
for(SoundBufferRefPair &snd : snditer->second)
|
for(SoundBufferRefPair &snd : snditer->second)
|
||||||
{
|
{
|
||||||
if(snd.second == sfx)
|
if(snd.second == sfx)
|
||||||
|
@ -692,6 +694,22 @@ namespace MWSound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SoundManager::stopSound(const std::string& soundId)
|
||||||
|
{
|
||||||
|
Sound_Buffer *sfx = loadSound(Misc::StringUtils::lowerCase(soundId));
|
||||||
|
if (!sfx) return;
|
||||||
|
|
||||||
|
stopSound(sfx, MWWorld::ConstPtr());
|
||||||
|
}
|
||||||
|
|
||||||
|
void SoundManager::stopSound3D(const MWWorld::ConstPtr &ptr, const std::string& soundId)
|
||||||
|
{
|
||||||
|
Sound_Buffer *sfx = loadSound(Misc::StringUtils::lowerCase(soundId));
|
||||||
|
if (!sfx) return;
|
||||||
|
|
||||||
|
stopSound(sfx, ptr);
|
||||||
|
}
|
||||||
|
|
||||||
void SoundManager::stopSound3D(const MWWorld::ConstPtr &ptr)
|
void SoundManager::stopSound3D(const MWWorld::ConstPtr &ptr)
|
||||||
{
|
{
|
||||||
SoundMap::iterator snditer = mActiveSounds.find(ptr);
|
SoundMap::iterator snditer = mActiveSounds.find(ptr);
|
||||||
|
@ -715,6 +733,7 @@ namespace MWSound
|
||||||
mOutput->finishSound(sndbuf.first);
|
mOutput->finishSound(sndbuf.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(SaySoundMap::value_type &snd : mActiveSaySounds)
|
for(SaySoundMap::value_type &snd : mActiveSaySounds)
|
||||||
{
|
{
|
||||||
if(!snd.first.isEmpty() && snd.first != MWMechanics::getPlayer() && snd.first.getCell() == cell)
|
if(!snd.first.isEmpty() && snd.first != MWMechanics::getPlayer() && snd.first.getCell() == cell)
|
||||||
|
@ -722,20 +741,6 @@ namespace MWSound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundManager::stopSound(const std::string& soundId)
|
|
||||||
{
|
|
||||||
SoundMap::iterator snditer = mActiveSounds.find(MWWorld::ConstPtr());
|
|
||||||
if(snditer != mActiveSounds.end())
|
|
||||||
{
|
|
||||||
Sound_Buffer *sfx = loadSound(Misc::StringUtils::lowerCase(soundId));
|
|
||||||
for(SoundBufferRefPair &sndbuf : snditer->second)
|
|
||||||
{
|
|
||||||
if(sndbuf.second == sfx)
|
|
||||||
mOutput->finishSound(sndbuf.first);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SoundManager::fadeOutSound3D(const MWWorld::ConstPtr &ptr,
|
void SoundManager::fadeOutSound3D(const MWWorld::ConstPtr &ptr,
|
||||||
const std::string& soundId, float duration)
|
const std::string& soundId, float duration)
|
||||||
{
|
{
|
||||||
|
|
|
@ -145,6 +145,9 @@ namespace MWSound
|
||||||
DecoderPtr getDecoder();
|
DecoderPtr getDecoder();
|
||||||
friend class OpenAL_Output;
|
friend class OpenAL_Output;
|
||||||
|
|
||||||
|
void stopSound(Sound_Buffer *sfx, const MWWorld::ConstPtr &ptr);
|
||||||
|
///< Stop the given object from playing given sound buffer.
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SoundManager(const VFS::Manager* vfs, const std::map<std::string, std::string>& fallbackMap, bool useSound);
|
SoundManager(const VFS::Manager* vfs, const std::map<std::string, std::string>& fallbackMap, bool useSound);
|
||||||
virtual ~SoundManager();
|
virtual ~SoundManager();
|
||||||
|
|
Loading…
Reference in a new issue