예제 #1
0
bool Tower::initWithType(TowerType type, ControllerType controller) {
    if (BaseGameEntity::initWithControllerType(controller)) {
        
        // Architecture
        //-------------------
        m_pArchitecture = Architecture::getArchitectureForType(type);
        
        // Set Sprite
        //-------------------
        CCSpriteFrame *frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(m_pArchitecture->getSpriteName());
        m_pSprite->setDisplayFrame(frame);
        GameModel::instance()->getBatch()->addChild(m_pSprite);
        
        // Shooting Component
        //-------------------
        m_pComponents->setObject(ShootingComponent::create(this), kShootingComponent);
        
        // Touch Component
        //-------------------
        m_pComponents->setObject(TouchComponent::create(this, 1, this, menu_selector(Tower::popMenu), m_pArchitecture->getBodyRadius()), kTouchComponent);
        
        // State Machine Component
        //-------------------
        StateMachine<Tower> *pSM = StateMachine<Tower>::create(this);
        pSM->setGlobalState(TowerGlobalState::instance());
        pSM->changeState(TowerStateIdle::instance());
        m_pComponents->setObject(pSM, kStateMachineComponent);
        
        // Collision Component
        //-------------------
        getCollisionComponent()->setQueryRadius(m_pArchitecture->getGuardingRadius());
        getCollisionComponent()->setCollisionRadius(m_pArchitecture->getGuardingRadius());
        
        // Set entity type
        //-------------------
        m_eEntityType = kTower;
        
        return true;
    }
    return false;
}
 void                        changeState(Enemy::States newState)
 {
   mStateMachine.changeState(mStates.at(newState).get(), newState);
 }
예제 #3
0
 // Setters
 void                             changeState(Adventurer::States newState)
                                  { mStateMachine.changeState(mStates.at(newState).get(), newState); }