Explorar el Código

Merge pull request #35 from rhn/rhn

Fixes to sound handling.
Ivan Savenko hace 11 años
padre
commit
1647b3670c

+ 17 - 12
README.linux

@@ -31,43 +31,50 @@ On Debian-based systems (e.g. Ubuntu) run:
   sudo apt-get install cmake g++ libsdl1.2debian libsdl-image1.2-dev libsdl-ttf2.0-dev libsdl-mixer1.2-dev zlib1g-dev libavformat-dev libswscale-dev libboost-dev libboost-filesystem-dev libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-locale-dev qtbase5-dev
 
 On RPM-based distributions (e.g. Fedora) run:
-  sudo yum install cmake gcc-c++ SDL-devel SDL_image-devel SDL_ttf-devel SDL_mixer-devel boost boost-devel boost-filesystem boost-system boost-thread boost-program-options boost-locale zlib-devel ffmpeg-devel ffmpeg-libs
+  sudo yum install cmake gcc-c++ SDL2-devel SDL2_image-devel SDL2_ttf-devel SDL2_mixer-devel boost boost-devel boost-filesystem boost-system boost-thread boost-program-options boost-locale zlib-devel ffmpeg-devel ffmpeg-libs
 
 II. Getting the sources
 
 VCMI is still in development. We recommend the following initial directory structure:
 trunk
-trunk/src -> contains sources and is under SVN control
+trunk/vcmi -> contains sources and is under git control
 trunk/build -> contains build output, makefiles, object files,...
 
 You can get latest sources with subversion:
-  cd trunk
-  svn co http://svn.code.sf.net/p/vcmi/code/trunk/
+  git clone https://github.com/vcmi/vcmi.git
 
 III. Compilation
 
 Run configure:
   mkdir build && cd build
-  cmake ../src <any other options, see below>
+  cmake ../vcmi <any other options, see below>
 
 Additional options that you may want to use:
 To enable debugging: -DCMAKE_BUILD_TYPE=Debug
-To enable launcher: -DENABLE_LAUNCHER=Yes
+To change installation directory: -DCMAKE_INSTALL_PREFIX=$absolute_path_to_directory
 
 Notice:
-The ../src/ is not a typo, it will place makefile scripts into the build dir 
+The ../vcmi/ is not a typo, it will place makefile scripts into the build dir 
 as the build dir is your working dir when calling CMake.
 
 Then build vcmi:
-  make -j2 (j2 = compile with 2 cpu cores, you can specifiy any value)
+  make -j2 (j2 = compile with 2 threads, you can specify any value)
 
-That will generate vcmiclient, vcmiserver as well as 3 .so libraries.
+That will generate vcmiclient, vcmiserver, vcmilauncher as well as 3 .so libraries.
 
 III. Installing binaries
 
 To install VCMI you can use "make install" command however generation of distribution-specific packages is usually a better idea. In most cases this can be achieved using tool called "checkinstall"
 
-If you're compiling vcmi for development puposes, it's better to use links instead.
+If you're compiling vcmi for development puposes, the easiest is to use cmake prefix and then make install:
+
+# mkdir .../trunk/install
+# cmake -DCMAKE_INSTALL_PREFIX=.../trunk/install ../vcmi
+# make && make install
+# .../trunk/install/bin/vcmiclient
+
+
+it's better to use links instead.
 Go to /BIN_PATH/, and type:
 
   ln -s .../trunk/build/client/vcmiclient
@@ -86,5 +93,3 @@ Go to /LIB_PATH/vcmi/AI, and type:
 Go to /DATA_PATH/vcmi, and type:
   ln -s .../trunk/source/config
   ln -s .../trunk/source/Mods
-
-

+ 11 - 0
client/CPlayerInterface.cpp

@@ -22,6 +22,7 @@
 #include "../lib/Connection.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/CTownHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h" // For displaying correct UI when interacting with objects
 #include "../lib/BattleState.h"
 #include "../lib/JsonNode.h"
 #include "CMusicHandler.h"
@@ -1515,6 +1516,16 @@ void CPlayerInterface::centerView (int3 pos, int focusTime)
 void CPlayerInterface::objectRemoved( const CGObjectInstance *obj )
 {
 	EVENT_HANDLER_CALLED_BY_CLIENT;
+	if (LOCPLINT->cb->getCurrentPlayer() == playerID) {
+		std::string handlerName = VLC->objtypeh->getObjectHandlerName(obj->ID);
+        if ((handlerName == "pickable") || (handlerName == "scholar") || (handlerName== "artifact") || (handlerName == "pandora")) {
+			waitWhileDialog();
+			CCS->soundh->playSoundFromSet(CCS->soundh->pickupSounds);
+		} else if ((handlerName == "monster") || (handlerName == "hero")) {
+			waitWhileDialog();
+			CCS->soundh->playSound(soundBase::KillFade);
+		}
+	}
 	if(obj->ID == Obj::HERO  &&  obj->tempOwner == playerID)
 	{
 		const CGHeroInstance *h = static_cast<const CGHeroInstance*>(obj);

+ 4 - 2
lib/CSoundBase.h

@@ -3,6 +3,9 @@
 // Use some magic to keep the list of files and their code name in sync.
 
 #define VCMI_SOUND_LIST \
+/* Sounds for map actions */ \
+VCMI_SOUND_NAME(KillFade) VCMI_SOUND_FILE(KILLFADE.wav) /* hero or monster disappears */ \
+/* Other sounds (TODO: separate out the sounds for units, spells and the rest */ \
 VCMI_SOUND_NAME(AAGLAttack) VCMI_SOUND_FILE(AAGLATTK.wav) \
 VCMI_SOUND_NAME(AAGLDefend) VCMI_SOUND_FILE(AAGLDFND.wav) \
 VCMI_SOUND_NAME(AAGLKill) VCMI_SOUND_FILE(AAGLKILL.wav) \
@@ -515,7 +518,6 @@ VCMI_SOUND_NAME(ITRGKill) VCMI_SOUND_FILE(ITRGKILL.wav) \
 VCMI_SOUND_NAME(ITRGMove) VCMI_SOUND_FILE(ITRGMOVE.wav) \
 VCMI_SOUND_NAME(ITRGWNCE) VCMI_SOUND_FILE(ITRGWNCE.wav) \
 VCMI_SOUND_NAME(KEEPShot) VCMI_SOUND_FILE(KEEPSHOT.wav) \
-VCMI_SOUND_NAME(KillFADE) VCMI_SOUND_FILE(KILLFADE.wav) \
 VCMI_SOUND_NAME(LANDKill) VCMI_SOUND_FILE(LANDKILL.wav) \
 VCMI_SOUND_NAME(LANDMINE) VCMI_SOUND_FILE(LANDMINE.wav) \
 VCMI_SOUND_NAME(LCRSAttack) VCMI_SOUND_FILE(LCRSATTK.wav) \
@@ -1033,4 +1035,4 @@ public:
 	};
 #undef VCMI_SOUND_NAME
 #undef VCMI_SOUND_FILE
-};
+};

+ 1 - 0
lib/filesystem/ResourceID.cpp

@@ -110,6 +110,7 @@ EResType::Type EResTypeHelper::getTypeFromExtension(std::string extension)
 			(".AVI",   EResType::VIDEO)
 			(".MP3",   EResType::MUSIC)
 			(".OGG",   EResType::MUSIC)
+			(".FLAC",  EResType::MUSIC)
 			(".ZIP",   EResType::ARCHIVE_ZIP)
 			(".LOD",   EResType::ARCHIVE_LOD)
 			(".PAC",   EResType::ARCHIVE_LOD)

+ 5 - 0
lib/mapObjects/CObjectClassesHandler.cpp

@@ -318,6 +318,11 @@ std::string CObjectClassesHandler::getObjectName(si32 type, si32 subtype) const
 	return getObjectName(type);
 }
 
+std::string CObjectClassesHandler::getObjectHandlerName(si32 type) const
+{
+	return objects.at(type)->handlerName;
+}
+
 void AObjectTypeHandler::setType(si32 type, si32 subtype)
 {
 	this->type = type;

+ 3 - 0
lib/mapObjects/CObjectClassesHandler.h

@@ -221,6 +221,9 @@ public:
 
 	std::string getObjectName(si32 type) const;
 	std::string getObjectName(si32 type, si32 subtype) const;
+	
+	/// Returns handler string describing the handler (for use in client)
+	std::string getObjectHandlerName(si32 type) const;
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{