mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-10-04 21:34:41 +00:00
initial commit. This is icculus version 5542b94cae02a6333845854bbbd1abe0a259f1a4
This commit is contained in:
commit
3096eaf5e2
2519 changed files with 816064 additions and 0 deletions
243
BBGE/Event.cpp
Normal file
243
BBGE/Event.cpp
Normal file
|
@ -0,0 +1,243 @@
|
|||
/*
|
||||
Copyright (C) 2007, 2010 - Bit-Blot
|
||||
|
||||
This file is part of Aquaria.
|
||||
|
||||
Aquaria is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include "Event.h"
|
||||
#include "ActionMapper.h"
|
||||
|
||||
|
||||
EventPtr::EventPtr() : e(0)
|
||||
{
|
||||
this->_evm = EVM_NONE;
|
||||
|
||||
this->actionMapperCallback = 0;
|
||||
this->actionValue = 0;
|
||||
this->stateToCall = 0;
|
||||
}
|
||||
|
||||
EventPtr::~EventPtr()
|
||||
{
|
||||
}
|
||||
|
||||
void EventPtr::clean()
|
||||
{
|
||||
// check to see if we have a pointer + want to clean up
|
||||
// if so, do so!
|
||||
if (e && evm()==EVM_CLEANUP)
|
||||
{
|
||||
delete e;
|
||||
e=0;
|
||||
}
|
||||
}
|
||||
|
||||
const EventPtr& EventPtr::operator= (const EventPtr &e)
|
||||
{
|
||||
this->e = e.e;
|
||||
this->_evm = e._evm;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void EventPtr::call()
|
||||
{
|
||||
if (e) e->act();
|
||||
if (e && evm()==EVM_CLEANUP)
|
||||
{
|
||||
delete e;
|
||||
e=0;
|
||||
}
|
||||
if (actionMapperCallback)
|
||||
{
|
||||
actionMapperCallback->action(actionValue, stateToCall);
|
||||
}
|
||||
}
|
||||
|
||||
void EventPtr::set(Event *e, EventManage _evm)
|
||||
{
|
||||
this->e = e;
|
||||
this->_evm = _evm;
|
||||
}
|
||||
|
||||
void EventPtr::setActionMapperCallback(ActionMapper *actionMapperCallback, int actionValue, int stateToCall)
|
||||
{
|
||||
this->actionMapperCallback = actionMapperCallback;
|
||||
this->actionValue = actionValue;
|
||||
this->stateToCall = stateToCall;
|
||||
}
|
||||
|
||||
EventPulser::EventPulser()
|
||||
{
|
||||
interval = 1;
|
||||
time = 1;
|
||||
randomVariance = 0;
|
||||
times = -1;
|
||||
}
|
||||
|
||||
void EventPulser::setInterval(float t)
|
||||
{
|
||||
interval = time = t;
|
||||
}
|
||||
|
||||
void EventPulser::update(float dt)
|
||||
{
|
||||
if (times == 0) return;
|
||||
time -= dt;
|
||||
if (time <= 0)
|
||||
{
|
||||
if (times != -1)
|
||||
{
|
||||
times --;
|
||||
}
|
||||
e.call();
|
||||
time = interval;
|
||||
if (randomVariance)
|
||||
{
|
||||
time += rand()%randomVariance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EventTimer::EventTimer(const EventPtr &p, float time)
|
||||
{
|
||||
eventPtr = p;
|
||||
timer.start(time);
|
||||
}
|
||||
|
||||
void EventTimer::update(float dt)
|
||||
{
|
||||
if (timer.updateCheck(dt))
|
||||
{
|
||||
eventPtr.call();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
EventQueue::EventQueue()
|
||||
{
|
||||
}
|
||||
|
||||
void EventQueue::addEvent(const EventPtr &eventPtr, float t)
|
||||
{
|
||||
eventTimers.push_back(EventTimer(eventPtr, t));
|
||||
}
|
||||
|
||||
void EventQueue::update(float dt)
|
||||
{
|
||||
for (EventTimers::iterator i = eventTimers.begin(); i != eventTimers.end();)
|
||||
{
|
||||
i->update(dt);
|
||||
if (i->timer.isDone())
|
||||
{
|
||||
i = eventTimers.erase(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EventQueue::clear()
|
||||
{
|
||||
for (EventTimers::iterator i = eventTimers.begin(); i != eventTimers.end(); i++)
|
||||
{
|
||||
i->eventPtr.clean();
|
||||
}
|
||||
eventTimers.clear();
|
||||
}
|
||||
|
||||
int EventQueue::getSize()
|
||||
{
|
||||
return eventTimers.size();
|
||||
}
|
||||
|
||||
Timer::Timer()
|
||||
{
|
||||
timer = time = 0;
|
||||
running = 0;
|
||||
}
|
||||
|
||||
float Timer::getPerc()
|
||||
{
|
||||
if (timer <= 0 || time <= 0) return 0;
|
||||
return timer/time;
|
||||
}
|
||||
|
||||
void Timer::start(float t)
|
||||
{
|
||||
timer = t;
|
||||
time = t;
|
||||
running = 1;
|
||||
}
|
||||
|
||||
void Timer::stop()
|
||||
{
|
||||
timer = 0;
|
||||
running = 0;
|
||||
}
|
||||
|
||||
void Timer::startStopWatch()
|
||||
{
|
||||
timer = 0;
|
||||
running = 2;
|
||||
}
|
||||
|
||||
bool Timer::isDone()
|
||||
{
|
||||
return running == 0;
|
||||
}
|
||||
|
||||
bool Timer::isActive()
|
||||
{
|
||||
return running != 0;
|
||||
}
|
||||
|
||||
void Timer::update(float dt)
|
||||
{
|
||||
switch (running)
|
||||
{
|
||||
case 1:
|
||||
timer -= dt;
|
||||
if (timer < 0)
|
||||
{
|
||||
timer = 0;
|
||||
running = 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
timer += dt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool Timer::updateCheck(float dt)
|
||||
{
|
||||
int wasRunning = running;
|
||||
update(dt);
|
||||
if (wasRunning && !running)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
float Timer::getValue()
|
||||
{
|
||||
return timer;
|
||||
}
|
||||
//EventPtr endEvent, startEvent;
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue