src/sound.cpp
branchNewGRF_ports
changeset 6871 5a9dc001e1ad
parent 6870 ca3fd1fbe311
child 6872 1c4a4a609f85
equal deleted inserted replaced
6870:ca3fd1fbe311 6871:5a9dc001e1ad
    13 #include "window.h"
    13 #include "window.h"
    14 #include "viewport.h"
    14 #include "viewport.h"
    15 #include "fileio.h"
    15 #include "fileio.h"
    16 #include "newgrf_sound.h"
    16 #include "newgrf_sound.h"
    17 #include "helpers.hpp"
    17 #include "helpers.hpp"
       
    18 #include "fios.h"
    18 
    19 
    19 static uint _file_count;
    20 static uint _file_count;
    20 static FileEntry *_files;
    21 static FileEntry *_files;
    21 
    22 
    22 #define SOUND_SLOT 63
       
    23 // Number of levels of panning per side
    23 // Number of levels of panning per side
    24 #define PANNING_LEVELS 16
    24 #define PANNING_LEVELS 16
    25 
    25 
    26 
    26 
    27 static void OpenBankFile(const char *filename)
    27 static void OpenBankFile(const char *filename)
   146 	if (volume == 0) return;
   146 	if (volume == 0) return;
   147 	mc = MxAllocateChannel();
   147 	mc = MxAllocateChannel();
   148 	if (mc == NULL) return;
   148 	if (mc == NULL) return;
   149 	if (!SetBankSource(mc, sound)) return;
   149 	if (!SetBankSource(mc, sound)) return;
   150 
   150 
   151 	panning = clamp(panning, -PANNING_LEVELS, PANNING_LEVELS);
   151 	panning = Clamp(panning, -PANNING_LEVELS, PANNING_LEVELS);
   152 	left_vol = (volume * PANNING_LEVELS) - (volume * panning);
   152 	left_vol = (volume * PANNING_LEVELS) - (volume * panning);
   153 	right_vol = (volume * PANNING_LEVELS) + (volume * panning);
   153 	right_vol = (volume * PANNING_LEVELS) + (volume * panning);
   154 	MxSetChannelVolume(mc, left_vol * 128 / PANNING_LEVELS, right_vol * 128 / PANNING_LEVELS);
   154 	MxSetChannelVolume(mc, left_vol * 128 / PANNING_LEVELS, right_vol * 128 / PANNING_LEVELS);
   155 	MxActivateChannel(mc);
   155 	MxActivateChannel(mc);
   156 }
   156 }
   207 
   207 
   208 	FOR_ALL_WINDOWS(wz) {
   208 	FOR_ALL_WINDOWS(wz) {
   209 		const ViewPort *vp = (*wz)->viewport;
   209 		const ViewPort *vp = (*wz)->viewport;
   210 
   210 
   211 		if (vp != NULL &&
   211 		if (vp != NULL &&
   212 				IS_INSIDE_1D(x, vp->virtual_left, vp->virtual_width) &&
   212 				IsInsideBS(x, vp->virtual_left, vp->virtual_width) &&
   213 				IS_INSIDE_1D(y, vp->virtual_top, vp->virtual_height)) {
   213 				IsInsideBS(y, vp->virtual_top, vp->virtual_height)) {
   214 			int left = (x - vp->virtual_left);
   214 			int left = (x - vp->virtual_left);
   215 
   215 
   216 			StartSound(
   216 			StartSound(
   217 				sound,
   217 				sound,
   218 				left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,
   218 				left / max(1, vp->virtual_width / ((PANNING_LEVELS << 1) + 1)) - PANNING_LEVELS,