Switched scene update to state event
This commit is contained in:
@ -36,8 +36,8 @@ void Scene::update() {
|
|||||||
// TODO: Cleanup old scene items
|
// TODO: Cleanup old scene items
|
||||||
|
|
||||||
// TODO: Tick scene items(?)
|
// TODO: Tick scene items(?)
|
||||||
this->eventSceneUpdate.invoke();
|
this->eventSceneUpdate.invoke(game->timeManager.delta);
|
||||||
if(!this->game->timeManager.isPaused) this->eventSceneUnpausedUpdate.invoke();
|
if(!this->game->timeManager.isPaused) this->eventSceneUnpausedUpdate.invoke(game->timeManager.delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneItem * Scene::createSceneItem() {
|
SceneItem * Scene::createSceneItem() {
|
||||||
|
@ -21,7 +21,7 @@ namespace Dawn {
|
|||||||
template<class T>
|
template<class T>
|
||||||
T * _sceneForwardGetComponent(SceneItem *item);
|
T * _sceneForwardGetComponent(SceneItem *item);
|
||||||
|
|
||||||
class Scene : public StateOwner {
|
class Scene {
|
||||||
private:
|
private:
|
||||||
sceneitemid_t nextId;
|
sceneitemid_t nextId;
|
||||||
std::map<sceneitemid_t, SceneItem*> items;
|
std::map<sceneitemid_t, SceneItem*> items;
|
||||||
@ -30,8 +30,8 @@ namespace Dawn {
|
|||||||
public:
|
public:
|
||||||
DawnGame *game;
|
DawnGame *game;
|
||||||
ScenePhysicsManager *physics;
|
ScenePhysicsManager *physics;
|
||||||
Event<> eventSceneUpdate;
|
StateEvent<float_t> eventSceneUpdate;
|
||||||
Event<> eventSceneUnpausedUpdate;
|
StateEvent<float_t> eventSceneUnpausedUpdate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new Scene instance.
|
* Construct a new Scene instance.
|
||||||
|
@ -22,10 +22,10 @@ void AnimationController::addAnimation(Animation *animation) {
|
|||||||
void AnimationController::onStart() {
|
void AnimationController::onStart() {
|
||||||
SceneItemComponent::onStart();
|
SceneItemComponent::onStart();
|
||||||
|
|
||||||
useEventLegacy([&]{
|
useEvent([&](float_t delta){
|
||||||
auto it = this->animations.begin();
|
auto it = this->animations.begin();
|
||||||
while(it != this->animations.end()) {
|
while(it != this->animations.end()) {
|
||||||
(*it)->tick(this->getGame()->timeManager.delta);
|
(*it)->tick(delta);
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
}, getScene()->eventSceneUnpausedUpdate);
|
}, getScene()->eventSceneUnpausedUpdate);
|
||||||
|
@ -28,11 +28,11 @@ ExampleSpin::ExampleSpin(SceneItem *item) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExampleSpin::onStart() {
|
void ExampleSpin::onStart() {
|
||||||
useEventLegacy([&]{
|
useEvent([&](float_t delta){
|
||||||
auto quat = this->transform->getLocalRotation();
|
auto quat = this->transform->getLocalRotation();
|
||||||
quat = glm::rotate(quat, getGame()->timeManager.delta, glm::vec3(0, 1, 0));
|
quat = glm::rotate(quat, delta, glm::vec3(0, 1, 0));
|
||||||
quat = glm::rotate(quat, getGame()->timeManager.delta / 2.0f, glm::vec3(1, 0, 0));
|
quat = glm::rotate(quat, delta / 2.0f, glm::vec3(1, 0, 0));
|
||||||
quat = glm::rotate(quat, getGame()->timeManager.delta / 4.0f, glm::vec3(0, 0, 1));
|
quat = glm::rotate(quat, delta / 4.0f, glm::vec3(0, 0, 1));
|
||||||
this->transform->setLocalRotation(quat);
|
this->transform->setLocalRotation(quat);
|
||||||
}, getScene()->eventSceneUnpausedUpdate);
|
}, getScene()->eventSceneUnpausedUpdate);
|
||||||
}
|
}
|
@ -14,13 +14,13 @@ SubSceneController::SubSceneController(SceneItem *i) : SceneItemComponent(i) {
|
|||||||
void SubSceneController::onStart() {
|
void SubSceneController::onStart() {
|
||||||
auto myScene = this->getScene();
|
auto myScene = this->getScene();
|
||||||
|
|
||||||
useEventLegacy([&]{
|
useEvent([&](float_t d){
|
||||||
if(!this->onlyUpdateUnpaused) return;
|
if(!this->onlyUpdateUnpaused) return;
|
||||||
if(this->subScene == nullptr) return;
|
if(this->subScene == nullptr) return;
|
||||||
this->subScene->update();
|
this->subScene->update();
|
||||||
}, myScene->eventSceneUnpausedUpdate);
|
}, myScene->eventSceneUnpausedUpdate);
|
||||||
|
|
||||||
useEventLegacy([&]{
|
useEvent([&](float_t d){
|
||||||
if(this->onlyUpdateUnpaused) return;
|
if(this->onlyUpdateUnpaused) return;
|
||||||
if(this->subScene == nullptr) return;
|
if(this->subScene == nullptr) return;
|
||||||
this->subScene->update();
|
this->subScene->update();
|
||||||
|
@ -67,7 +67,7 @@ void UICanvas::onStart() {
|
|||||||
}, this->currentMenu);
|
}, this->currentMenu);
|
||||||
|
|
||||||
// Scene Update
|
// Scene Update
|
||||||
useEventLegacy([&]{
|
useEvent([&](float_t delta){
|
||||||
if(this->currentMenu == nullptr) return;
|
if(this->currentMenu == nullptr) return;
|
||||||
this->currentMenu->onTick();
|
this->currentMenu->onTick();
|
||||||
}, getScene()->eventSceneUpdate);
|
}, getScene()->eventSceneUpdate);
|
||||||
|
@ -8,7 +8,10 @@
|
|||||||
|
|
||||||
using namespace Dawn;
|
using namespace Dawn;
|
||||||
|
|
||||||
AudioSource::AudioSource(SceneItem *i) : SceneItemComponent(i) {
|
AudioSource::AudioSource(SceneItem *i) :
|
||||||
|
SceneItemComponent(i),
|
||||||
|
playMode(AUDIO_PLAY_MODE_UNPAUSED)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,59 +110,12 @@ void AudioSource::onStart() {
|
|||||||
this->ready = true;
|
this->ready = true;
|
||||||
|
|
||||||
// Listen for events
|
// Listen for events
|
||||||
this->transform->eventTransformUpdated.addListener(this, &AudioSource::onTransformUpdate);
|
useEventLegacy([&]{
|
||||||
this->getScene()->eventSceneUpdate.addListener(this, &AudioSource::onSceneUpdate);
|
glm::vec3 position = this->transform->getWorldPosition();
|
||||||
}
|
alSource3f(this->source, AL_POSITION, position.x, position.y, position.z);
|
||||||
|
}, this->transform->eventTransformUpdated);
|
||||||
|
|
||||||
AudioSourceState AudioSource::getRealState() {
|
useEvent([&](float_t delta){
|
||||||
return this->internalState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::rewind() {
|
|
||||||
this->bufferPosition = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioAsset * AudioSource::getAudioData() {
|
|
||||||
return this->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::setAudioData(AudioAsset *data) {
|
|
||||||
this->data = data;
|
|
||||||
this->rewind();
|
|
||||||
}
|
|
||||||
|
|
||||||
enum AudioSourcePlayMode AudioSource::getPlayMode() {
|
|
||||||
return this->playMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::setPlayMode(enum AudioSourcePlayMode playMode) {
|
|
||||||
this->playMode = playMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::stop() {
|
|
||||||
this->state = AUDIO_SOURCE_STATE_STOPPED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::play() {
|
|
||||||
this->state = AUDIO_SOURCE_STATE_PLAYING;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::pause() {
|
|
||||||
this->state = AUDIO_SOURCE_STATE_PAUSED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::onDispose() {
|
|
||||||
assertTrue(this->ready);
|
|
||||||
this->ready = false;
|
|
||||||
|
|
||||||
this->getScene()->eventSceneUpdate.removeListener(this, &AudioSource::onSceneUpdate);
|
|
||||||
this->transform->eventTransformUpdated.removeListener(this, &AudioSource::onTransformUpdate);
|
|
||||||
|
|
||||||
alDeleteSources((ALuint)1, &this->source);
|
|
||||||
alDeleteBuffers((ALuint)AUDIO_SOURCE_BUFFER_COUNT, this->buffers);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioSource::onSceneUpdate() {
|
|
||||||
ALuint bufferId;
|
ALuint bufferId;
|
||||||
ALint buffersProcessed;
|
ALint buffersProcessed;
|
||||||
|
|
||||||
@ -260,9 +216,42 @@ void AudioSource::onSceneUpdate() {
|
|||||||
} else {
|
} else {
|
||||||
assertUnreachable();
|
assertUnreachable();
|
||||||
}
|
}
|
||||||
|
}, getScene()->eventSceneUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioSource::onTransformUpdate() {
|
AudioSourceState AudioSource::getRealState() {
|
||||||
glm::vec3 position = this->transform->getWorldPosition();
|
return this->internalState;
|
||||||
alSource3f(this->source, AL_POSITION, position.x, position.y, position.z);
|
}
|
||||||
|
|
||||||
|
void AudioSource::rewind() {
|
||||||
|
this->bufferPosition = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioAsset * AudioSource::getAudioData() {
|
||||||
|
return this->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioSource::setAudioData(AudioAsset *data) {
|
||||||
|
this->data = data;
|
||||||
|
this->rewind();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioSource::stop() {
|
||||||
|
this->state = AUDIO_SOURCE_STATE_STOPPED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioSource::play() {
|
||||||
|
this->state = AUDIO_SOURCE_STATE_PLAYING;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioSource::pause() {
|
||||||
|
this->state = AUDIO_SOURCE_STATE_PAUSED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioSource::onDispose() {
|
||||||
|
assertTrue(this->ready);
|
||||||
|
this->ready = false;
|
||||||
|
|
||||||
|
alDeleteSources((ALuint)1, &this->source);
|
||||||
|
alDeleteBuffers((ALuint)AUDIO_SOURCE_BUFFER_COUNT, this->buffers);
|
||||||
}
|
}
|
@ -34,7 +34,6 @@ namespace Dawn {
|
|||||||
enum AudioSourceState internalState = AUDIO_SOURCE_STATE_STOPPED;
|
enum AudioSourceState internalState = AUDIO_SOURCE_STATE_STOPPED;
|
||||||
int32_t layer = 0;
|
int32_t layer = 0;
|
||||||
AudioAsset *data = nullptr;
|
AudioAsset *data = nullptr;
|
||||||
AudioSourcePlayMode playMode = AUDIO_PLAY_MODE_UNPAUSED;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internally update the audio's state based on the current settings.
|
* Internally update the audio's state based on the current settings.
|
||||||
@ -47,11 +46,11 @@ namespace Dawn {
|
|||||||
|
|
||||||
// Events
|
// Events
|
||||||
void onSceneUpdate();
|
void onSceneUpdate();
|
||||||
void onTransformUpdate();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool_t loop = false;
|
bool_t loop = false;
|
||||||
enum AudioSourceState state = AUDIO_SOURCE_STATE_STOPPED;
|
enum AudioSourceState state = AUDIO_SOURCE_STATE_STOPPED;
|
||||||
|
AudioSourcePlayMode playMode;
|
||||||
|
|
||||||
Event<> eventPlaying;
|
Event<> eventPlaying;
|
||||||
Event<> eventResumed;
|
Event<> eventResumed;
|
||||||
@ -98,20 +97,6 @@ namespace Dawn {
|
|||||||
*/
|
*/
|
||||||
void setAudioData(AudioAsset *data);
|
void setAudioData(AudioAsset *data);
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the play mode for the source.
|
|
||||||
*
|
|
||||||
* @return Current play mode.
|
|
||||||
*/
|
|
||||||
enum AudioSourcePlayMode getPlayMode();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the play mode for the source.
|
|
||||||
*
|
|
||||||
* @param mode Play Mode to use.
|
|
||||||
*/
|
|
||||||
void setPlayMode(enum AudioSourcePlayMode mode);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop playing this audio source. Shorthand for setting the state.
|
* Stop playing this audio source. Shorthand for setting the state.
|
||||||
*/
|
*/
|
||||||
|
@ -14,22 +14,15 @@ TicTacToeGame::TicTacToeGame(SceneItem *item) : SceneItemComponent(item) {}
|
|||||||
|
|
||||||
void TicTacToeGame::onStart() {
|
void TicTacToeGame::onStart() {
|
||||||
// Map tiles by tile number = tile
|
// Map tiles by tile number = tile
|
||||||
auto tiles = getScene()->findComponents<TicTacToeTile>();
|
auto ts = getScene()->findComponents<TicTacToeTile>();
|
||||||
auto itTiles = tiles.begin();
|
auto itTiles = ts.begin();
|
||||||
while(itTiles != tiles.end()) {
|
while(itTiles != ts.end()) {
|
||||||
this->tiles[(*itTiles)->tile] = *itTiles;
|
this->tiles[(*itTiles)->tile] = *itTiles;
|
||||||
++itTiles;
|
++itTiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listen
|
// Listen
|
||||||
getScene()->eventSceneUpdate.addListener(this, &TicTacToeGame::onSceneUpdate);
|
useEvent([&](float_t delta) {
|
||||||
}
|
|
||||||
|
|
||||||
void TicTacToeGame::onDispose() {
|
|
||||||
getScene()->eventSceneUpdate.removeListener(this, &TicTacToeGame::onSceneUpdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TicTacToeGame::onSceneUpdate() {
|
|
||||||
// Get mouse in screen space.
|
// Get mouse in screen space.
|
||||||
auto mouse = getGame()->inputManager.getAxis2D(INPUT_BIND_MOUSE_X, INPUT_BIND_MOUSE_Y);
|
auto mouse = getGame()->inputManager.getAxis2D(INPUT_BIND_MOUSE_X, INPUT_BIND_MOUSE_Y);
|
||||||
mouse *= 2.0f;
|
mouse *= 2.0f;
|
||||||
@ -83,4 +76,5 @@ void TicTacToeGame::onSceneUpdate() {
|
|||||||
// Determine winner
|
// Determine winner
|
||||||
std::vector<uint8_t> winningCombo;
|
std::vector<uint8_t> winningCombo;
|
||||||
auto winner = ticTacToeDetermineWinner(tileMap, &winningCombo);
|
auto winner = ticTacToeDetermineWinner(tileMap, &winningCombo);
|
||||||
|
}, getScene()->eventSceneUpdate);
|
||||||
}
|
}
|
@ -17,8 +17,5 @@ namespace Dawn {
|
|||||||
TicTacToeGame(SceneItem *item);
|
TicTacToeGame(SceneItem *item);
|
||||||
|
|
||||||
void onStart() override;
|
void onStart() override;
|
||||||
void onDispose() override;
|
|
||||||
|
|
||||||
void onSceneUpdate();
|
|
||||||
};
|
};
|
||||||
}
|
}
|
Reference in New Issue
Block a user