From 59510383e689ee5f3fa7719f2ad3d555b07facfa Mon Sep 17 00:00:00 2001 From: MusicalProgrammer <38636805+MusicalProgrammer@users.noreply.github.com> Date: Sun, 29 Apr 2018 23:47:40 -0400 Subject: [PATCH 01/16] What I have thus far Camera panning still needs work. --- AudioPlayer.cpp | 113 +++++++ AudioPlayer.h | 11 + PhysicalInstance.cpp | 20 +- PhysicalInstance.h | 2 + content/sounds/SWITCH3.wav | Bin 0 -> 4628 bytes content/sounds/electronicpingshort.wav | Bin 0 -> 10317 bytes content/sounds/pageturn.wav | Bin 0 -> 25548 bytes content/sounds/switch.wav | Bin 0 -> 13498 bytes main.cpp | 445 ++++++++++++++++++++++--- 9 files changed, 536 insertions(+), 55 deletions(-) create mode 100644 AudioPlayer.cpp create mode 100644 AudioPlayer.h create mode 100644 content/sounds/SWITCH3.wav create mode 100644 content/sounds/electronicpingshort.wav create mode 100644 content/sounds/pageturn.wav create mode 100644 content/sounds/switch.wav diff --git a/AudioPlayer.cpp b/AudioPlayer.cpp new file mode 100644 index 0000000..bfbc2c1 --- /dev/null +++ b/AudioPlayer.cpp @@ -0,0 +1,113 @@ +#include "AudioPlayer.h" +#include "SDL.h" +#include "SDL_audio.h" +#include +#include +#include +#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 (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 +#pragma once + +class AudioPlayer +{ +public: + AudioPlayer(void); + ~AudioPlayer(void); + static void PlaySound(std::string); + static void init(); +}; diff --git a/PhysicalInstance.cpp b/PhysicalInstance.cpp index 247dc49..faa740a 100644 --- a/PhysicalInstance.cpp +++ b/PhysicalInstance.cpp @@ -1,5 +1,4 @@ #include "PhysicalInstance.h" - bool canCollide = true; bool anchored = false; Vector3 size; @@ -8,6 +7,8 @@ Vector3 velocity; Vector3 rotVelocity; CoordinateFrame cFrame; Color3 color; +bool changed = true; +Box itemBox = Box(); PhysicalInstance::PhysicalInstance(void) { @@ -31,6 +32,7 @@ void PhysicalInstance::setPosition(Vector3 pos) { position = pos; cFrame = CoordinateFrame(pos); + changed = true; } CoordinateFrame PhysicalInstance::getCFrame() { @@ -40,8 +42,24 @@ void PhysicalInstance::setCFrame(CoordinateFrame coordinateFrame) { cFrame = coordinateFrame; position = coordinateFrame.translation; + changed = true; } +CoordinateFrame PhysicalInstance::getCFrameRenderBased() +{ + return CoordinateFrame(getCFrame().rotation,Vector3(getCFrame().translation.x/2, getCFrame().translation.y/2, getCFrame().translation.z/2)); +} + +Box PhysicalInstance::getBox() +{ + if(changed) + { + Box box = Box(Vector3(0+size.x/4, 0+size.y/4, 0+size.z/4) ,Vector3(0-size.x/4,0-size.y/4,0-size.z/4)); + CoordinateFrame c = getCFrameRenderBased(); + itemBox = c.toWorldSpace(box); + } + return itemBox; +} PhysicalInstance::~PhysicalInstance(void) { diff --git a/PhysicalInstance.h b/PhysicalInstance.h index 4dd9cfe..bc3f859 100644 --- a/PhysicalInstance.h +++ b/PhysicalInstance.h @@ -16,6 +16,8 @@ public: void setPosition(Vector3); CoordinateFrame getCFrame(); void setCFrame(CoordinateFrame); + Box getBox(); + CoordinateFrame getCFrameRenderBased(); private: Vector3 position; }; diff --git a/content/sounds/SWITCH3.wav b/content/sounds/SWITCH3.wav new file mode 100644 index 0000000000000000000000000000000000000000..195138e013c413d77b7d683aa4f0160409eb29e3 GIT binary patch literal 4628 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 hfOF>AB_4!SFrJ{|86z;KTp` literal 0 HcmV?d00001 diff --git a/content/sounds/electronicpingshort.wav b/content/sounds/electronicpingshort.wav new file mode 100644 index 0000000000000000000000000000000000000000..2f82ae26e5a2c9ad767e00680029e03a20f10666 GIT binary patch literal 10317 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 literal 0 HcmV?d00001 diff --git a/content/sounds/pageturn.wav b/content/sounds/pageturn.wav new file mode 100644 index 0000000000000000000000000000000000000000..7070da531a528c072130e9697960915856bed7fd GIT binary patch literal 25548 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