11 Commits
cb2 ... cb3

Author SHA1 Message Date
andreja6
1cae1135b9 Merge pull request #15 from andreja6/sound
Added sound and sound effects
2018-04-27 09:19:54 -07:00
andreja6
f78ca49ec0 Added try/catch 2018-04-27 09:18:48 -07:00
andreja6
e9c7607a4b Added init check 2018-04-27 00:04:04 -07:00
andreja6
6d49e266dd Made AudioPlayer's play and init method static 2018-04-26 21:41:07 -07:00
andreja6
78cdb01ef1 changed how bitrate is set 2018-04-26 21:28:22 -07:00
andreja6
1ed434c858 removed useless arial fonts 2018-04-26 20:11:36 -07:00
andreja6
f4acbaacdc Added camera click 2018-04-26 20:07:19 -07:00
andreja6
e777f3ccc4 Added sound system
Added delete sound
2018-04-26 20:01:37 -07:00
andreja6
9e61c9e4d2 Fixed bad operator 2018-04-26 13:36:57 -07:00
andreja6
3fb730ceba Merge pull request #14 from andreja6/raycasting-part-selection
Added delete functionality
2018-04-26 13:35:15 -07:00
andreja6
811ac871a3 Added delete functionality 2018-04-26 11:57:04 -07:00
12 changed files with 209 additions and 10 deletions

113
AudioPlayer.cpp Normal file
View File

@@ -0,0 +1,113 @@
#include "AudioPlayer.h"
#include "SDL.h"
#include "SDL_audio.h"
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define NUM_SOUNDS 10
static SDL_AudioSpec fmt;
static bool initiated = false;
AudioPlayer::AudioPlayer(void)
{
}
AudioPlayer::~AudioPlayer(void)
{
SDL_CloseAudio();
}
void AudioPlayer::init()
{
initiated = true;
extern void mixaudio(void *unused, Uint8 *stream, int len);
fmt.freq = 22050;
fmt.format = AUDIO_S16;
fmt.channels = 2;
fmt.samples = 1024; /* A good value for games */
fmt.callback = mixaudio;
fmt.userdata = NULL;
/* Open the audio device and start playing sound! */
if ( SDL_OpenAudio(&fmt, NULL) < 0 ) {
fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError());
exit(1);
}
SDL_PauseAudio(0);
}
static struct sample {
Uint8 *data;
Uint32 dpos;
Uint32 dlen;
} sounds[NUM_SOUNDS];
void mixaudio(void *unused, Uint8 *stream, int len)
{
int i;
Uint32 amount;
for ( i=0; i<NUM_SOUNDS; ++i ) {
amount = (sounds[i].dlen-sounds[i].dpos);
if ( amount > (Uint32)len ) {
amount = len;
}
SDL_MixAudio(stream, &sounds[i].data[sounds[i].dpos], amount, SDL_MIX_MAXVOLUME);
sounds[i].dpos += amount;
}
}
void AudioPlayer::PlaySound(std::string fileString)
{
if(initiated)
{
char *file = new char[fileString.length() + 1];
strcpy(file, fileString.c_str());
int index;
SDL_AudioSpec wave;
Uint8 *data;
Uint32 dlen;
SDL_AudioCVT cvt;
/* Look for an empty (or finished) sound slot */
for ( index=0; index<NUM_SOUNDS; ++index ) {
if ( sounds[index].dpos == sounds[index].dlen ) {
break;
}
}
if ( index == NUM_SOUNDS )
return;
/* Load the sound file and convert it to 16-bit stereo at 22kHz */
if ( SDL_LoadWAV(file, &wave, &data, &dlen) == NULL ) {
fprintf(stderr, "Couldn't load %s: %s\n", file, SDL_GetError());
return;
}
SDL_BuildAudioCVT(&cvt, wave.format, wave.channels, wave.freq,
AUDIO_S16, 2, fmt.freq);
cvt.buf = (Uint8*)malloc(dlen*cvt.len_mult);
memcpy(cvt.buf, data, dlen);
cvt.len = dlen;
SDL_ConvertAudio(&cvt);
SDL_FreeWAV(data);
/* Put the sound data in the slot (it starts playing immediately) */
if ( sounds[index].data ) {
free(sounds[index].data);
}
SDL_LockAudio();
sounds[index].data = cvt.buf;
sounds[index].dlen = cvt.len_cvt;
sounds[index].dpos = 0;
SDL_UnlockAudio();
delete [] file;
}
else
{
OutputDebugString("Audio player not initialized, sound will not play\r\n");
}
}

11
AudioPlayer.h Normal file
View File

@@ -0,0 +1,11 @@
#include <G3DAll.h>
#pragma once
class AudioPlayer
{
public:
AudioPlayer(void);
~AudioPlayer(void);
static void PlaySound(std::string);
static void init();
};

View File

@@ -230,6 +230,10 @@
Name="Source Files" Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
> >
<File
RelativePath=".\AudioPlayer.cpp"
>
</File>
<File <File
RelativePath=".\BaseButtonInstance.cpp" RelativePath=".\BaseButtonInstance.cpp"
> >
@@ -283,6 +287,10 @@
Name="Header Files" Name="Header Files"
Filter="h;hpp;hxx;hm;inl" Filter="h;hpp;hxx;hm;inl"
> >
<File
RelativePath=".\AudioPlayer.h"
>
</File>
<File <File
RelativePath=".\BaseButtonInstance.h" RelativePath=".\BaseButtonInstance.h"
> >

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
content/sounds/SWITCH3.wav Normal file

Binary file not shown.

BIN
content/sounds/pageturn.wav Normal file

Binary file not shown.

View File

@@ -16,6 +16,7 @@
#include "PhysicalInstance.h" #include "PhysicalInstance.h"
#include "TextButtonInstance.h" #include "TextButtonInstance.h"
#include "ImageButtonInstance.h" #include "ImageButtonInstance.h"
#include "AudioPlayer.h"
#if G3D_VER < 61000 #if G3D_VER < 61000
@@ -36,6 +37,7 @@ static G3D::RealTime messageTime = 0;
static G3D::RealTime inputTime = 0; static G3D::RealTime inputTime = 0;
static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1}; static int FPSVal[8] = {10, 20, 30, 60, 120, 240, INT_MAX,1};
static int index = 2; static int index = 2;
static std::string cameraSound = "";
static float TIMERVAL = 60.0F; static float TIMERVAL = 60.0F;
static int SCOREVAL = 0; static int SCOREVAL = 0;
static G3D::TextureRef go = NULL; static G3D::TextureRef go = NULL;
@@ -248,6 +250,7 @@ public:
void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button) void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button)
{ {
AudioPlayer::PlaySound(cameraSound);
CoordinateFrame frame = usableApp->debugCamera.getCoordinateFrame(); CoordinateFrame frame = usableApp->debugCamera.getCoordinateFrame();
if(button->name == "CenterCam") if(button->name == "CenterCam")
centerCam = true; centerCam = true;
@@ -262,6 +265,34 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button)
} }
class DeleteListener : public ButtonListener {
public:
void onButton1MouseClick(BaseButtonInstance*);
};
void DeleteListener::onButton1MouseClick(BaseButtonInstance* button)
{
if(selectedInstance != NULL)
{
for(size_t i = 0; i < instances.size(); i++)
{
if(instances.at(i) == selectedInstance)
{
Instance* deleting = instances.at(i);
instances.erase(instances.begin() + i);
delete deleting;
selectedInstance = NULL;
AudioPlayer::PlaySound(GetFileInPath("/content/sounds/pageturn.wav"));
}
}
}
}
class ModeSelectionListener : public ButtonListener { class ModeSelectionListener : public ButtonListener {
public: public:
void onButton1MouseClick(BaseButtonInstance*); void onButton1MouseClick(BaseButtonInstance*);
@@ -483,15 +514,8 @@ void initGUI()
instance->size = Vector2(40,46); instance->size = Vector2(40,46);
instance->position = Vector2(20, 284); instance->position = Vector2(20, 284);
instance->parent = dataModel; instance->parent = dataModel;
instance->name = "Delete";
instance = makeImageButton( instance->setButtonListener(new DeleteListener());
Texture::fromFile(GetFileInPath("/content/images/Delete.png")),
Texture::fromFile(GetFileInPath("/content/images/Delete_ovr.png")),
Texture::fromFile(GetFileInPath("/content/images/Delete_dn.png")),
Texture::fromFile(GetFileInPath("/content/images/Delete_ds.png")));
instance->size = Vector2(40,46);
instance->position = Vector2(20, 284);
instance->parent = dataModel;
instance = makeImageButton( instance = makeImageButton(
Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn.png")), Texture::fromFile(GetFileInPath("/content/images/CameraZoomIn.png")),
@@ -705,6 +729,19 @@ void Demo::onCleanup() {
void Demo::onLogic() { void Demo::onLogic() {
// Add non-simulation game logic and AI code here // Add non-simulation game logic and AI code here
for(size_t i = 0; i < instances_2D.size(); i++)
{
if(instances_2D.at(i)->name == "Delete")
{
ImageButtonInstance* button = (ImageButtonInstance*)instances_2D.at(i);
if(selectedInstance == NULL)
button->disabled = true;
else
button->disabled = false;
}
}
} }
@@ -842,11 +879,13 @@ void Demo::onUserInput(UserInput* ui) {
if(ui->keyPressed(SDL_MOUSE_WHEEL_UP_KEY)) if(ui->keyPressed(SDL_MOUSE_WHEEL_UP_KEY))
{ {
AudioPlayer::PlaySound(cameraSound);
CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); CoordinateFrame frame = app->debugCamera.getCoordinateFrame();
cameraPos = cameraPos + frame.lookVector()*2; cameraPos = cameraPos + frame.lookVector()*2;
} }
if(ui->keyPressed(SDL_MOUSE_WHEEL_DOWN_KEY)) if(ui->keyPressed(SDL_MOUSE_WHEEL_DOWN_KEY))
{ {
AudioPlayer::PlaySound(cameraSound);
CoordinateFrame frame = app->debugCamera.getCoordinateFrame(); CoordinateFrame frame = app->debugCamera.getCoordinateFrame();
cameraPos = cameraPos - frame.lookVector()*2; cameraPos = cameraPos - frame.lookVector()*2;
} }
@@ -903,6 +942,27 @@ void Demo::onUserInput(UserInput* ui) {
right = true; right = true;
} }
if(ui->keyPressed(SDL_LEFT_MOUSE_KEY))
{
bool onGUI = false;
for(size_t i = 0; i < instances_2D.size(); i++)
{
if(instances_2D.at(i)->className == "TextButton" || instances_2D.at(i)->className == "ImageButton")
{
BaseButtonInstance* button = (BaseButtonInstance*)instances_2D.at(i);
if(button->mouseInButton(ui->mouseXY().x, ui->mouseXY().y, app->renderDevice))
{
onGUI = true;
break;
}
}
}
if(!onGUI)
{
selectedInstance = NULL;
}
}
if(ui->keyReleased(SDL_LEFT_MOUSE_KEY)) if(ui->keyReleased(SDL_LEFT_MOUSE_KEY))
{ {
@@ -1314,6 +1374,7 @@ void App::main() {
cursor = Texture::fromFile(GetFileInPath("/content/cursor2.png")); cursor = Texture::fromFile(GetFileInPath("/content/cursor2.png"));
fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt"));
fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt"));
cameraSound = GetFileInPath("/content/sounds/SWITCH3.wav");
sky = Sky::create(NULL, ExePath() + "/content/sky/"); sky = Sky::create(NULL, ExePath() + "/content/sky/");
cursorid = cursor->openGLID(); cursorid = cursor->openGLID();
applet->run(); applet->run();
@@ -1407,7 +1468,8 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
int main(int argc, char** argv) { int main(int argc, char** argv) {
//_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
//_CrtSetBreakAlloc(1279); //_CrtSetBreakAlloc(1279);
try{
AudioPlayer::init();
GAppSettings settings; GAppSettings settings;
settings.window.resizable = true; settings.window.resizable = true;
//settings.window.fsaaSamples = 8; //settings.window.fsaaSamples = 8;
@@ -1499,5 +1561,10 @@ int main(int argc, char** argv) {
//messageTime = G3D::System::time(); //messageTime = G3D::System::time();
app.run(); app.run();
}
catch(std::exception)
{
OnError(-1);
}
return 0; return 0;
} }