Compare commits
7 Commits
v1.4
...
d84137daa7
| Author | SHA1 | Date | |
|---|---|---|---|
| d84137daa7 | |||
| 4980c0f712 | |||
| b8cc628dd7 | |||
| b663916a59 | |||
| 6c1c6cbc42 | |||
| bcb012fc65 | |||
| 67acc46222 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -9,3 +9,6 @@ scripts
|
|||||||
todo.txt
|
todo.txt
|
||||||
data/config.bin
|
data/config.bin
|
||||||
data/score.bin
|
data/score.bin
|
||||||
|
*.opk
|
||||||
|
coffee_crisis
|
||||||
|
.vscode
|
||||||
19
.vscode/c_cpp_properties.json
vendored
19
.vscode/c_cpp_properties.json
vendored
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Mac",
|
|
||||||
"includePath": [
|
|
||||||
"${workspaceFolder}/**"
|
|
||||||
],
|
|
||||||
"defines": [],
|
|
||||||
"macFrameworkPath": [
|
|
||||||
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
|
|
||||||
],
|
|
||||||
"compilerPath": "/usr/bin/clang",
|
|
||||||
"intelliSenseMode": "macos-clang-x64",
|
|
||||||
"cStandard": "c11",
|
|
||||||
"cppStandard": "c++11"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"version": 4
|
|
||||||
}
|
|
||||||
21
.vscode/launch.json
vendored
21
.vscode/launch.json
vendored
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
// Use IntelliSense to learn about possible attributes.
|
|
||||||
// Hover to view descriptions of existing attributes.
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "g++ - Build and debug",
|
|
||||||
"type": "cppdbg",
|
|
||||||
"request": "launch",
|
|
||||||
"program": "${workspaceFolder}/bin/coffee_crisis_macos_debug",
|
|
||||||
"args": [],
|
|
||||||
"stopAtEntry": false,
|
|
||||||
"cwd": "${workspaceFolder}/bin",
|
|
||||||
"environment": [],
|
|
||||||
"externalConsole": false,
|
|
||||||
"MIMode": "lldb",
|
|
||||||
"preLaunchTask": "C/C++: g++ build"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
19
.vscode/settings.json
vendored
19
.vscode/settings.json
vendored
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"files.associations": {
|
|
||||||
"cstddef": "cpp",
|
|
||||||
"__tuple": "cpp",
|
|
||||||
"array": "cpp",
|
|
||||||
"algorithm": "cpp",
|
|
||||||
"__bit_reference": "cpp",
|
|
||||||
"__hash_table": "cpp",
|
|
||||||
"__split_buffer": "cpp",
|
|
||||||
"initializer_list": "cpp",
|
|
||||||
"iterator": "cpp",
|
|
||||||
"string": "cpp",
|
|
||||||
"string_view": "cpp",
|
|
||||||
"unordered_map": "cpp",
|
|
||||||
"vector": "cpp",
|
|
||||||
"iosfwd": "cpp",
|
|
||||||
"stdexcept": "cpp"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
31
.vscode/tasks.json
vendored
31
.vscode/tasks.json
vendored
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"label": "C/C++: g++ build",
|
|
||||||
"command": "/usr/bin/g++",
|
|
||||||
"args": [
|
|
||||||
"-g",
|
|
||||||
"${workspaceFolder}/source/*.cpp",
|
|
||||||
"-std=c++11",
|
|
||||||
"-Wall",
|
|
||||||
"-O2",
|
|
||||||
"-lSDL2",
|
|
||||||
"-o",
|
|
||||||
"${workspaceFolder}/bin/coffee_crisis_macos_debug"
|
|
||||||
],
|
|
||||||
"options": {
|
|
||||||
"cwd": "${workspaceFolder}"
|
|
||||||
},
|
|
||||||
"problemMatcher": [
|
|
||||||
"$gcc"
|
|
||||||
],
|
|
||||||
"group": {
|
|
||||||
"kind": "build",
|
|
||||||
"isDefault": true
|
|
||||||
},
|
|
||||||
"detail": "compiler: /usr/bin/g++"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
9
default.gcw0.desktop
Normal file
9
default.gcw0.desktop
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Type=Application
|
||||||
|
Name=Coffee Crisis
|
||||||
|
Comment=Coffee Crisis
|
||||||
|
Icon=icon
|
||||||
|
Exec=bin/coffee_crisis
|
||||||
|
Categories=games;Game;SDL;
|
||||||
|
Terminal=false
|
||||||
7
generate_opendingux
Executable file
7
generate_opendingux
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
mkdir -p bin
|
||||||
|
cd source
|
||||||
|
/opt/gcw0-toolchain/usr/bin/mipsel-linux-g++ -g -D_GCWZERO -O2 -I/opt/gcw0-toolchain/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/include/SDL2 -D_GNU_SOURCE=1 -D_REENTRANT -lSDL2 -lSDL2_mixer -std=c++11 *.cpp -o ../bin/coffee_crisis
|
||||||
|
cd ..
|
||||||
|
/opt/gcw0-toolchain/usr/bin/mksquashfs ./default.gcw0.desktop ./icon.png ./bin ./data ./media coffee_crisis.opk -all-root -noappend -no-exports -no-xattrs
|
||||||
BIN
media/.DS_Store
vendored
BIN
media/.DS_Store
vendored
Binary file not shown.
BIN
media/sound/clock.wav
Normal file
BIN
media/sound/clock.wav
Normal file
Binary file not shown.
@@ -57,3 +57,7 @@ JailDoctor
|
|||||||
|
|
||||||
bubble4.wav
|
bubble4.wav
|
||||||
JailDoctor
|
JailDoctor
|
||||||
|
|
||||||
|
clock.wav
|
||||||
|
kenney_digitalaudio/switch2.ogg
|
||||||
|
www.kenney.nl
|
||||||
@@ -38,8 +38,9 @@
|
|||||||
#define SOUND_PLAYER_COLLISION 13
|
#define SOUND_PLAYER_COLLISION 13
|
||||||
#define SOUND_STAGE_CHANGE 14
|
#define SOUND_STAGE_CHANGE 14
|
||||||
#define SOUND_TITLE 15
|
#define SOUND_TITLE 15
|
||||||
|
#define SOUND_CLOCK 16
|
||||||
|
|
||||||
#define TOTAL_SOUND 16
|
#define TOTAL_SOUND 17
|
||||||
|
|
||||||
#define TEXTURE_BALLOON 0
|
#define TEXTURE_BALLOON 0
|
||||||
#define TEXTURE_BULLET 1
|
#define TEXTURE_BULLET 1
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "gamedirector.h"
|
#include "gamedirector.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#ifdef __MIPSEL__
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
const Uint8 *keystates;
|
const Uint8 *keystates;
|
||||||
float mSin[360]; // Vector con los valores del seno para 360 grados
|
float mSin[360]; // Vector con los valores del seno para 360 grados
|
||||||
@@ -41,6 +45,18 @@ GameDirector::GameDirector(std::string path)
|
|||||||
// Inicializa JailAudio
|
// Inicializa JailAudio
|
||||||
initJailAudio();
|
initJailAudio();
|
||||||
|
|
||||||
|
#ifdef __MIPSEL__
|
||||||
|
DIR *dir = opendir("/media/data/local/home/.coffee_crisis");
|
||||||
|
if (dir)
|
||||||
|
{
|
||||||
|
closedir(dir);
|
||||||
|
}
|
||||||
|
else if (ENOENT == errno)
|
||||||
|
{
|
||||||
|
int status = mkdir("/media/data/local/home/.coffee_crisis", 755);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Carga recursos
|
// Carga recursos
|
||||||
loadMediaProg();
|
loadMediaProg();
|
||||||
loadScoreFile();
|
loadScoreFile();
|
||||||
@@ -129,9 +145,15 @@ void GameDirector::initProg()
|
|||||||
mProg.keyboard.right = SDL_SCANCODE_RIGHT;
|
mProg.keyboard.right = SDL_SCANCODE_RIGHT;
|
||||||
mProg.keyboard.accept = SDL_SCANCODE_RETURN;
|
mProg.keyboard.accept = SDL_SCANCODE_RETURN;
|
||||||
mProg.keyboard.cancel = SDL_SCANCODE_ESCAPE;
|
mProg.keyboard.cancel = SDL_SCANCODE_ESCAPE;
|
||||||
|
#ifdef __MIPSEL__
|
||||||
|
mProg.keyboard.fire = SDL_SCANCODE_SPACE;
|
||||||
|
mProg.keyboard.fireLeft = SDL_SCANCODE_LSHIFT;
|
||||||
|
mProg.keyboard.fireRight = SDL_SCANCODE_LCTRL;
|
||||||
|
#else
|
||||||
mProg.keyboard.fire = SDL_SCANCODE_W;
|
mProg.keyboard.fire = SDL_SCANCODE_W;
|
||||||
mProg.keyboard.fireLeft = SDL_SCANCODE_Q;
|
mProg.keyboard.fireLeft = SDL_SCANCODE_Q;
|
||||||
mProg.keyboard.fireRight = SDL_SCANCODE_E;
|
mProg.keyboard.fireRight = SDL_SCANCODE_E;
|
||||||
|
#endif
|
||||||
mProg.keyboard.pause = SDL_SCANCODE_ESCAPE;
|
mProg.keyboard.pause = SDL_SCANCODE_ESCAPE;
|
||||||
mProg.keyboard.escape = SDL_SCANCODE_ESCAPE;
|
mProg.keyboard.escape = SDL_SCANCODE_ESCAPE;
|
||||||
|
|
||||||
@@ -1023,6 +1045,7 @@ bool GameDirector::loadMediaGame()
|
|||||||
mSound[SOUND_BUBBLE2].sound = JA_LoadSound(mSound[SOUND_BUBBLE2].file.c_str());
|
mSound[SOUND_BUBBLE2].sound = JA_LoadSound(mSound[SOUND_BUBBLE2].file.c_str());
|
||||||
mSound[SOUND_BUBBLE3].sound = JA_LoadSound(mSound[SOUND_BUBBLE3].file.c_str());
|
mSound[SOUND_BUBBLE3].sound = JA_LoadSound(mSound[SOUND_BUBBLE3].file.c_str());
|
||||||
mSound[SOUND_BUBBLE4].sound = JA_LoadSound(mSound[SOUND_BUBBLE4].file.c_str());
|
mSound[SOUND_BUBBLE4].sound = JA_LoadSound(mSound[SOUND_BUBBLE4].file.c_str());
|
||||||
|
mSound[SOUND_CLOCK].sound = JA_LoadSound(mSound[SOUND_CLOCK].file.c_str());
|
||||||
|
|
||||||
// Musicas
|
// Musicas
|
||||||
mMusic[MUSIC_PLAYING].music = JA_LoadMusic(mMusic[MUSIC_PLAYING].file.c_str());
|
mMusic[MUSIC_PLAYING].music = JA_LoadMusic(mMusic[MUSIC_PLAYING].file.c_str());
|
||||||
@@ -1057,6 +1080,7 @@ void GameDirector::quitGame()
|
|||||||
JA_DeleteSound(mSound[SOUND_BUBBLE2].sound);
|
JA_DeleteSound(mSound[SOUND_BUBBLE2].sound);
|
||||||
JA_DeleteSound(mSound[SOUND_BUBBLE3].sound);
|
JA_DeleteSound(mSound[SOUND_BUBBLE3].sound);
|
||||||
JA_DeleteSound(mSound[SOUND_BUBBLE4].sound);
|
JA_DeleteSound(mSound[SOUND_BUBBLE4].sound);
|
||||||
|
JA_DeleteSound(mSound[SOUND_CLOCK].sound);
|
||||||
|
|
||||||
// Musicas
|
// Musicas
|
||||||
JA_DeleteMusic(mMusic[MUSIC_PLAYING].music);
|
JA_DeleteMusic(mMusic[MUSIC_PLAYING].music);
|
||||||
@@ -1132,9 +1156,15 @@ void GameDirector::quitGame()
|
|||||||
void GameDirector::setFileList()
|
void GameDirector::setFileList()
|
||||||
{
|
{
|
||||||
// Ficheros binarios
|
// Ficheros binarios
|
||||||
|
#ifdef __MIPSEL__
|
||||||
|
mBinFile[BINFILE_SCORE].file = "/media/data/local/home/.coffee_crisis/score.bin";
|
||||||
|
mBinFile[BINFILE_DEMO].file = "/media/data/local/home/.coffee_crisis/demo.bin";
|
||||||
|
mBinFile[BINFILE_CONFIG].file = "/media/data/local/home/.coffee_crisis/config.bin";
|
||||||
|
#else
|
||||||
mBinFile[BINFILE_SCORE].file = mProg.executablePath + "/" + "../data/score.bin";
|
mBinFile[BINFILE_SCORE].file = mProg.executablePath + "/" + "../data/score.bin";
|
||||||
mBinFile[BINFILE_DEMO].file = mProg.executablePath + "/" + "../data/demo.bin";
|
mBinFile[BINFILE_DEMO].file = mProg.executablePath + "/" + "../data/demo.bin";
|
||||||
mBinFile[BINFILE_CONFIG].file = mProg.executablePath + "/" + "../data/config.bin";
|
mBinFile[BINFILE_CONFIG].file = mProg.executablePath + "/" + "../data/config.bin";
|
||||||
|
#endif
|
||||||
|
|
||||||
// Musicas
|
// Musicas
|
||||||
mMusic[MUSIC_INTRO].file = mProg.executablePath + "/" + "../media/music/intro.ogg";
|
mMusic[MUSIC_INTRO].file = mProg.executablePath + "/" + "../media/music/intro.ogg";
|
||||||
@@ -1158,6 +1188,7 @@ void GameDirector::setFileList()
|
|||||||
mSound[SOUND_PLAYER_COLLISION].file = mProg.executablePath + "/" + "../media/sound/player_collision.wav";
|
mSound[SOUND_PLAYER_COLLISION].file = mProg.executablePath + "/" + "../media/sound/player_collision.wav";
|
||||||
mSound[SOUND_STAGE_CHANGE].file = mProg.executablePath + "/" + "../media/sound/stage_change.wav";
|
mSound[SOUND_STAGE_CHANGE].file = mProg.executablePath + "/" + "../media/sound/stage_change.wav";
|
||||||
mSound[SOUND_TITLE].file = mProg.executablePath + "/" + "../media/sound/title.wav";
|
mSound[SOUND_TITLE].file = mProg.executablePath + "/" + "../media/sound/title.wav";
|
||||||
|
mSound[SOUND_CLOCK].file = mProg.executablePath + "/" + "../media/sound/clock.wav";
|
||||||
|
|
||||||
// Texturas
|
// Texturas
|
||||||
mTexture[TEXTURE_BALLOON].file = mProg.executablePath + "/" + "../media/gfx/balloon.png";
|
mTexture[TEXTURE_BALLOON].file = mProg.executablePath + "/" + "../media/gfx/balloon.png";
|
||||||
@@ -3019,7 +3050,7 @@ void GameDirector::resetItems()
|
|||||||
// Devuelve un item en función del azar
|
// Devuelve un item en función del azar
|
||||||
Uint8 GameDirector::dropItem()
|
Uint8 GameDirector::dropItem()
|
||||||
{
|
{
|
||||||
//return ITEM_COFFEE;
|
return ITEM_COFFEE;
|
||||||
|
|
||||||
Uint8 luckyNumber = rand() % 99;
|
Uint8 luckyNumber = rand() % 99;
|
||||||
Uint8 item = rand() % 7;
|
Uint8 item = rand() % 7;
|
||||||
@@ -3127,6 +3158,9 @@ void GameDirector::throwCoffee(int x, int y)
|
|||||||
mGame.smartSprite[index]->setEnabled(true);
|
mGame.smartSprite[index]->setEnabled(true);
|
||||||
mGame.smartSprite[index]->setEnabledTimer(1);
|
mGame.smartSprite[index]->setEnabledTimer(1);
|
||||||
mGame.smartSprite[index]->setSpriteClip(80, 16, 16, 16);
|
mGame.smartSprite[index]->setSpriteClip(80, 16, 16, 16);
|
||||||
|
mGame.smartSprite[index]->setRotate(true);
|
||||||
|
mGame.smartSprite[index]->setRotateSpeed(1);
|
||||||
|
mGame.smartSprite[index]->setRotateAmount(5.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
||||||
@@ -3986,6 +4020,17 @@ void GameDirector::renderMessages()
|
|||||||
mText.black->writeCentered(PLAY_AREA_CENTER_X + 1, PLAY_AREA_FIRST_QUARTER_Y + 1, "Time Stopped: " + std::to_string(mGame.timeStoppedCounter / 10));
|
mText.black->writeCentered(PLAY_AREA_CENTER_X + 1, PLAY_AREA_FIRST_QUARTER_Y + 1, "Time Stopped: " + std::to_string(mGame.timeStoppedCounter / 10));
|
||||||
mText.white->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_FIRST_QUARTER_Y, "Time Stopped: " + std::to_string(mGame.timeStoppedCounter / 10));
|
mText.white->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_FIRST_QUARTER_Y, "Time Stopped: " + std::to_string(mGame.timeStoppedCounter / 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mGame.timeStoppedCounter > 100)
|
||||||
|
{
|
||||||
|
if (mGame.timeStoppedCounter % 30 == 0)
|
||||||
|
JA_PlaySound(mSound[SOUND_CLOCK].sound, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mGame.timeStoppedCounter % 15 == 0)
|
||||||
|
JA_PlaySound(mSound[SOUND_CLOCK].sound, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// D E M O
|
// D E M O
|
||||||
@@ -4248,7 +4293,7 @@ void GameDirector::runIntro()
|
|||||||
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
||||||
{
|
{
|
||||||
// Reproduce la música
|
// Reproduce la música
|
||||||
JA_PlayMusic(mMusic[MUSIC_INTRO].music, false);
|
JA_PlayMusic(mMusic[MUSIC_INTRO].music, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((mProg.section == PROG_SECTION_INTRO) && (!exit()))
|
while ((mProg.section == PROG_SECTION_INTRO) && (!exit()))
|
||||||
@@ -4543,7 +4588,7 @@ void GameDirector::runTitle(Uint8 subsection)
|
|||||||
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
||||||
{
|
{
|
||||||
// Reproduce la música
|
// Reproduce la música
|
||||||
JA_PlayMusic(mMusic[MUSIC_TITLE].music, true);
|
JA_PlayMusic(mMusic[MUSIC_TITLE].music, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calcula la lógica de los objetos
|
// Calcula la lógica de los objetos
|
||||||
@@ -4745,7 +4790,7 @@ void GameDirector::runGame()
|
|||||||
{
|
{
|
||||||
// Reproduce la música
|
// Reproduce la música
|
||||||
if (mGame.player->isAlive())
|
if (mGame.player->isAlive())
|
||||||
JA_PlayMusic(mMusic[MUSIC_PLAYING].music, true);
|
JA_PlayMusic(mMusic[MUSIC_PLAYING].music, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||||
|
|||||||
@@ -11,7 +11,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#include "/usr/include/SDL2/SDL.h"
|
#ifdef __MIPSEL__
|
||||||
|
#include "SDL.h"
|
||||||
|
#else
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define UNUSED
|
#define UNUSED
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
|
#ifndef __MIPSEL__
|
||||||
#include "jail_audio.h"
|
#include "jail_audio.h"
|
||||||
#include "stb_vorbis.c"
|
#include "stb_vorbis.c"
|
||||||
//#include <SDL2/SDL.h>
|
|
||||||
|
|
||||||
#define JA_MAX_SIMULTANEOUS_CHANNELS 5
|
#define JA_MAX_SIMULTANEOUS_CHANNELS 5
|
||||||
|
|
||||||
@@ -210,4 +210,4 @@ JA_Channel_state JA_GetChannelState(const int channel) {
|
|||||||
if (channel < 0 || channel >= JA_MAX_SIMULTANEOUS_CHANNELS) return JA_CHANNEL_INVALID;
|
if (channel < 0 || channel >= JA_MAX_SIMULTANEOUS_CHANNELS) return JA_CHANNEL_INVALID;
|
||||||
return channels[channel].state;
|
return channels[channel].state;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
106
source/jail_audio_mipsel.cpp
Normal file
106
source/jail_audio_mipsel.cpp
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
#ifdef __MIPSEL__
|
||||||
|
#include "jail_audio.h"
|
||||||
|
#include "SDL_mixer.h"
|
||||||
|
|
||||||
|
struct JA_Sound_t {
|
||||||
|
Mix_Chunk *mix_chunk;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct JA_Music_t {
|
||||||
|
Mix_Music* mix_music;
|
||||||
|
};
|
||||||
|
|
||||||
|
JA_Music current_music{NULL};
|
||||||
|
|
||||||
|
void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) {
|
||||||
|
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024);
|
||||||
|
Mix_AllocateChannels(8);
|
||||||
|
}
|
||||||
|
|
||||||
|
JA_Music JA_LoadMusic(const char* filename) {
|
||||||
|
int chan, samplerate;
|
||||||
|
JA_Music music = new JA_Music_t();
|
||||||
|
music->mix_music = Mix_LoadMUS(filename);
|
||||||
|
return music;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_PlayMusic(JA_Music music, const int loop) {
|
||||||
|
if (current_music == music) return;
|
||||||
|
if (current_music != NULL) {
|
||||||
|
Mix_HaltMusic();
|
||||||
|
}
|
||||||
|
current_music = music;
|
||||||
|
Mix_PlayMusic(music->mix_music, loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_PauseMusic() {
|
||||||
|
Mix_PauseMusic();
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_ResumeMusic() {
|
||||||
|
Mix_ResumeMusic();
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_StopMusic() {
|
||||||
|
Mix_HaltMusic();
|
||||||
|
}
|
||||||
|
|
||||||
|
JA_Music_state JA_GetMusicState() {
|
||||||
|
if (current_music == NULL) return JA_MUSIC_INVALID;
|
||||||
|
if (Mix_PausedMusic()) {
|
||||||
|
return JA_MUSIC_PAUSED;
|
||||||
|
} else if (Mix_PlayingMusic()) {
|
||||||
|
return JA_MUSIC_PLAYING;
|
||||||
|
} else {
|
||||||
|
return JA_MUSIC_STOPPED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_DeleteMusic(JA_Music music) {
|
||||||
|
if (current_music == music) {
|
||||||
|
Mix_HaltMusic();
|
||||||
|
current_music = NULL;
|
||||||
|
}
|
||||||
|
Mix_FreeMusic(music->mix_music);
|
||||||
|
delete music;
|
||||||
|
}
|
||||||
|
|
||||||
|
JA_Sound JA_LoadSound(const char* filename) {
|
||||||
|
JA_Sound sound = new JA_Sound_t();
|
||||||
|
sound->mix_chunk = Mix_LoadWAV(filename);
|
||||||
|
return sound;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JA_PlaySound(JA_Sound sound, const int loop) {
|
||||||
|
int channel = Mix_PlayChannel(-1, sound->mix_chunk, loop);
|
||||||
|
return channel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_DeleteSound(JA_Sound sound) {
|
||||||
|
Mix_FreeChunk(sound->mix_chunk);
|
||||||
|
delete sound;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_PauseChannel(const int channel) {
|
||||||
|
Mix_Pause(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_ResumeChannel(const int channel) {
|
||||||
|
Mix_Resume(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JA_StopChannel(const int channel) {
|
||||||
|
Mix_HaltChannel(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
JA_Channel_state JA_GetChannelState(const int channel) {
|
||||||
|
if (Mix_Paused(channel)) {
|
||||||
|
return JA_CHANNEL_PAUSED;
|
||||||
|
} else if (Mix_Playing(channel)) {
|
||||||
|
return JA_CHANNEL_PLAYING;
|
||||||
|
} else {
|
||||||
|
return JA_CHANNEL_FREE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -37,6 +37,9 @@ void MovingSprite::init(float x, float y, int w, int h, float velx, float vely,
|
|||||||
setZoomW(1);
|
setZoomW(1);
|
||||||
setZoomH(1);
|
setZoomH(1);
|
||||||
|
|
||||||
|
// Establece el angulo con el que se dibujará
|
||||||
|
setAngle(0.0);
|
||||||
|
|
||||||
// Establece la textura donde están los gráficos para el sprite
|
// Establece la textura donde están los gráficos para el sprite
|
||||||
setTexture(texture);
|
setTexture(texture);
|
||||||
|
|
||||||
@@ -61,57 +64,63 @@ void MovingSprite::move()
|
|||||||
void MovingSprite::render()
|
void MovingSprite::render()
|
||||||
{
|
{
|
||||||
//mTexture->render(mRenderer, (int)mPosX, (int)mPosY, &mSpriteClip);
|
//mTexture->render(mRenderer, (int)mPosX, (int)mPosY, &mSpriteClip);
|
||||||
mTexture->render(mRenderer, (int)mPosX, (int)mPosY, &mSpriteClip, mZoomW, mZoomH);
|
mTexture->render(mRenderer, (int)mPosX, (int)mPosY, &mSpriteClip, mZoomW, mZoomH, mAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getPosX()
|
float MovingSprite::getPosX()
|
||||||
{
|
{
|
||||||
return mPosX;
|
return mPosX;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getPosY()
|
float MovingSprite::getPosY()
|
||||||
{
|
{
|
||||||
return mPosY;
|
return mPosY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getVelX()
|
float MovingSprite::getVelX()
|
||||||
{
|
{
|
||||||
return mVelX;
|
return mVelX;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getVelY()
|
float MovingSprite::getVelY()
|
||||||
{
|
{
|
||||||
return mVelY;
|
return mVelY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getAccelX()
|
float MovingSprite::getAccelX()
|
||||||
{
|
{
|
||||||
return mAccelX;
|
return mAccelX;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getAccelY()
|
float MovingSprite::getAccelY()
|
||||||
{
|
{
|
||||||
return mAccelY;
|
return mAccelY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getZoomW()
|
float MovingSprite::getZoomW()
|
||||||
{
|
{
|
||||||
return mZoomW;
|
return mZoomW;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
float MovingSprite::getZoomH()
|
float MovingSprite::getZoomH()
|
||||||
{
|
{
|
||||||
return mZoomH;
|
return mZoomH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
double MovingSprite::getAngle()
|
||||||
|
{
|
||||||
|
return mAngle;
|
||||||
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
void MovingSprite::setPosX(float x)
|
void MovingSprite::setPosX(float x)
|
||||||
{
|
{
|
||||||
@@ -159,3 +168,21 @@ void MovingSprite::setZoomH(float h)
|
|||||||
{
|
{
|
||||||
mZoomH = h;
|
mZoomH = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void MovingSprite::setAngle(double a)
|
||||||
|
{
|
||||||
|
mAngle = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Incrementa el valor de la variable
|
||||||
|
void MovingSprite::incAngle(double inc)
|
||||||
|
{
|
||||||
|
mAngle += inc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decrementa el valor de la variable
|
||||||
|
void MovingSprite::decAngle(double dec)
|
||||||
|
{
|
||||||
|
mAngle -= dec;
|
||||||
|
}
|
||||||
@@ -21,6 +21,8 @@ private:
|
|||||||
float mZoomW; // Zoom aplicado a la anchura
|
float mZoomW; // Zoom aplicado a la anchura
|
||||||
float mZoomH; // Zoom aplicado a la altura
|
float mZoomH; // Zoom aplicado a la altura
|
||||||
|
|
||||||
|
double mAngle; // Angulo para dibujarlo
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
MovingSprite();
|
MovingSprite();
|
||||||
@@ -61,6 +63,9 @@ public:
|
|||||||
// Obten el valor de la variable
|
// Obten el valor de la variable
|
||||||
float getZoomH();
|
float getZoomH();
|
||||||
|
|
||||||
|
// Obten el valor de la variable
|
||||||
|
double getAngle();
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
void setPosX(float x);
|
void setPosX(float x);
|
||||||
|
|
||||||
@@ -84,6 +89,15 @@ public:
|
|||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
void setZoomH(float h);
|
void setZoomH(float h);
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void setAngle(double a);
|
||||||
|
|
||||||
|
// Incrementa el valor de la variable
|
||||||
|
void incAngle(double inc);
|
||||||
|
|
||||||
|
// Decrementa el valor de la variable
|
||||||
|
void decAngle(double dec);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -38,6 +38,12 @@ void SmartSprite::init(LTexture *texture, SDL_Renderer *renderer)
|
|||||||
mDestX = 0;
|
mDestX = 0;
|
||||||
mDestY = 0;
|
mDestY = 0;
|
||||||
|
|
||||||
|
setRotate(false);
|
||||||
|
setRotateSpeed(0);
|
||||||
|
setRotateAmount(0.0);
|
||||||
|
|
||||||
|
mCounter = 0;
|
||||||
|
|
||||||
// El Id siempre es >=0, por lo tanto si no se le asigna Id se queda en negativo
|
// El Id siempre es >=0, por lo tanto si no se le asigna Id se queda en negativo
|
||||||
mId = -1;
|
mId = -1;
|
||||||
|
|
||||||
@@ -65,13 +71,13 @@ void SmartSprite::setEnabled(bool state)
|
|||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
Uint16 SmartSprite::getEnabledTimer()
|
Uint16 SmartSprite::getEnabledTimer()
|
||||||
{
|
{
|
||||||
return mEnabledTimer;
|
return mEnabledCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
void SmartSprite::setEnabledTimer(Uint16 time)
|
void SmartSprite::setEnabledTimer(Uint16 time)
|
||||||
{
|
{
|
||||||
mEnabledTimer = time;
|
mEnabledCounter = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
@@ -86,6 +92,24 @@ void SmartSprite::setDestY(int value)
|
|||||||
mDestY = value;
|
mDestY = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void SmartSprite::setRotate(bool value)
|
||||||
|
{
|
||||||
|
mRotate = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void SmartSprite::setRotateSpeed(Uint16 value)
|
||||||
|
{
|
||||||
|
mRotateSpeed = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void SmartSprite::setRotateAmount(double value)
|
||||||
|
{
|
||||||
|
mRotateAmount = value;
|
||||||
|
}
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
int SmartSprite::getDestX()
|
int SmartSprite::getDestX()
|
||||||
{
|
{
|
||||||
@@ -98,12 +122,37 @@ int SmartSprite::getDestY()
|
|||||||
return mDestY;
|
return mDestY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
bool SmartSprite::getRotate()
|
||||||
|
{
|
||||||
|
return mRotate;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
Uint16 SmartSprite::getRotateSpeed()
|
||||||
|
{
|
||||||
|
return mRotateSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece la rotacion
|
||||||
|
void SmartSprite::rotate()
|
||||||
|
{
|
||||||
|
if (mRotate)
|
||||||
|
{
|
||||||
|
if (mCounter % mRotateSpeed == 0)
|
||||||
|
{
|
||||||
|
incAngle(mRotateAmount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Actualiza la posición y comprueba si ha llegado a su destino
|
// Actualiza la posición y comprueba si ha llegado a su destino
|
||||||
bool SmartSprite::update()
|
bool SmartSprite::update()
|
||||||
{
|
{
|
||||||
if (mEnabled)
|
if (mEnabled)
|
||||||
{
|
{
|
||||||
move();
|
move();
|
||||||
|
rotate();
|
||||||
|
|
||||||
// Comprueba si se desplaza en el eje X hacia la derecha
|
// Comprueba si se desplaza en el eje X hacia la derecha
|
||||||
if ((getAccelX() > 0) || ((getAccelX() == 0) && (getVelX() > 0)))
|
if ((getAccelX() > 0) || ((getAccelX() == 0) && (getVelX() > 0)))
|
||||||
@@ -178,12 +227,12 @@ bool SmartSprite::update()
|
|||||||
if (mIsOnDestination)
|
if (mIsOnDestination)
|
||||||
{
|
{
|
||||||
// Si el contador es mayor que cero, lo decrementa
|
// Si el contador es mayor que cero, lo decrementa
|
||||||
if (mEnabledTimer > 0)
|
if (mEnabledCounter > 0)
|
||||||
{
|
{
|
||||||
--mEnabledTimer;
|
--mEnabledCounter;
|
||||||
}
|
}
|
||||||
// Si ha llegado a cero, deshabilita el objeto o manda el aviso en función de si tiene Id
|
// Si ha llegado a cero, deshabilita el objeto o manda el aviso en función de si tiene Id
|
||||||
else if (mEnabledTimer == 0)
|
else if (mEnabledCounter == 0)
|
||||||
{
|
{
|
||||||
if (mId < 0)
|
if (mId < 0)
|
||||||
{
|
{
|
||||||
@@ -195,6 +244,9 @@ bool SmartSprite::update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCounter++;
|
||||||
|
mCounter %= 65000;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mIsOnDestination;
|
return mIsOnDestination;
|
||||||
|
|||||||
@@ -8,6 +8,19 @@
|
|||||||
// Clase SmartSprite
|
// Clase SmartSprite
|
||||||
class SmartSprite : public AnimatedSprite
|
class SmartSprite : public AnimatedSprite
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
bool mEnabled; // Indica si esta habilitado
|
||||||
|
bool mIsOnDestination; // Indica si está en el destino
|
||||||
|
bool mRotate; // Indica si ha de rotar
|
||||||
|
int mDestX; // Posicion de destino en el eje X
|
||||||
|
int mDestY; // Posicion de destino en el eje Y
|
||||||
|
int mId; // Identificador
|
||||||
|
Uint16 mCounter; // Contador interno
|
||||||
|
Uint16 mEnabledCounter; // Contador para deshabilitarlo
|
||||||
|
Uint16 mRotateSpeed; // Velocidad de giro
|
||||||
|
Uint8 *mIntroEvents; // Dirección del array de eventos donde notificar el estado
|
||||||
|
double mRotateAmount; // Cantidad de grados a girar en cada iteración
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
SmartSprite();
|
SmartSprite();
|
||||||
@@ -39,12 +52,30 @@ public:
|
|||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
void setDestY(int value);
|
void setDestY(int value);
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void setRotate(bool value);
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void setRotateSpeed(Uint16 value);
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void setRotateAmount(double value);
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
int getDestX();
|
int getDestX();
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
int getDestY();
|
int getDestY();
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
bool getRotate();
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
Uint16 getRotateSpeed();
|
||||||
|
|
||||||
|
// Establece la rotacion
|
||||||
|
void rotate();
|
||||||
|
|
||||||
// Actualiza la posición y comprueba si ha llegado a su destino
|
// Actualiza la posición y comprueba si ha llegado a su destino
|
||||||
bool update();
|
bool update();
|
||||||
|
|
||||||
@@ -59,26 +90,6 @@ public:
|
|||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
void setIntroEvents(Uint8 *value);
|
void setIntroEvents(Uint8 *value);
|
||||||
|
|
||||||
private:
|
|
||||||
// Indica si esta habilitado
|
|
||||||
bool mEnabled;
|
|
||||||
|
|
||||||
// Contador
|
|
||||||
Uint16 mEnabledTimer;
|
|
||||||
|
|
||||||
// Indica si está en el destino
|
|
||||||
bool mIsOnDestination;
|
|
||||||
|
|
||||||
// Posicion de destino
|
|
||||||
int mDestX;
|
|
||||||
int mDestY;
|
|
||||||
|
|
||||||
// Identificador
|
|
||||||
int mId;
|
|
||||||
|
|
||||||
// Dirección del array de eventos donde notificar el estado
|
|
||||||
Uint8 *mIntroEvents;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
6
sync.sh
6
sync.sh
@@ -26,11 +26,11 @@ fi
|
|||||||
# UPLOAD
|
# UPLOAD
|
||||||
if [ "$1" = upload ] || [ "$1" = UPLOAD ]; then
|
if [ "$1" = upload ] || [ "$1" = UPLOAD ]; then
|
||||||
printf "\n%s\n" "uploading $PROJECT"
|
printf "\n%s\n" "uploading $PROJECT"
|
||||||
rsync -azmPu --delete -e 'ssh -p 4545' . sergio@sustancia.synology.me:/home/sergio/backup/code/$PROJECT/
|
rsync -avzmPu --delete -e 'ssh -p 4545' . sergio@sustancia.synology.me:/home/sergio/backup/code/$PROJECT/
|
||||||
rsync -azmPu -e 'ssh -p 4545' . sergio@sustancia.synology.me:/home/sergio/backup/code/$PROJECT.all/
|
rsync -avzmPu -e 'ssh -p 4545' . sergio@sustancia.synology.me:/home/sergio/backup/code/$PROJECT.all/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = download ] || [ "$1" = DOWNLOAD ]; then
|
if [ "$1" = download ] || [ "$1" = DOWNLOAD ]; then
|
||||||
printf "%s\n" "downloading $PROJECT"
|
printf "%s\n" "downloading $PROJECT"
|
||||||
rsync -azmP --delete -e 'ssh -p 4545' sergio@sustancia.synology.me:/home/sergio/backup/code/$PROJECT/* .
|
rsync -avzmP --delete -e 'ssh -p 4545' sergio@sustancia.synology.me:/home/sergio/backup/code/$PROJECT/* .
|
||||||
fi
|
fi
|
||||||
Reference in New Issue
Block a user