Skip to content

Commit

Permalink
Filled missing animinterface functions, added necessary parts for cbe…
Browse files Browse the repository at this point in the history
…nchanted.cpp, gfxinterface.cpp to make animinterface working.
  • Loading branch information
MaGetzUb committed Jul 31, 2017
1 parent 03d657d commit c45d3a6
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 8 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ test.exe
/visual studio/Release
/visual studio/Debug
/visual studio/CodeAnalyst
/vs2017/


CMakeLists.txt.user*
build/
Expand Down
61 changes: 54 additions & 7 deletions src/animinterface.cpp
Original file line number Diff line number Diff line change
@@ -1,38 +1,85 @@
#include "precomp.h"
#include "cbenchanted.h"
#include "soundinterface.h"
#include "variablestack.h"
#include "animinterface.h"
#include "debug.h"
#include "errorsystem.h"

#include <allegro5/allegro.h>
#include <allegro5/allegro_video.h>


#ifndef CBE_LIB
AnimInterface::AnimInterface() {

mCBInstance = CBEnchanted::instance();

}

AnimInterface::~AnimInterface() {

}

bool AnimInterface::initializeAnimInterface() {
return al_init_video_addon();
}

void AnimInterface::commandStopAnimation(void) {
STUB;
if(mVideo) al_close_video(mVideo);
mVideo = nullptr;
}

void AnimInterface::commandDrawAnimation(void) {
STUB;
al_draw_scaled_bitmap(mCurrentFrame, 0, 0, mVideoWidth, mVideoHeight, 0, 0, mScaleX, mScaleY, 0);
}

void AnimInterface::functionPlayAnimation(void) {
STUB;
ISString input = mCBInstance->popValue().toString();
if(input.empty()) {
mCBInstance->errors->createError("Cannot play animation! Given path is empty!");
}

if(mVideo) al_close_video(mVideo);

std::string path = input.getStdString();
mVideo = al_open_video(path.c_str());
al_register_event_source(mCBInstance->getEventQueue(), al_get_video_event_source(mVideo));
if(mVideo == nullptr) {
mCBInstance->pushValue((int)0);
return;
}

al_start_video(mVideo, mCBInstance->soundInterface->getMixer());
}

void AnimInterface::functionAnimationWidth(void) {
STUB;
if(mVideo) {
mCBInstance->pushValue((int)((float)mVideoWidth * mScaleX));
return;
}
mCBInstance->errors->createFatalError("There isn't video playing!");
mCBInstance->pushValue((int)0);
}

void AnimInterface::functionAnimationHeight(void) {
STUB;
if(mVideo) {
mCBInstance->pushValue((int)((float)mVideoWidth * mScaleX));
return;
}
mCBInstance->errors->createFatalError("There isn't video playing!");
mCBInstance->pushValue((int)0);
}

void AnimInterface::functionAnimationPlaying(void) {
STUB;
mCBInstance->pushValue((int)(mVideo != nullptr));
}

void AnimInterface::acquireNewFrame() {
mCurrentFrame = al_get_video_frame(mVideo);
mScaleX = al_get_video_scaled_width(mVideo);
mScaleY = al_get_video_scaled_height(mVideo);
mVideoWidth = 1.0f * al_get_bitmap_width(mCurrentFrame);
mVideoHeight = 1.0f * al_get_bitmap_height(mCurrentFrame);
}

#endif
16 changes: 16 additions & 0 deletions src/animinterface.h
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
#ifndef ANIMINTERFACE_H
#define ANIMINTERFACE_H



struct ALLEGRO_VIDEO;
class CBEnchanted;

class AnimInterface {
//Note(everyone): From now on (31.7.2017) we should probably start using some member convention.
#ifndef CBE_LIB
ALLEGRO_VIDEO* mVideo = nullptr;
CBEnchanted* mCBInstance = nullptr;
ALLEGRO_BITMAP* mCurrentFrame = nullptr;
int mVideoWidth = 0, mVideoHeight = 0;
float mScaleX = 1.0f, mScaleY = 1.0f;
#endif
public:
#ifndef CBE_LIB
AnimInterface();
~AnimInterface();

bool initializeAnimInterface();

void commandStopAnimation(void);
void commandDrawAnimation(void);

void functionPlayAnimation(void);
void functionAnimationWidth(void);
void functionAnimationHeight(void);
void functionAnimationPlaying(void);
void acquireNewFrame();
#endif
};

Expand Down
4 changes: 4 additions & 0 deletions src/cbenchanted.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,10 @@ bool CBEnchanted::init(const char* file, int argc, char** argv) {
errors->createFatalError("Initialization error", "Failed to initialize fonts");
return false;
}
if(!animInterface->initializeAnimInterface()) {
errors->createFatalError("Initialization error", "Failed to initialize animations!");
return false;
}
imageInterface->initializeImages();
sysInterface->initializeSysInterface();

Expand Down
8 changes: 8 additions & 0 deletions src/gfxinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
#include "soundinterface.h"
#include "sysinterface.h"
#include "imageinterface.h"
#include "animinterface.h"
#include "sysinterface.h"
#include "cbimage.h"
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_video.h>
#include "util.h"
#include "errorsystem.h"
#include <iostream>
Expand Down Expand Up @@ -343,6 +345,12 @@ void GfxInterface::commandDrawScreen(void) {
windowResized = true;
}
break;
case ALLEGRO_EVENT_VIDEO_FRAME_SHOW:
cb->animInterface->acquireNewFrame();
break;
case ALLEGRO_EVENT_VIDEO_FINISHED:
cb->animInterface->commandStopAnimation();
break;
}
}
if (windowResized) al_acknowledge_resize(window);
Expand Down
2 changes: 1 addition & 1 deletion src/precomp.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef PRECOMP_H
#define PRECOMP_H

#ifdef WIN32
#if (defined(WIN32) || defined(_WIN32))
#include <Windows.h>
#endif
#include <map>
Expand Down

0 comments on commit c45d3a6

Please sign in to comment.