Exemple #1
0
void ChapterScene::backButtonClick(Ref* sender) {
    GameEvent* gameEvent = new GameEvent();
    gameEvent->setEventCode(EVT_BACK_BEGIN);
    this->fireEvent(gameEvent);
    
    this->handleFlashButton(sender);
}
Exemple #2
0
void GameEventMgr::GameEventMgrThread::Update()
{
    //Log.Notice("GameEventMgr", "Tick!");
    auto now = time(0);

    for (auto gameEventPair : sGameEventMgr.mGameEvents)
    {
        GameEvent* gameEvent = gameEventPair.second;

        // Don't alter manual events
        if (!gameEvent->isValid())
            continue;

        auto startTime = time_t(gameEvent->start);
        if (startTime < now && now < gameEvent->end)
        {
            if ((now - startTime) % (gameEvent->occurence * 60) < gameEvent->length * 60)
            {
                // Event should start
                if (gameEvent->state != GAMEEVENT_INACTIVE_FORCED)
                {
                    gameEvent->StartEvent();
                    continue;
                }
            }
            continue;
        }

        // Event should stop
        if (gameEvent->state != GAMEEVENT_ACTIVE_FORCED)
        {
            gameEvent->StopEvent();
        }
    }
}
Exemple #3
0
    void Interface::update()
    {
        if(isSelfhosted())
        {
            externalGameInput->update();
        }
        else
        {
			using namespace boost::interprocess;
            managed_shared_memory shm(open_only, piga::Host::getInputSharedMemoryName());

			std::pair<PlayerInputStruct*, std::size_t> p =
					shm.find<PlayerInputStruct>("PlayerInput");

            GameEvent e;

            if(m_playerInputs.size() != p.second)
            {
                m_playerInputs.resize(p.second);
            }

            for(std::size_t i = 0; i < p.second; ++i)
            {
                while(p.first[i].pollEvents(m_playerInputs[i], e))
                {
                    e.setPlayerID(i);
                    events.push_back(e);
                }
            }
        }
    }
Exemple #4
0
// ミニゲーム系イベントの失敗コールバックイベントを生成
GameEvent* GameEventHelper::createMiniGameFailureCallbackEvent(rapidjson::Value& json, EventFactory* factory, GameEvent* caller)
{
    if (!this->hasMember(json, member::FALSE_) && !this->hasMember(json, member::ACTION)) return nullptr;
    
    GameEvent* event { nullptr };
    
    if (json[member::FALSE_].IsString()) {
        rapidjson::Value eventJson { DungeonSceneManager::getInstance()->getEventScript()->getScriptJson(json[member::FALSE_].GetString()) };
        event = factory->createGameEvent(eventJson, nullptr);
        event->setEventId(stoi(json[member::FALSE_].GetString()));
    }
    
    if (json[member::FALSE_].IsArray()) event = factory->createGameEvent(json[member::FALSE_], caller);
    
    // NOTICE: これ不要?
    if (this->hasMember(json, member::ACTION)) {
        if (json[member::ACTION].IsString()) {
            rapidjson::Value eventJson { DungeonSceneManager::getInstance()->getEventScript()->getScriptJson(json[member::ACTION].GetString()) };
            event = factory->createGameEvent(eventJson, nullptr);
            event->setEventId(stoi(json[member::ACTION].GetString()));
        }
        
        if(json[member::ACTION].IsArray()) event = factory->createGameEvent(json[member::ACTION], caller);
    }
    
    return event;
}
Exemple #5
0
void Game::moveArmy(int src, int dst, int count)
{
	GameEvent* gameEvent = new GameEvent(Constants::TYPE_MOVE);
	gameEvent->addArg(src);
	gameEvent->addArg(dst);
	gameEvent->addArg(count);
	eventHandler->addEvent(gameEvent);
}
Exemple #6
0
void ChapterScene::onKeyRelease(EventKeyboard::KeyCode keyCode, cocos2d::Event *event) {
    Director::getInstance()->getEventDispatcher()->removeEventListener(this->listener);
    if (keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE) {
        GameEvent* gameEvent = new GameEvent();
        gameEvent->setEventCode(EVT_BACK_BEGIN);
        this->fireEvent(gameEvent);
    }
}
GameEventContainer *Server_Game::prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context)
{
	GameEventContainer *cont = new GameEventContainer;
	cont->set_game_id(gameId);
	if (context)
		cont->mutable_context()->CopyFrom(*context);
	GameEvent *event = cont->add_event_list();
	if (playerId != -1)
		event->set_player_id(playerId);
	event->GetReflection()->MutableMessage(event, gameEvent.GetDescriptor()->FindExtensionByName("ext"))->CopyFrom(gameEvent);
	return cont;
}
GameEvent::GameEvent
(
    GAME_EVENT          type,
    GameEventArgList *  args,
    sint32              serial,
    GAME_EVENT          addedDuring
)
:
	m_type              (type),
	m_argList           (args),
	m_resumeIndex       (-1),   // Handling not started yet
	m_addedDuring       (addedDuring),
	m_serial            (serial),
	m_line              (-1),   // Line invalid
	m_file              (NULL),
	m_contextName       (NULL)
{
	/// @todo Improve code style
	// Instead of accessing global variables (which may or may not exist),
	// better pass the data as arguments.

	if(g_slicEngine->GetContext())
	{
		m_line = g_slicEngine->GetContext()->GetFrame()->GetCurrentLine();

		const char * file = g_slicEngine->GetContext()->GetFrame()->GetSlicSegment()->GetFilename();
		const char * name = g_slicEngine->GetContext()->GetFrame()->GetSlicSegment()->GetName();

		m_file        = new char[strlen(file) + 1];
		m_contextName = new char[strlen(name) + 1];

		strcpy(m_file       , file);
		strcpy(m_contextName, name);
	}
	else if(g_gevManager->GetHeadEvent()
	&&      g_gevManager->GetHeadEvent()->GetLine() >= 0
	){
		GameEvent * event = g_gevManager->GetHeadEvent();

		m_line = event->GetLine();

		const char * file = event->GetFile();
		const char * name = event->GetContextName();

		m_file        = new char[strlen(file) + 1];
		m_contextName = new char[strlen(name) + 1];

		strcpy(m_file       , file);
		strcpy(m_contextName, name);
	}
}
Exemple #9
0
/**
 Update method called by the subject in observer pattern
*/
void AchievementSystem::update(GameEvent event)
{
    for(int i =0; i < numOfAchievements; i++)
    {
        //check if the achievement is finished
        if (achievements[i]->updateProgress(event.getType(), event.getValue()))
        {
            //if so unlock the achievement
            achievements[i]->unlock();
            numUnlocked++;
            removeAchievement((achievements[i]));
            unlockedAchievements.push_back(achievements[i]);
        }
    }
}
Exemple #10
0
void LevelScene::onKeyRelease(EventKeyboard::KeyCode keyCode, cocos2d::Event *event) {
    if (this->dialogLayer->isVisible()) {
        return;
    }
    
    if (keyCode == EventKeyboard::KeyCode::KEY_BACK) {
        GameEvent* clickButtonEvent = new GameEvent();
        clickButtonEvent->setEventCode(EVT_CLICK_BUTTON);
        this->fireEvent(clickButtonEvent);
        
        GameEvent* gameEvent = new GameEvent();
        gameEvent->setEventCode(EVT_BACK_CHAPTER);
        this->fireEvent(gameEvent);
    }
}
Exemple #11
0
 void PlayerInputStruct::fromGameEvent(GameEvent &e)
 {
     if(e.type() == GameEvent::GameInput)
     {
         fromGameEvent(e.gameInput.control(), e.gameInput.state());
     }
 }
Exemple #12
0
    bool
    Game::on_event(const GameEvent& event)
    {
        if (event.id() == game_event::QUIT)
        {
            m_state = QUIT;
            return true;
        }

        return false;
    }
Exemple #13
0
void ChapterScene::onTouchEnded(Touch* touch, Event* event) {
    GameModel* gameModel = GameModel::getInstance();
    this->updatePageAuto();
    
    Point point = this->convertTouchToNodeSpace(touch);
    bool moveTooFar = false;
    float dx = point.x - this->firstPoint.x;
    float dy = point.y - this->firstPoint.y;
    if (abs(dx) > CONF_TOUCH_RANGE || abs(dy) > CONF_TOUCH_RANGE) {
        moveTooFar = true;
    }
    point = point - this->chapterLayer->getPosition();
    
    for (int i = 0; i < this->chapterLayer->getChildren().size(); i++) {
        Face* chapterFace = dynamic_cast<Face*>(this->chapterLayer->getChildren().at(i));
        if (chapterFace != NULL) {
            RectBody* chapterBody = new RectBody(chapterFace->getContentSize().width, chapterFace->getContentSize().height);
            chapterBody->setPosition(chapterFace->getPosition());
            
            if (chapterBody->contains(point)) {
                if (!moveTooFar && chapterFace->getTag() != -1) {
                    if (!gameModel->checkLevelRequireSocial(i + 1)) {
                        this->shareLayer->show(TXT_REQUIRE_SHARE);
                        GameEvent* gameEvent = new GameEvent();
                        gameEvent->setEventCode(EVT_SHOW_SHARE_REQUIRED);
                        this->fireEvent(gameEvent);
                    } else {
                        DataEvent* gameEvent = new DataEvent();
                        gameEvent->setEventCode(EVT_START_PLAY);
                        gameEvent->setArgumentInt(chapterFace->getTag());
                        this->fireEvent(gameEvent);
                        
                        this->_eventDispatcher->removeEventListener(this->touchListener);
                    }
                }
                this->flash(chapterFace);
                break;
            }
        }
    }
}
Exemple #14
0
bool PadLayer::onTouchBegan(Touch* touch, Event* event) {
    Point point = this->convertTouchToNodeSpace(touch);
    if (Utils::isPointInRectangle(point, this->padA->getPosition(), CONF_RANGE_TO_TOUCH * 2, CONF_RANGE_TO_TOUCH * 2)) {
        
        this->padA->setOpacity(255);
        this->touchPadA = touch;
        
        GameEvent* gameEvent = new GameEvent();
        gameEvent->setEventCode(EVT_JUMP);
        parent->fireEvent(gameEvent);
    } else if (Utils::isPointInRectangle(point, this->padB->getPosition(), CONF_RANGE_TO_TOUCH * 2, CONF_RANGE_TO_TOUCH * 2)) {
        
        this->padB->setOpacity(255);
        this->touchPadB = touch;
        
        GameEvent* gameEvent = new GameEvent();
        gameEvent->setEventCode(EVT_PUNCH);
        parent->fireEvent(gameEvent);
    }
    return true;
}
Exemple #15
0
    bool PlayerInputStruct::pollEvents(PlayerInputStruct &oldInputs, GameEvent &e)
    {
        //Check if the given event is already a game input event.
        if(e.type() != GameEvent::GameInput)
        {
            e = event::GameInput();
        }

        if(oldInputs.action() != action()) {
            e.gameInput.setControl(GameControl::ACTION);
            e.gameInput.setState(action());
            oldInputs.setAction(action());
            return true;
        }
        if(oldInputs.up() != up()) {
            e.gameInput.setControl(GameControl::UP);
            e.gameInput.setValue(up());
            oldInputs.setUp(up());
            return true;
        }
        if(oldInputs.down() != down()) {
            e.gameInput.setControl(GameControl::DOWN);
            e.gameInput.setValue(down());
            oldInputs.setDown(down());
            return true;
        }
        if(oldInputs.left() != left()) {
            e.gameInput.setControl(GameControl::LEFT);
            e.gameInput.setValue(left());
            oldInputs.setLeft(left());
            return true;
        }
        if(oldInputs.right() != right()) {
            e.gameInput.setControl(GameControl::RIGHT);
            e.gameInput.setValue(right());
            oldInputs.setRight(right());
            return true;
        }
        if(oldInputs.button1() != button1()) {
            e.gameInput.setControl(GameControl::BUTTON1);
            e.gameInput.setState(button1());
            oldInputs.setButton1(button1());
            return true;
        }
        if(oldInputs.button2() != button2()) {
            e.gameInput.setControl(GameControl::BUTTON2);
            e.gameInput.setState(button2());
            oldInputs.setButton2(button2());
            return true;
        }
        if(oldInputs.button3() != button3()) {
            e.gameInput.setControl(GameControl::BUTTON3);
            e.gameInput.setState(button3());
            oldInputs.setButton3(button3());
            return true;
        }
        if(oldInputs.button4() != button4()) {
            e.gameInput.setControl(GameControl::BUTTON4);
            e.gameInput.setState(button4());
            oldInputs.setButton4(button4());
            return true;
        }
        if(oldInputs.button5() != button5()) {
            e.gameInput.setControl(GameControl::BUTTON5);
            e.gameInput.setState(button5());
            oldInputs.setButton5(button5());
            return true;
        }
        if(oldInputs.button6() != button6()) {
            e.gameInput.setControl(GameControl::BUTTON6);
            e.gameInput.setState(button6());
            oldInputs.setButton6(button6());
            return true;
        }
        return false;
    }
Exemple #16
0
void LevelScene::backButtonClick(Ref* sender) {
    GameEvent* gameEvent = new GameEvent();
    gameEvent->setEventCode(EVT_BACK_CHAPTER);
    this->fireEvent(gameEvent);
}
Exemple #17
0
void Level::frogStop() {
    this->frog->setPosition(this->frog->getCurrentTargetPoint());
    this->frog->getBody()->setVelocity(Point::ZERO);
    this->frog->setJumping(false);
    
    // check if has no ways to goes further
    int remainLeaf = 0;
    __Array* allLeavesKey = this->getLeaves()->allKeys();
    for (int i = 0; i < allLeavesKey->count(); i++) {
        __Integer* key = (__Integer*) allLeavesKey->getObjectAtIndex(i);
        Leaf* leaf = (Leaf*) this->getLeaves()->objectForKey(key->getValue());
        if (!leaf->getDrowning()) {
            remainLeaf++;
        }
    }
    
    if (remainLeaf > 1) {
        int frogRow = (this->frog->getPositionIndex() - 1) / CONFIG_LAGOON_WIDTH;
        int sizeOfLagoon = CONFIG_LAGOON_WIDTH * CONFIG_LAGOON_HEIGHT;
        bool deadLock = true;
        
        if (this->frog->getViewDirection() == VIEW_LEFT ||
            this->frog->getViewDirection() == VIEW_UP ||
            this->frog->getViewDirection() == VIEW_DOWN) {
            
            int checkIndex = this->frog->getPositionIndex();
            while ((--checkIndex - 1) / CONFIG_LAGOON_WIDTH == frogRow) {
                if (this->leaves->objectForKey(checkIndex) != NULL) {
                    deadLock = false;
                    break;
                }
            }
        }
        
        if (this->frog->getViewDirection() == VIEW_RIGHT ||
            this->frog->getViewDirection() == VIEW_UP ||
            this->frog->getViewDirection() == VIEW_DOWN) {
            
            int checkIndex = this->frog->getPositionIndex();
            while ((++checkIndex - 1) / CONFIG_LAGOON_WIDTH == frogRow) {
                if (this->leaves->objectForKey(checkIndex) != NULL) {
                    deadLock = false;
                    break;
                }
            }
        }
        
        if (this->frog->getViewDirection() == VIEW_LEFT ||
            this->frog->getViewDirection() == VIEW_RIGHT ||
            this->frog->getViewDirection() == VIEW_UP) {
            
            int checkIndex = this->frog->getPositionIndex();
            checkIndex += CONFIG_LAGOON_WIDTH;
            while ((checkIndex - 1) < sizeOfLagoon) {
                if (this->leaves->objectForKey(checkIndex) != NULL) {
                    deadLock = false;
                    break;
                }
                checkIndex += CONFIG_LAGOON_WIDTH;
            }
        }
        
        if (this->frog->getViewDirection() == VIEW_LEFT ||
            this->frog->getViewDirection() == VIEW_RIGHT ||
            this->frog->getViewDirection() == VIEW_DOWN) {
            
            int checkIndex = this->frog->getPositionIndex();
            checkIndex -= CONFIG_LAGOON_WIDTH;
            while ((checkIndex - 1) >= 0) {
                if (this->leaves->objectForKey(checkIndex) != NULL) {
                    deadLock = false;
                    break;
                }
                checkIndex -= CONFIG_LAGOON_WIDTH;
            }
        }
        
        if (deadLock) {
            this->hanged = true;
            GameModel* gameModel = GameModel::getInstance();
            GameEvent* gameEvent = new GameEvent();
            gameEvent->setEventCode(EVT_DEAD_LOCK_GAME);
            gameModel->fireEvent(gameEvent);
        }
    }
}