123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #include <cstddef>
- #include "Private.h"
- #include "SignalSender.h"
- #include "Group.h"
- #include "Behavior.h"
- SignalSender * SignalSender::p_SignalSender = NULL;
- SignalSender::SignalSender() {
- }
- SignalSender::~SignalSender() {
- p_SignalSender = NULL;
- }
- SignalSender * SignalSender::getInstance() {
- if (p_SignalSender == NULL) {
- p_SignalSender = new SignalSender();
- }
- return p_SignalSender;
- }
- void SignalSender::addSignal(int signal, int delay, Group * sender, Group * reciever) {
- SignalStruct sig;
- sig.signal = signal;
- sig.delay = delay;
- sig.sender = sender;
- sig.reciever = reciever;
-
- m_vSignalBuffer.push_back(sig);
- }
- void SignalSender::addGroup(Group * g) {
- EmAssert(g != NULL, "Added NULL as a group to SignalSender");
-
- m_vGroup.push_back(g);
- }
- void SignalSender::clear() {
- EM_COUT("SignalSender::clear()", 1);
- m_vSignal.clear();
- m_vSignalBuffer.clear();
- m_vGroup.clear();
- }
- void SignalSender::tick() {
- EM_COUT("SignalSender::tick() " << m_vGroup.size() << " groups", 0);
-
- vector<SignalStruct>::iterator sigIter = m_vSignalBuffer.begin();
- vector<SignalStruct>::iterator sigEnd = m_vSignalBuffer.end();
- for (; sigIter != sigEnd; sigIter++) {
- m_vSignal.push_back((*sigIter));
- }
- m_vSignalBuffer.clear();
-
- sigIter = m_vSignal.begin();
- sigEnd = m_vSignal.end();
- for (; sigIter != sigEnd; ++sigIter) {
-
- if ((*sigIter).delay > 0) {
- (*sigIter).delay--;
- m_vSignalBuffer.push_back((*sigIter));
- continue;
- }
-
- vector<Group*>::iterator groupIter = m_vGroup.begin();
- vector<Group*>::iterator groupEnd = m_vGroup.end();
- for(; groupIter != groupEnd; ++groupIter) {
- if ((*groupIter)->m_iProperties & EM_GROUP_NO_SIGNAL) continue;
-
- if ((*sigIter).reciever != NULL && (*sigIter).reciever != (*groupIter)) continue;
-
-
-
-
-
-
-
-
- if ((*groupIter)->getBehavior() != NULL) {
- (*groupIter)->getBehavior()->onSignal((*sigIter).signal, (*sigIter).sender);
- }
- }
- }
- m_vSignal.clear();
- }
|