Exemple #1
0
    void MasterWidget::ChangeContext(UiDefines::UiStates::ConnectionState new_state)
    {
        ui_state_ = (new_state == UiDefines::UiStates::NoStateChange ? ui_state_ : new_state);
        current_size_ = CleanSelf();

        switch (ui_state_)
        {
            case UiDefines::UiStates::Disconnected:
            {
                SAFE_DELETE(login_widget_);
                login_widget_ = new QWidget();
                login_ui_->setupUi(login_widget_);
                layout()->addWidget(login_widget_);
                to_be_removed_ << "login_ui_";

                config_helper_->SetPreviousData(login_ui_, login_helper_->GetPreviousCredentials());
                login_ui_->passwordLineEdit->setFocus(Qt::MouseFocusReason);
                if (!login_helper_->GetErrorMessage().isEmpty())
                    login_ui_->statusLabel->setText(login_helper_->GetErrorMessage());
                
                connect(login_ui_->connectPushButton, SIGNAL( clicked() ), login_helper_, SLOT( TryLogin() ));
                connect(login_ui_->presetsComboBox, SIGNAL( currentIndexChanged(int) ), this, SLOT( PresetSelected(int) ));
                connect(login_helper_, SIGNAL( StateChange(UiDefines::UiStates::ConnectionState) ), this, SLOT( ChangeContext(UiDefines::UiStates::ConnectionState) ));
                break;
            }
            case UiDefines::UiStates::Connecting:
            {
                SAFE_DELETE(loading_widget_);
                loading_widget_ = new QWidget();
                loading_ui_->setupUi(loading_widget_);
                layout()->addWidget(loading_widget_);
                to_be_removed_ << "loading_ui_";

                connect(loading_ui_->cancelPushButton, SIGNAL( clicked() ), login_helper_, SLOT( LoginCanceled() ));
                break;
            }
            case UiDefines::UiStates::Connected:
            {
                config_helper_->SaveLoginData(login_helper_->GetPreviousCredentials());

                SAFE_DELETE(session_manager_widget_);
                session_manager_widget_ = new QWidget();
                session_manager_ui_->setupUi(session_manager_widget_);
                layout()->addWidget(session_manager_widget_);
                to_be_removed_ << "session_manager_ui_";

                connect(session_manager_, SIGNAL( StateChange(UiDefines::UiStates::ConnectionState) ), this, SLOT( ChangeContext(UiDefines::UiStates::ConnectionState) ));
                session_manager_->Start(login_helper_->GetPreviousCredentials()["username"], login_helper_->GetConnectionInterface(), event_handler_);
                break;
            }
            case UiDefines::UiStates::Exit:
            {
                hide();
                return;
            }
        }
        resize(current_size_);
    }
Exemple #2
0
//
// called by IrComm to let us know of major connection state changes
//
void
IrDAComm::ConnectionStatus(Boolean connected)
{
    static Boolean last_connected = false;      // cut down on the debug log noise
    
    XTRACE(kLogConnectionStatus, fState, connected);
    if (connected != last_connected) {
	DebugLog("connection status %d", connected);
	last_connected = connected;
    }
    check(fState != kIrDACommStateIdle);

    if (connected)  StateChange(kIrDACommEventConnected);
    else            StateChange(kIrDACommEventDisconnected);
}
Exemple #3
0
//---------------------------------------------------------------------------
void TSessionLog::OpenLogFile()
{
  try
  {
    assert(FFile == nullptr);
    assert(FConfiguration != nullptr);
    FCurrentLogFileName = FConfiguration->GetLogFileName();
    FFile = OpenFile(FCurrentLogFileName, FSessionData, FConfiguration->GetLogFileAppend(), FCurrentFileName);
  }
  catch (Exception & E)
  {
    // We failed logging to file, turn it off and notify user.
    FCurrentLogFileName = L"";
    FCurrentFileName = L"";
    FConfiguration->SetLogFileName(UnicodeString());
    try
    {
      throw ExtException(&E, LoadStr(LOG_GEN_ERROR));
    }
    catch (Exception & E)
    {
      AddException(&E);
      FUI->HandleExtendedException(&E);
    }
  }
  StateChange();
}
Exemple #4
0
/**
 * ProcessEvents() reacts to a list of events originating from other VLC threads
 *
 * This function must be called with p_sys->lock unlocked
 *
 * @param intf_thread_t *p_intf This interface thread state
 * @param callback_info_t *p_events the list of events to process
 */
static void ProcessEvents( intf_thread_t *p_intf,
                           callback_info_t **p_events, int i_events )
{
    for( int i = 0; i < i_events; i++ )
    {
        switch( p_events[i]->signal )
        {
        case SIGNAL_ITEM_CURRENT:
            TrackChange( p_intf );
            break;
        case SIGNAL_INTF_CHANGE:
        case SIGNAL_PLAYLIST_ITEM_APPEND:
        case SIGNAL_PLAYLIST_ITEM_DELETED:
            TrackListChangeEmit( p_intf,
                                 p_events[i]->signal,
                                 p_events[i]->i_node );
            break;
        case SIGNAL_RANDOM:
        case SIGNAL_REPEAT:
        case SIGNAL_LOOP:
            StatusChangeEmit( p_intf );
            break;
        case SIGNAL_STATE:
            StateChange( p_intf );
            break;
        case SIGNAL_INPUT_METADATA:
            break;
        default:
            assert(0);
        }
        free( p_events[i] );
    }
}
Exemple #5
0
 void SessionManager::SignOut()
 {
     im_connection_->Close();          
     friend_list_widget_->close(); 
     SAFE_DELETE(friend_list_widget_);
     emit StateChange(UiDefines::UiStates::Disconnected);
 }
void CUser::PartyBBSDelete(char *pBuf)
{
	int send_index = 0;	// Basic Initializations. 			
	BYTE result = 0; 
	char send_buff[256]; memset( send_buff, NULL, 256);

	if (m_bNeedParty == 1) goto fail_return;	// You don't need anymore 

	m_bNeedParty = 1;	// Success! You no longer need a party !!!
	result = 1;

	SetByte(send_buff, 2, send_index);	// Send new 'Need Party Status' to region!!!
	SetByte(send_buff, m_bNeedParty, send_index);
	StateChange(send_buff);

	send_index = 0; memset(send_buff, NULL, 256);	// Now, let's find out which page the user is on.
	SetShort(send_buff, 0, send_index);
	PartyBBSNeeded(send_buff, PARTY_BBS_DELETE);
	return;

fail_return:
	SetByte(send_buff, WIZ_PARTY_BBS, send_index);
	SetByte(send_buff, PARTY_BBS_DELETE, send_index);
	SetByte(send_buff, result, send_index);
	Send(send_buff, send_index);
	return;	
}
Exemple #7
0
static void Run          ( intf_thread_t *p_intf )
{
    for( ;; )
    {
        if( dbus_connection_get_dispatch_status(p_intf->p_sys->p_conn)
                                             == DBUS_DISPATCH_COMPLETE )
            msleep( INTF_IDLE_SLEEP );
        int canc = vlc_savecancel();
        dbus_connection_read_write_dispatch( p_intf->p_sys->p_conn, 0 );

        /* Get the list of events to process
         *
         * We can't keep the lock on p_intf->p_sys->p_events, else we risk a
         * deadlock:
         * The signal functions could lock mutex X while p_events is locked;
         * While some other function in vlc (playlist) might lock mutex X
         * and then set a variable which would call AllCallback(), which itself
         * needs to lock p_events to add a new event.
         */
        vlc_mutex_lock( &p_intf->p_sys->lock );
        int i_events = vlc_array_count( p_intf->p_sys->p_events );
        callback_info_t* info[i_events];
        for( int i = i_events - 1; i >= 0; i-- )
        {
            info[i] = vlc_array_item_at_index( p_intf->p_sys->p_events, i );
            vlc_array_remove( p_intf->p_sys->p_events, i );
        }
        vlc_mutex_unlock( &p_intf->p_sys->lock );

        for( int i = 0; i < i_events; i++ )
        {
            switch( info[i]->signal )
            {
            case SIGNAL_ITEM_CURRENT:
                TrackChange( p_intf );
                break;
            case SIGNAL_INTF_CHANGE:
            case SIGNAL_PLAYLIST_ITEM_APPEND:
            case SIGNAL_PLAYLIST_ITEM_DELETED:
                TrackListChangeEmit( p_intf, info[i]->signal, info[i]->i_node );
                break;
            case SIGNAL_RANDOM:
            case SIGNAL_REPEAT:
            case SIGNAL_LOOP:
                StatusChangeEmit( p_intf );
                break;
            case SIGNAL_STATE:
                StateChange( p_intf, info[i]->i_input_state );
                break;
            default:
                assert(0);
            }
            free( info[i] );
        }
        vlc_restorecancel( canc );
    }
}
Exemple #8
0
//---------------------------------------------------------------------------
void TSessionLog::CloseLogFile()
{
  if (FFile != nullptr)
  {
    fclose(static_cast<FILE *>(FFile));
    FFile = nullptr;
  }
  FCurrentLogFileName = L"";
  FCurrentFileName = L"";
  StateChange();
}
void CSoundManager::InitComplete()
{
    iIsLoad = ETrue;
    iData->InitVolume(iPlayer->MaxVolume());

    iData->SetPlayerState(KPlayerStatePlay);
    StateChange();
    VolumeChange();

    if (iSoundCallBack)
    {
        iSoundCallBack->InitComplete();
    }
}
Exemple #10
0
QTSS_Error QTSSErrorLogModuleDispatch(QTSS_Role inRole, QTSS_RoleParamPtr inParamBlock)
{
    switch (inRole)
    {
        case QTSS_Register_Role:
            return Register(&inParamBlock->regParams);
        case QTSS_StateChange_Role:
            return StateChange(&inParamBlock->stateChangeParams);
        case QTSS_ErrorLog_Role:
            return LogError(inParamBlock);
        case QTSS_Shutdown_Role:
            return Shutdown();
    }
    return QTSS_NoErr;
}
Exemple #11
0
void Ai_Fly_bug::Search()
{
	float angle_ = GetAngleToTarget(unit->GetPos(), targer_pos);
	float dis_ = distan_coord(unit->GetPos(), targer_pos);
	int see_ = map->CollutionPosToPos(unit->GetPos(), targer_pos); //0이 안막혀있는거
	search_time = 0;


	unit->SetAngle(angle_);
	unit->Approach(gm, targer_pos, NULL);
	int move_ = unit->UnitSlipMove(gm, unit->GetSpeed(unit->GetAngle()), angle_);
	if(move_ == -1 || (dis_ < 10 && (count % 10 == 0)))
	{
		moving = false;
		StateChange(MSI_LOST);
	}
}
void CUser::PartyBBSRegister(char *pBuf)
{
	CUser* pUser = NULL;
	int index = 0, send_index = 0;	// Basic Initializations. 			
	BYTE result = 0; short bbs_len = 0;
	char send_buff[256]; memset(send_buff, NULL, 256);
	int i = 0, counter = 0;

	if (m_sPartyIndex != -1) goto fail_return;	// You are already in a party!
	if (m_bNeedParty == 2) goto fail_return;	// You are already on the BBS!

	m_bNeedParty = 2;	// Success! Now you officially need a party!!!
	result = 1;

	SetByte(send_buff, 2, send_index);	// Send new 'Need Party Status' to region!!!
	SetByte(send_buff, m_bNeedParty, send_index);
	StateChange(send_buff);

	send_index = 0; memset(send_buff, NULL, 256);	// Now, let's find out which page the user is on.
	for (i = 0 ; i < MAX_USER ; i++) {
		pUser = m_pMain->GetUnsafeUserPtr(i);
		if (pUser == NULL
			|| pUser->getNation() != getNation()
			|| pUser->m_bNeedParty == 1) 
			continue;

		if( !(   ( pUser->m_pUserData->m_bLevel <= (int)(m_pUserData->m_bLevel * 1.5) && pUser->m_pUserData->m_bLevel >= (int)(m_pUserData->m_bLevel * 1.5)) 
			  || ( pUser->m_pUserData->m_bLevel <= (m_pUserData->m_bLevel+8) && pUser->m_pUserData->m_bLevel >= ((int)(m_pUserData->m_bLevel)-8) ) 
		) ) continue;

		if (pUser->GetSocketID() == GetSocketID()) break;
		counter++;		
	}

	SetShort(send_buff, counter / MAX_BBS_PAGE, send_index);
	PartyBBSNeeded(send_buff, PARTY_BBS_REGISTER);
	return;

fail_return:
	SetByte(send_buff, WIZ_PARTY_BBS, send_index);
	SetByte(send_buff, PARTY_BBS_REGISTER, send_index);
	SetByte(send_buff, result, send_index);
	Send(send_buff, send_index);
	return;
}
Exemple #13
0
Presenter::Presenter(IView *view)
{
    this->view = view;
    this->game = new GameController();

    QObject* qview = dynamic_cast<QObject*>(view);
    connect(qview, SIGNAL(onNewGame()), this->game, SLOT(onNewGame()));
    connect(qview, SIGNAL(onPause()), this->game, SLOT(onPause()));
    connect(qview, SIGNAL(onRotate()), this->game, SLOT(onRotate()));
    connect(qview, SIGNAL(onToLeft()), this->game, SLOT(onMoveLeft()));
    connect(qview, SIGNAL(onToRight()), this->game, SLOT(onMoveRight()));
    connect(qview, SIGNAL(onSpeedup()), this->game, SLOT(onSpeedup()));
    connect(qview, SIGNAL(onEndGame()), this->game, SLOT(onEnd()));

    connect(game, SIGNAL(onStateChanged()), this, SLOT(StateChange()));
    connect(game, SIGNAL(onGameEnd()), this, SLOT(EndGame()));
    // instead of speedup
    connect(qview, SIGNAL(onMakeMove()), this->game, SLOT(onMove()));

}
bool GUIManager::Update(const FrameEvent& evt)
{		
	static bool clickedMouse = false;

	if(mCurrentState != GAMEENGINE.GetStateManager()->GetCurrentState())
		StateChange();

	CEGUI::System::getSingleton().injectMouseMove(GAMEENGINE.GetMouse()->getMouseState().X.rel, GAMEENGINE.GetMouse()->getMouseState().Y.rel);
	
	if(!clickedMouse && GAMEENGINE.GetMouse()->getMouseState().buttonDown(OIS::MB_Left))
	{
		CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::LeftButton);
		CEGUI::System::getSingleton().injectMouseButtonClick(CEGUI::LeftButton);
		clickedMouse = true;
	}
	else if(!GAMEENGINE.GetMouse()->getMouseState().buttonDown(OIS::MB_Left))
		clickedMouse = false;

	return true;
}
QTSS_Error QTSSAccessLogModuleDispatch(QTSS_Role inRole, QTSS_RoleParamPtr inParamBlock)
{
	switch (inRole)
	{
	case QTSS_Register_Role:
		return Register(&inParamBlock->regParams);
	case QTSS_StateChange_Role:
		return StateChange(&inParamBlock->stateChangeParams);
	case QTSS_Initialize_Role:
		return Initialize(&inParamBlock->initParams);
	case QTSS_RereadPrefs_Role:
		return RereadPrefs();
	case QTSS_RTSPPostProcessor_Role:
		return PostProcess(&inParamBlock->rtspPostProcessorParams);
	case QTSS_ClientSessionClosing_Role:
		return ClientSessionClosing(&inParamBlock->clientSessionClosingParams);
	case QTSS_Shutdown_Role:
		return Shutdown();
	}
	return QTSS_NoErr;
}
LNetworkConnectionMonitor::LNetworkConnectionMonitor( QObject* parent ) :
    NetworkConnectionMonitor( parent )
{
    m_nmInterface = new QDBusInterface( QString( "org.freedesktop.NetworkManager" ),
                                        QString( "/org/freedesktop/NetworkManager" ),
                                        QString( "org.freedesktop.NetworkManager" ),
                                        QDBusConnection::systemBus(),
                                        this );

    //get current connection state
    QDBusInterface* dbusInterface = new QDBusInterface( QString( "org.freedesktop.NetworkManager" ),
                                                        QString( "/org/freedesktop/NetworkManager" ),
                                                        QString( "org.freedesktop.DBus.Properties" ),
                                                        QDBusConnection::systemBus(),
                                                        this );

    QDBusReply<QVariant> reply = dbusInterface->call( "Get", "org.freedesktop.NetworkManager", "state" );
    if ( reply.isValid() )
    {
        if ( reply.value() == Connected )
        {
            setConnected( true );
        }
        else if ( reply.value() == Disconnected )
        {
            setConnected( false );
        }
    }
    else
    {
        qDebug() << "Error: " << reply.error();
    }
    delete dbusInterface;

    //connect network manager signals
   connect( m_nmInterface, SIGNAL( StateChange( uint ) ), this, SLOT( onStateChange( uint ) ) );

}
Exemple #17
0
//---------------------------------------------------------------------------
void TSessionLog::ReflectSettings()
{
  TGuard Guard(FCriticalSection);

  bool ALogging =
    !FClosed &&
    ((FParent != nullptr) || FConfiguration->GetLogging());

  if (FLogging != ALogging)
  {
    FLogging = ALogging;
    StateChange();
  }

  // if logging to file was turned off or log file was changed -> close current log file
  if ((FFile != nullptr) &&
      (!LogToFile() || (FCurrentLogFileName != FConfiguration->GetLogFileName())))
  {
    CloseLogFile();
  }

  DeleteUnnecessary();
}
void tSonarSourceStateMachine::ChangeState(SonarCommon::eSonarServerState NewState)
{
    if(!m_HaveHardware && NewState == SonarCommon::eSonarServerState_Server)
    {
        NewState = SonarCommon::eSonarServerState_NoServer;
    }

    QString serverClass = tSonarSourceStateMachine::GetClassString(m_Class);
    DbgPrintf("tSonarSourceStateMachine(%s)::Changing state from %s to %s", serverClass.toStdString().c_str(), m_StateStrings[m_State], m_StateStrings[NewState]);

    // NSW-25760 Luigi - StructureScan 3D source appearing in source list for lowrance products
    //if (tSonar::Instance()->GetSaveAndKeepSourceSelected() == true)
    {
        if(NewState != m_State)
        {
            if(NewState == SonarCommon::eSonarServerState_Server)
            {
                m_pSettings->SetValue<bool>(true, m_IamServer, "IamServer");
            }
            else
            {
                m_pSettings->SetValue<bool>(false, m_IamServer, "IamServer");
            }
         }
    }
    
    bool stillServer = SonarCommon::IsServerState(m_State) && SonarCommon::IsServerState(NewState);
    m_State = NewState;

    // If we were a server before and still are a server, then no need to emit
    if(!stillServer)
    {
        DbgPrintf("SonarStatemachine: (%s) %s", m_Class == SonarCommon::eSonarServer_Conventional ? "conv" : "struc", m_StateStrings[m_State]);
        emit StateChange(m_State, m_Class);
    }
}
Exemple #19
0
void CTwain::SetState(TW_STATE nS)
{
	if (nState != nS) {
#ifdef _DEBUG
		if (bTrace) {
			LPCTSTR pzState[] = {
				g_szEmptyString,
				_T("1(PRE_SESSION)"),
				_T("2(SOURCE_MANAGER_LOADED)"),
				_T("3(SOURCE_MANAGER_OPEN)"),
				_T("4(SOURCE_OPEN)"),
				_T("5(SOURCE_ENABLED)"),
				_T("6(TRANSFER_READY)"),
				_T("7(TRANSFERRING)")
			};

			ATLTRACE(_T("TWAIN:State %s -> %s\n"), pzState[nState], pzState[nS]);
		}
#endif

		nState = nS;				// update the 'global'
		StateChange(nS);			// notify derived classes via callback
	}
} // SetState
Exemple #20
0
void ChoosePowerState::Init()
{
	std::vector<FreePositions> dummyVar;
	List<EnemyWithStates> dummyList;

	Entity dummyEnt = _builder->EntityC().Create();
	_allPowers.push_back(new LockOnStrike(_builder, dummyEnt, &dummyList));
	_allPowers.push_back(new RandomBlink(_builder, dummyEnt, dummyVar));
	_allPowers.push_back(new CharmPower(_builder, dummyEnt, &dummyList));
	_allPowers.push_back(new TimeStopper(_builder, dummyEnt, &dummyList));
	_allPowers.push_back(new RegenPower(_builder, nullptr, dummyEnt));
	_allPowers.push_back(new LifeDrain(_builder, dummyEnt, &dummyList, nullptr));

	size_t firstPower = rand() % _allPowers.size();
	size_t secondPower = (firstPower + 1) % _allPowers.size();

	auto options = System::GetOptions();
	float pctX = options->GetScreenResolutionWidth() / 100.0f;
	float pctY = options->GetScreenResolutionHeight() / 100.0f;
	float midX = options->GetScreenResolutionWidth() / 2.0f;
	float midY = options->GetScreenResolutionHeight() / 2.0f;


	_choice2 = _builder->CreateOverlay(XMFLOAT3(midX - 30.0f * pctX, midY - 20.0f * pctY, 0.0f), 28.0f * pctX, 40.0f * pctY, "Assets/Textures/menuthing.png");
	_choice1 = _builder->CreateOverlay(XMFLOAT3(midX + 2.0f * pctX, midY - 20.0f * pctY, 0.0f), 28.0f * pctX, 40.0f * pctY, "Assets/Textures/menuthing.png");
	_choice2Text = _builder->CreateLabel(XMFLOAT3(midX + 4.0f * pctX, midY - 18.0f * pctY, 0.0f), _allPowers[firstPower]->GetDescription(40),20, XMFLOAT4(0.8f, 0.8f, 0.5f, 1.0f), 1.0f, 1.0f, "");
	_choice1Text = _builder->CreateLabel(XMFLOAT3(midX - 29.0f * pctX, midY - 18.0f * pctY, 0.0f), _allPowers[secondPower]->GetDescription(40), 20, XMFLOAT4(0.8f, 0.8f, 0.5f, 1.0f), 1.0f, 1.0f, "");



	_powerLabel = _builder->CreateLabel(XMFLOAT3(midX - 30.0f * pctX, midY - 10.0f * pctY - 20.0f * pctY, 0.0f), "Choose your powers", 35, XMFLOAT4(0.8f, 0.8f, 0.4f, 1.0f), 60.0f * pctX, 8.0f * pctY, "");

	GameState* gstate = (GameState*)this->_savedState;
	auto i = System::GetInput();
	i->HideCursor(false);
	i->LockMouseToCenter(false);
	_builder->Event()->BindEvent(_choice1, EventManager::EventType::LeftClick, [this, i, firstPower, gstate]() {
		_powerToGive = _allPowers[firstPower]->GetType();
		i->LockMouseToCenter(true);
		_controller->ReleaseEntity(_choice1);
		_controller->ReleaseEntity(_choice2);
		_controller->ReleaseEntity(_powerLabel);
		_controller->ReleaseEntity(_choice1Text);
		_controller->ReleaseEntity(_choice2Text);
		i->HideCursor(true);
		gstate->ProgressNoNextLevel(_powerToGive);
		System::GetAudio()->PlaySoundEffect(L"choosepower.wav", 1.0f);
		ChangeStateTo(StateChange(gstate, false, true, false));

	});
	_builder->Event()->BindEvent(_choice2, EventManager::EventType::LeftClick, [this, i, secondPower, gstate]() {
		_powerToGive = _allPowers[secondPower]->GetType();
		i->LockMouseToCenter(true);
		i->LockMouseToWindow(true);
		_controller->ReleaseEntity(_choice1);
		_controller->ReleaseEntity(_choice2);
		_controller->ReleaseEntity(_powerLabel);
		_controller->ReleaseEntity(_choice1Text);
		_controller->ReleaseEntity(_choice2Text);
		i->HideCursor(true);
		gstate->ProgressNoNextLevel(_powerToGive);
		System::GetAudio()->PlaySoundEffect(L"choosepower.wav", 1.0f);
		ChangeStateTo(StateChange(gstate, false, true, false));
	});


	_camera = _builder->CreateCamera(XMVectorSet(0.0f, 0.0f, 0.0f, 1.0f));
	_builder->Transform()->SetDirection(_camera, XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f));
	_backgroundObject = _builder->CreateObject(XMVectorSet(0.0f, 0.0f, 3.0f, 1.0f),
		XMVectorSet(0, 0, 0, 0),
		XMVectorSet(32.0f, 32.0f, 1.0f, 0.0f),
		"Assets/Models/cube.arf",
		"Assets/Textures/Dungeon/0/Wall_Dif.png",
		"Assets/Textures/Dungeon/0/Wall_NM.png",
		"Assets/Textures/Dungeon/0/Wall_Disp.png",
		"Assets/Textures/Dungeon/0/Wall_Roughness.png",
		"Assets/Textures/Dungeon/0/Wall_Glossiness.png");
	_builder->Material()->SetMaterialProperty(_backgroundObject, "ParallaxScaling", 0.04f, "Shaders/GBuffer.hlsl");
	_builder->Material()->SetMaterialProperty(_backgroundObject, "ParallaxBias", -0.03f, "Shaders/GBuffer.hlsl");
	_builder->Material()->SetMaterialProperty(_backgroundObject, "TexCoordScaleU", 32.0f, "Shaders/GBuffer.hlsl");
	_builder->Material()->SetMaterialProperty(_backgroundObject, "TexCoordScaleV", 32.0f, "Shaders/GBuffer.hlsl");
	_light = _builder->EntityC().Create();
	_builder->Light()->BindPointLight(_light, XMFLOAT3(3.0f, 3.0f, 1.0f), 10.0f, XMFLOAT3(1.0f, 1.0f, 1.0f), 4.0f);

}
void CUser::PartyInsert()	// ?????? ??? ???.  ????? ??Y?? ???°??? ???
{
	int send_index = 0, i = 0;
	CUser* pUser = NULL;
	_PARTY_GROUP* pParty = NULL;
	char send_buff[256]; memset( send_buff, 0x00, 256 );
	if( m_sPartyIndex == -1 ) return;

	pParty = m_pMain->m_PartyArray.GetData( m_sPartyIndex );
	if( !pParty ) {				// ????? ???
		m_sPartyIndex = -1;
		return;
	}
	
	for(int i=0; i<8; i++) {	// Send your info to the rest of the party members.
		if (pParty->uid[i] == GetSocketID())
			continue;

		pUser = m_pMain->GetUserPtr(pParty->uid[i]);
		if (pUser == NULL)
			continue;

		memset( send_buff, 0x00, 256 ); send_index = 0;
		SetByte( send_buff, WIZ_PARTY, send_index );
		SetByte( send_buff, PARTY_INSERT, send_index );
		SetShort( send_buff, pParty->uid[i], send_index );
		SetKOString(send_buff, pUser->m_pUserData->m_id, send_index);
		SetShort( send_buff, pParty->sMaxHp[i], send_index );
		SetShort( send_buff, pParty->sHp[i], send_index );
		SetByte( send_buff, pParty->bLevel[i], send_index );
		SetShort( send_buff, pParty->sClass[i], send_index );
		SetShort( send_buff, pUser->m_iMaxMp, send_index );
		SetShort( send_buff, pUser->m_pUserData->m_sMp, send_index );
		Send( send_buff, send_index );
	}

	for(i=0; i<8; i++ ) {
		if( pParty->uid[i] == -1 ) {
			pParty->uid[i] = m_Sid;
			pParty->sMaxHp[i] = m_iMaxHp;
			pParty->sHp[i] = m_pUserData->m_sHp;
			pParty->bLevel[i] = m_pUserData->m_bLevel;
			pParty->sClass[i] = m_pUserData->m_sClass;
			break;
		}
	}

	pUser = m_pMain->GetUserPtr(pParty->uid[0]);
	if (pUser == NULL)
		return;

	if (pUser->m_bNeedParty == 2 && pUser->m_sPartyIndex != -1) {
		pUser->m_bNeedParty = 1;
		memset( send_buff, 0x00, 256 ); send_index = 0;	
		SetByte(send_buff, 2, send_index);
		SetByte(send_buff, pUser->m_bNeedParty, send_index);
		pUser->StateChange(send_buff);
	}

	if (m_bNeedParty == 2 && m_sPartyIndex != -1) {		
		m_bNeedParty = 1;	
		memset( send_buff, 0x00, 256 ); send_index = 0;	
		SetByte(send_buff, 2, send_index);
		SetByte(send_buff, m_bNeedParty, send_index);
		StateChange(send_buff);
	}

	memset( send_buff, 0x00, 256 ); send_index = 0;
	SetByte( send_buff, WIZ_PARTY, send_index );
	SetByte( send_buff, PARTY_INSERT, send_index );
	SetShort( send_buff, m_Sid, send_index );
	SetKOString( send_buff, m_pUserData->m_id, send_index );
	SetShort( send_buff, m_iMaxHp, send_index );		
	SetShort( send_buff, m_pUserData->m_sHp, send_index );
	SetByte( send_buff, m_pUserData->m_bLevel, send_index );
	SetShort( send_buff, m_pUserData->m_sClass, send_index );
	SetShort( send_buff, m_iMaxMp, send_index );
	SetShort( send_buff, m_pUserData->m_sMp, send_index );
	m_pMain->Send_PartyMember( m_sPartyIndex, send_buff, send_index );

	// AI Server
	BYTE byIndex = i;
	send_index = 0; memset( send_buff, 0x00, 256 );
	SetByte( send_buff, AG_USER_PARTY, send_index );
	SetByte( send_buff, PARTY_INSERT, send_index );
	SetShort( send_buff, pParty->wIndex, send_index );
	SetByte( send_buff, byIndex, send_index );
	SetShort( send_buff, pParty->uid[i], send_index );
	//SetShort( send_buff, pParty->sHp[i], send_index );
	//SetByte( send_buff, pParty->bLevel[i], send_index );
	//SetShort( send_buff, pParty->sClass[i], send_index );
	m_pMain->Send_AIServer(m_pUserData->m_bZone, send_buff, send_index);
}
 void addStateChange(const StateMachineHolder& sm, const std::string& expected, bool negate)
 {
     states.push_back(StateChange(sm, expected, negate, false));
 }
 void addStateCheck(const StateMachineHolder& sm, const std::string& state, bool negate)
 {
     states.push_back(StateChange(sm, state, negate, true));
 }
Exemple #24
0
void PauseState::Init()
{
    auto i = System::GetInput();
    auto o = System::GetOptions();
    float width = (float)o->GetScreenResolutionWidth();
    float height = (float)o->GetScreenResolutionHeight();
    auto c = _controller;
    auto a = System::GetInstance()->GetAudio();
    float widthPercentOfDefault = (1.0f / 1920.0f) * width;
    float heightPercentOfDefault = (1.0f / 1080.0f) * height;
    float fontSize = 40 ;

    XMFLOAT4 TextColor = XMFLOAT4(41.0f / 255.0f, 127.0f / 255.0f, 185.0f / 255.0f, 1.0f);

    // Radiant text
    Entity text  = _builder->CreateLabel(
                       XMFLOAT3(width / 2.0f - 110.0f, 25.0f, 0.0f),
                       "Game Paused",
                       fontSize,
                       TextColor,
                       250.0f,
                       45.0f,
                       "");
    _builder->Transform()->SetPosition(text, XMFLOAT3(width / 2.0f - _builder->Text()->GetLength(text) / 2.0f, 25.0f, 0.0f));

    // Resume button
    Entity b1 = _builder->CreateButton(
                    XMFLOAT3(width / 2.0f - 110.0f, height/4.0f, 0.0f),
                    "Resume Game",
                    fontSize,
                    TextColor,
                    "",
                    []()
    {

    });

    _builder->Transform()->SetPosition(b1, XMFLOAT3(width / 2.0f - _builder->Text()->GetLength(b1) / 2.0f, height / 1.5f, 0.0f));

    //Main menu button
    Entity b5 = _builder->CreateButton(
                    XMFLOAT3(width / 2.0f - 110.0f, height / 4.0f, 0.0f),
                    "Main Menu",
                    fontSize,
                    TextColor,
                    "",
                    [i, a]()
    {
        a->PlaySoundEffect(L"menuclick.wav", 1);
        ChangeStateTo(StateChange(new MenuState()));
    });

    _builder->Transform()->SetPosition(b5, XMFLOAT3(width / 2.0f - _builder->Text()->GetLength(b5) / 2.0f, height / 1.5f + 55.0f, 0.0f));

    // Exit button
    Entity b2 = _builder->CreateButton(
                    XMFLOAT3(width / 2.0f - 110.0f, height / 4.0f + 55.0f, 0.0f),
                    "Exit to desktop",
                    fontSize,
                    TextColor,
                    "",
    [a]() {
        a->PlaySoundEffect(L"menuclick.wav", 1);
        ExitApplication;
    });
    _builder->Transform()->SetPosition(b2, XMFLOAT3(width / 2.0f - _builder->Text()->GetLength(b2)/2.0f, height / 1.5f + 110.0f, 0.0f));

    _controller->BindEvent(b1, EventManager::EventType::LeftClick,
                           [i, a, this, text, b1, b2, b5]()
    {
        _controller->ReleaseEntity(text);
        _controller->ReleaseEntity(b1);
        _controller->ReleaseEntity(b2);
        _controller->ReleaseEntity(b5);
        i->LockMouseToCenter(true);
        i->LockMouseToWindow(true);
        i->HideCursor(true);
        i->MouseUp(VK_LBUTTON);
        a->PlaySoundEffect(L"menuclick.wav", 1);
        ChangeStateTo(StateChange(_savedState,false,true,true));
        _savedState = nullptr;
    });
    _controller->BindEvent(b1, EventManager::EventType::Update, [i, a, this, text, b1, b2, b5]()
    {
        if (i->IsKeyPushed(VK_ESCAPE))
        {
            _controller->ReleaseEntity(text);
            _controller->ReleaseEntity(b1);
            _controller->ReleaseEntity(b2);
            _controller->ReleaseEntity(b5);
            i->LockMouseToCenter(true);
            i->LockMouseToWindow(true);
            i->HideCursor(true);
            i->MouseUp(VK_LBUTTON);
            a->PlaySoundEffect(L"menuclick.wav", 1);
            ChangeStateTo(StateChange(_savedState, false, true, true));
            _savedState = nullptr;
        }
    });

}
/**
*
* FsmL()
*
* @param TMmfAudioOggRecEvents aEventCode
* @param CMdaAudioClipUtility::TState aRecorderState
* @param TInt aError
*
*/
void CTestMmfOggAudioRecorderBase::FsmL(TMmfAudioOggRecEvents aEventCode, CMdaAudioClipUtility::TState aRecorderState, TInt aError)
    {
    if ((iExpectedError != KErrUnderflow) && (iError == KErrUnderflow))
        {
        INFO_PRINTF1(_L("Underflow!"));
        }
    else if (iExpectedRecEvent != aEventCode)
        {
        ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedRecEvent, aEventCode);
        CActiveScheduler::Stop();
        }
    else if (iExpectedError != aError)
        {
        ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, iError);
        CActiveScheduler::Stop();
        }
    else if (iExpectedRecState != aRecorderState)
        {
        ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecState, aRecorderState);
        CActiveScheduler::Stop();
        }
    else
        {
        switch (iState)
            {
            case 0:
                {
                INFO_PRINTF2(_L("Opening the file %S.."), &iFileName);
                iAudioRecorder->OpenFileL(iFileName);
                StateChange(EOggMoscoStateChange, CMdaAudioClipUtility::EOpen);
                break;
                }

            case 1:
                {
                //AfterOpenL();
                INFO_PRINTF1(_L("iAudioRecorder->SetMaxWriteLength(40000)"));
                iAudioRecorder->SetMaxWriteLength(KMaxWriteLength);
                INFO_PRINTF1(_L("Record the audio file..."));
                iAudioRecorder->RecordL();
                StateChange(EOggMoscoStateChange, CMdaAudioClipUtility::ERecording);
                break;    
                }
			
			case 2:
			    {
			    StateChange(EOggMoscoStateChange, CMdaAudioClipUtility::EOpen);
				break;
			    }
				
            case 3:
                {
                // Check if there's error while recording the file
                if (aError != KErrNone)
                    {
                    ERR_PRINTF2(_L("Recording the audio file failed, unexpected error %d."), aError);
                    }
                else
                    {
                    INFO_PRINTF1(_L("Audio file opened and recorded."));
                    iTestStepResult = EPass;
                    }
                iAudioRecorder->Close();
                CActiveScheduler::Stop();
                break;    
                }

            default:
                {
                INFO_PRINTF1(_L("Invalid Audio event!"));
                }
            }
        }
    }
Exemple #26
0
void GameOverState::Init()
{
	auto o = System::GetOptions();
	float width = (float)o->GetScreenResolutionWidth();
	float height = (float)o->GetScreenResolutionHeight();
	auto i = System::GetInput();
	auto c = _controller;
	auto a = System::GetInstance()->GetAudio();
	a->PlayBGMusic(L"mamb.wav", 0.5f);
	XMFLOAT4 TextColor = XMFLOAT4(41.0f / 255.0f, 127.0f / 255.0f, 185.0f / 255.0f, 1.0f);
	XMFLOAT4 ScoreTextColor = XMFLOAT4(17.0f / 255.0f, 166.0f / 255.0f, 67.0f / 255.0f, 1.0f);

	//==========================
	//====	High Score Text	====
	//==========================

	float widthPercentOfDefault = (1.0f / 1920.0f) * width;
	float heightPercentOfDefault = (1.0f / 1080.0f) * height;

	Entity scoreOverlay = _builder->CreateOverlay(XMFLOAT3(0.0f, 0.0f, 0.0f), 550.0f*widthPercentOfDefault, 350.0f*heightPercentOfDefault, "Assets/Textures/GameOverOverlay.png");

	float fontSize = 40 * widthPercentOfDefault;

	//High Score
	Entity textHighScore = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		"Statistics",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(textHighScore, (uint)(fontSize*1.5f));
	_builder->Transform()->SetPosition(textHighScore, XMFLOAT3(550.0f*widthPercentOfDefault / 2 - _builder->Text()->GetLength(textHighScore) / 2, 0.0f, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, textHighScore);

	//Light High Score
	Entity totalLightHighScoreText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		"Light Collected:",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalLightHighScoreText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalLightHighScoreText, XMFLOAT3(0.0f, fontSize*1.5f + fontSize * 0 + 10.0f * 1 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalLightHighScoreText);

	Entity totalLightCollectedText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		std::to_string(_thePlayer->GetTotalLightCollected()),
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalLightCollectedText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalLightCollectedText, XMFLOAT3(560.0f*widthPercentOfDefault / 2, fontSize*1.5f + fontSize * 0 + 10.0f * 1 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalLightCollectedText);


	//Shots Fired
	Entity totalShotsFiredHighScoreText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		"Shots Fired:",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalShotsFiredHighScoreText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalShotsFiredHighScoreText, XMFLOAT3(0.0f, fontSize*1.5f + fontSize * 1 + 10.0f * 2 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalShotsFiredHighScoreText);

	Entity totalShotsFiredText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		std::to_string(_thePlayer->GetShotsFired()),
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalShotsFiredText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalShotsFiredText, XMFLOAT3(560.0f*widthPercentOfDefault / 2, fontSize*1.5f + fontSize * 1 + 10.0f * 2 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalShotsFiredText);


	//Shots Connected
	Entity totalShotsConnectedHighScoreText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		"Shots Hitting:",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalShotsConnectedHighScoreText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalShotsConnectedHighScoreText, XMFLOAT3(0.0f, fontSize*1.5f + fontSize * 2 + 10.0f * 3 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalShotsConnectedHighScoreText);

	Entity totalShotsConnectedText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		std::to_string(_thePlayer->GetShotsConnected()),
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalShotsConnectedText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalShotsConnectedText, XMFLOAT3(560.0f*widthPercentOfDefault / 2, fontSize*1.5f + fontSize * 2 + 10.0f * 3 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalShotsConnectedText);


	//Hit Chance
	Entity totalHitChanceHighScoreText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		"Hit Percent:",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalHitChanceHighScoreText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalHitChanceHighScoreText, XMFLOAT3(0.0f, fontSize*1.5f + fontSize * 3 + 10.0f * 4 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalHitChanceHighScoreText);
	float value = _thePlayer->GetHitPercent();
	int intValue = static_cast<int>(value);
	Entity totalHitPercentText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		std::to_string(intValue) + "." + std::to_string(static_cast<int>((value-(float)intValue)*100))+ "%",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalHitPercentText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalHitPercentText, XMFLOAT3(560.0f*widthPercentOfDefault / 2, fontSize*1.5f + fontSize * 3 + 10.0f * 4 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalHitPercentText);


	//Enemies Defeated
	Entity totalEnemiesDefeatedScoreText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		"Enemies Defeated:",
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalEnemiesDefeatedScoreText, (uint)(fontSize*0.55f));
	_builder->Transform()->SetPosition(totalEnemiesDefeatedScoreText, XMFLOAT3(0.0f, fontSize*1.5f + fontSize * 4 + 10.0f * 5 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalEnemiesDefeatedScoreText);

	Entity totalEnemiesDefeatedText = _builder->CreateLabel(XMFLOAT3(0.0f, 0.0f, 0.0f),
		std::to_string(_thePlayer->GetEnemiesDefeated()),
		fontSize,
		ScoreTextColor,
		125.0f,
		25.0f,
		"");
	_builder->Text()->ChangeFontSize(totalEnemiesDefeatedText, (uint)(fontSize*0.75f));
	_builder->Transform()->SetPosition(totalEnemiesDefeatedText, XMFLOAT3(560.0f*widthPercentOfDefault / 2, fontSize*1.5f + fontSize * 4 + 10.0f * 5 * heightPercentOfDefault, 0.0f));
	_builder->Transform()->BindChild(scoreOverlay, totalEnemiesDefeatedText);



	//Set the overlay, and all it's childrens', positions.
	_builder->Transform()->SetPosition(scoreOverlay, XMFLOAT3(width - 550.0f*widthPercentOfDefault, height - 350.0f*heightPercentOfDefault, 0.0f));


	//==========================
	//====		Buttons		====
	//==========================


	// Start game button
	Entity b1 = _builder->CreateButton(
		XMFLOAT3(50.0f, height - 230.0f, 0.0f),
		"New Game",
		fontSize,
		TextColor,
		"",
		[i, a]()
	{
		a->PlaySoundEffect(L"menuclick.wav", 1);
		ChangeStateTo(StateChange(new GameState()));
	});

	//Options button
	Entity b5 = _builder->CreateButton(
		XMFLOAT3(50.0f, height - 180.0f, 0.0f),
		"Main Menu",
		fontSize,
		TextColor,
		"",
		[i, a]()
	{
		a->PlaySoundEffect(L"menuclick.wav", 1);
		ChangeStateTo(StateChange(new MenuState));
	});


	// Exit button
	Entity b2 = _builder->CreateButton(
		XMFLOAT3(50.0f, height - 130.0f, 0.0f),
		"Exit",
		fontSize,
		TextColor,
		"",
		[a]() {
		a->PlaySoundEffect(L"menuclick.wav", 1);
		ExitApplication;
	});

	//==========================
	//====	Background		====
	//==========================

	// Game Over text
	_builder->CreateLabel(
		XMFLOAT3(width / 2.0f - 100.0f, 25.0f, 0.0f),
		"Game Over",
		fontSize,
		TextColor,
		250.0f,
		45.0f,
		"");

	_altar = _builder->CreateObject(
		XMVectorSet(1.5f, 0.0f, 1.0f, 1.0f),
		XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f),
		XMVectorSet(0.5f, 0.5f, 0.5f, 0.0f),
		"Assets/Models/Altar.arf",
		"Assets/Textures/Altar_Albedo.png",
		"Assets/Textures/Altar_NM.png",
		"Assets/Textures/default_displacement.png",
		"Assets/Textures/Altar_Roughness.png");
	_builder->Material()->SetMaterialProperty(_altar, "ParallaxBias", -0.05f, "Shaders/GBuffer.hlsl");
	_builder->Material()->SetMaterialProperty(_altar, "ParallaxScaling", 0.12f, "Shaders/GBuffer.hlsl");


	_builder->Bounding()->CreateBoundingSphere(_altar, 2.0f);

	_altarCenterLight = _builder->EntityC().Create();
	_builder->Light()->BindPointLight(_altarCenterLight, XMFLOAT3(0.0f, 0.0f, 0.0f), 3.0f, XMFLOAT3(0.0f, 0.25f, 0.35f), 10.0f);
	_builder->Light()->ChangeLightBlobRange(_altarCenterLight, 1.0f);
	_builder->Transform()->CreateTransform(_altarCenterLight);
	_builder->Transform()->SetPosition(_altarCenterLight, XMFLOAT3(0.0f, 1.4f, 0.0f));
	_builder->Transform()->BindChild(_altar, _altarCenterLight);

	for (int i = 0; i < _numAltarBolts; ++i)
	{
		_altarBolts[i] = _builder->EntityC().Create();
		_builder->Light()->BindPointLight(_altarBolts[i], XMFLOAT3(0.0f, 0.0f, 0.0f), 1.0f, XMFLOAT3(0.35f, 1.0f, 0.25f), 5.0f);
		_builder->Light()->ChangeLightBlobRange(_altarBolts[i], 0.3f);
		_builder->Lightning()->CreateLightningBolt(_altarBolts[i], _altarCenterLight);
		_builder->Lightning()->SetScale(_altarBolts[i], XMFLOAT2(0.4f, 0.4f));
		_builder->Transform()->CreateTransform(_altarBolts[i]);
		_builder->Transform()->BindChild(_altarCenterLight, _altarBolts[i]);

		float angle = XM_2PI / _numAltarBolts;
		_builder->Transform()->SetPosition(_altarBolts[i], XMFLOAT3(1.5f * sinf(i * angle), 0.0f, 1.5f * cosf(i * angle)));

		_altarBoltAngle[i] = i * angle;
	}

	_builder->Transform()->SetPosition(_altar, XMFLOAT3(0.0f, 0.0f, 0.0f));


	_controller->BindEventHandler(_altar, EventManager::Type::Object);
	_controller->BindEvent(_altar, EventManager::EventType::Update,
		[this]()
	{
		_builder->Transform()->RotateYaw(_altarCenterLight, _gameTimer.DeltaTime() * 25.0f);
		static float animDeltaTime = 0;
		animDeltaTime += _gameTimer.DeltaTime();
		bool resetAnimTime = false;
		for (int i = 0; i < _numAltarBolts; ++i)
		{
			_altarBoltAngle[i] += _gameTimer.DeltaTime() * XM_PIDIV2 + _gameTimer.DeltaTime()*XM_PI * (i / 6);
			if (_altarBoltAngle[i] >= XM_2PI)
				_altarBoltAngle[i] -= XM_2PI;

			XMVECTOR pos = _builder->Transform()->GetPosition(_altarBolts[i]);
			_builder->Transform()->SetPosition(_altarBolts[i], XMVectorSetY(pos, 0.8f * sinf(_altarBoltAngle[i])));

			if (animDeltaTime >= 0.02f)
			{
				resetAnimTime = true;
				_builder->Lightning()->Animate(_altarBolts[i]);
			}
		}

		if (resetAnimTime)
			animDeltaTime -= 0.02f;

	});

	Entity camera = _builder->CreateCamera(XMVectorSet(0.0f, 1.0f, -3.0f, 0.0f));
	_builder->Transform()->SetRotation(camera, XMFLOAT3(0.0f, 0.0f, 0.0f));



	//==========================
	//====		Update		====
	//==========================

	_controller->BindEvent(b2, EventManager::EventType::Update, [i, this]()
	{
		if (i->IsKeyPushed(VK_ESCAPE))
		{
			ExitApplication;
		}
		if (i->IsKeyPushed('1'))
		{
			ChangeStateTo(StateChange(new GameState()));
		}
		if (i->IsKeyPushed('2'))
		{
			ChangeStateTo(StateChange(new MenuState()));
		}
	}
	);

}