예제 #1
0
/************************************************************************
*  游戏剧情的章节转换
************************************************************************/
void Controller::ChangeChapter(int nChapterID)
{
	if (nChapterID != CHAPTER_1 && nChapterID != CHAPTER_2 && nChapterID != CHAPTER_3 && nChapterID != CHAPTER_4)
	{
		return;
	}

	vector<Player*> playerList = Game()->GetPlayerManager()->GetPlayerList();
	if (m_nCurrentChapter != CHAPTER_0)
	{
		for (int i = 0; i < playerList.size(); ++i)
		{
			playerList[i]->Action(CodeMsg::code_player_static,right_direction);
		}
	}
	// 设置当前章节的ID
	m_nCurrentChapter = nChapterID;

	

	// 先让玩家停止
	

	// 暂停游戏
	SuspendGame();

	// 移除地图上所有的怪物 
	Game()->GetMonsterManager()->RemoveAllMonster();					

	// 移除地图上所有的装备
	Game()->GetEquipmentManager()->RemoveAllEquipment();			

	// 当前选中的怪物置为空
	m_pCurrentSelectedMonster = 0;														

	// 新建一个boss(每个章节的Boss都不一样)
	m_pBoss = Game()->GetMonsterManager()->CreateBoss();				

	// 场景转换
	Game()->GetSceneManager()->ChangeScene(nChapterID);				

	// 继续游戏
	ContinueGame();
}
예제 #2
0
bool CGameWindow::KeyPress(int c)
{
	if (BaseClass::KeyPress(c))
		return true;

	if (GameServer() && GameServer()->GetCamera())
		GameServer()->GetCamera()->KeyDown(c);

	if (Game())
	{
		for (size_t i = 0; i < Game()->GetNumLocalPlayers(); i++)
		{
			CPlayer* pPlayer = Game()->GetLocalPlayer(i);
			pPlayer->KeyPress(c);
		}
	}

	return false;
}
예제 #3
0
void CGameServer::SetClientNickname(int iClient, const tstring& sNickname)
{
	if (iClient == GetClientIndex() && Game()->GetNumLocalPlayers())
	{
		Game()->GetLocalPlayer(0)->SetPlayerName(sNickname);
		return;
	}

	for (size_t i = 0; i < Game()->GetNumPlayers(); i++)
	{
		if (Game()->GetPlayer(i)->GetClient() == iClient)
		{
			Game()->GetPlayer(i)->SetPlayerName(sNickname);
			return;
		}
	}

	TMsg(sprintf(tstring("Can't find client %d to give nickname %s.\n"), iClient, sNickname.c_str()));
}
예제 #4
0
void CGameServer::RestartLevel()
{
	SetLoading(false);
	AllowPrecaches();
	DestroyAllEntities(tvector<tstring>(), true);
	m_bRestartLevel = true;
	Game()->SetupGame(CVar::GetCVarValue("game_mode"));
	m_bRestartLevel = false;
	SetLoading(false);
}
예제 #5
0
void CGame::Load()
{
	m_iMonsterTexture = GetRenderer()->LoadTextureIntoGL("monster.png");
	m_iCrateTexture = GetRenderer()->LoadTextureIntoGL("crate.png");
	m_iNormalTexture = GetRenderer()->LoadTextureIntoGL("normal.png");

	GraphReset();

	m_projectile_initial_time = Game()->GetTime();
	m_projectile_initial_position = Vector(2, 1, 2);
	m_projectile_initial_velocity = Vector(-1, 3, -1) * 5;
	m_projectile_gravity = Vector(0, -5, 0);
	m_projectile_break_time = Game()->GetTime() + PredictProjectileMaximumHeightTime(m_projectile_initial_velocity, m_projectile_gravity);
	m_projectile_number = 1;

	// Fire the first one
	m_projectile_position[0] = m_projectile_initial_position;
	m_projectile_velocity[0] = m_projectile_initial_velocity;
}
예제 #6
0
Game RoxdokuGame::createGame(int difficulty, int symmetry) {
	if(!m_graph) {
		m_graph = new SKGraph(m_order, TypeRoxdoku);
		m_graph->initRoxdoku();
	}

	Puzzle* puzzle = new Puzzle(m_graph, true);
	puzzle->init(difficulty, symmetry);

	return Game(puzzle);
}
예제 #7
0
Game RoxdokuGame::startEmpty() {
	if(!m_graph) {
		m_graph = new SKGraph(m_order, TypeRoxdoku);
		m_graph->initRoxdoku();
	}

	Puzzle* puzzle = new Puzzle(m_graph, false);
	puzzle->init();

	return Game(puzzle);
}
예제 #8
0
bool CGameServer::LoadFromFile(const tchar* pFileName)
{
	if (!GameServer())
		return false;

	GameServer()->Initialize();

	// Erase all existing entites. We're going to load in new ones!
	GameServer()->DestroyAllEntities();

	std::ifstream i;
	i.open(pFileName, std::ios_base::binary|std::ios_base::in);

	char szTag[8];
	i.read(szTag, 8);
	if (strncmp(szTag, "GameSave", 8) != 0)
		return false;

	CGameServer* pGameServer = GameServer();

	size_t iLoadCRC;
	i.read((char*)&iLoadCRC, sizeof(iLoadCRC));

	if (iLoadCRC != pGameServer->m_iSaveCRC)
		return false;

	i.read((char*)&pGameServer->m_flGameTime, sizeof(pGameServer->m_flGameTime));

	size_t iEntities;
	i.read((char*)&iEntities, sizeof(iEntities));

	for (size_t j = 0; j < iEntities; j++)
	{
		if (!CBaseEntity::UnserializeEntity(i))
			return false;
	}

	for (size_t i = 0; i < GameServer()->GetMaxEntities(); i++)
	{
		if (!CBaseEntity::GetEntity(i))
			continue;

		CBaseEntity::GetEntity(i)->ClientEnterGame();
	}

	Game()->EnterGame();

	if (GameServer()->GetWorkListener())
		GameServer()->GetWorkListener()->SetAction("Encountering resistance", 0);

	GameServer()->SetLoading(false);

	return true;
}
void COverlappedWindow::startNewGame() {
	getGameInfo().isFirstNextStep = true;

	setWindowSize();

	game = Game(getGameInfo().widthGridNumber, getGameInfo().heightGridNumber);
	isGameStarted = true;
	isDoneFirstStep = false;

	::InvalidateRect(handle, 0, 0);
}
예제 #10
0
void CUIMpTradeWnd::OnBtnOkClicked(CUIWindow* w, void* d)
{
	DeleteHelperItems();
	CheckDragItemToDestroy				();
	StorePreset							(_preset_idx_last, true, false, false);
	HideDialog							();
	game_cl_mp* clgame					= smart_cast<game_cl_mp*>(&(Game()));
	VERIFY(clgame);
	clgame->OnBuyMenu_Ok					();
//.	StorePreset							(_preset_idx_last, true, true);
}
예제 #11
0
bool CActor::CanSprint			()
{
	bool can_Sprint = CanAccelerate() && !conditions().IsCantSprint() &&
						Game().PlayerCanSprint(this)
						&& CanRun()
						&& !(mstate_real&mcLStrafe || mstate_real&mcRStrafe)
						&& InventoryAllowSprint()
						;

	return can_Sprint;
}
예제 #12
0
int game_cl_Deathmatch::GetPlayersPlace			(game_PlayerState* ps)
{
	if (!ps) return -1;
	game_cl_GameState::PLAYERS_MAP_IT I=Game().players.begin();
	game_cl_GameState::PLAYERS_MAP_IT E=Game().players.end();

	// create temporary map (sort by kills)
	xr_vector<game_PlayerState*>	Players;
	for (;I!=E;++I)		Players.push_back(I->second);
	std::sort			(Players.begin(),Players.end(),DM_Compare_Players);

	int Place = 1;
	for (u32 i=0; i<Players.size(); i++)
	{
		if (Players[i] == ps)
			return Place;
		Place++;
	};
	return -1;
}
예제 #13
0
s32 UITeamState::GetSummaryFrags() const
{
	typedef game_cl_GameState::PLAYERS_MAP::const_iterator PlCIter;
	game_cl_GameState::PLAYERS_MAP & playersMap = Game().players;
	
	s32		sum = 0;
	PlCIter	eiter = playersMap.end();

	for (PlCIter i = playersMap.begin(); i != eiter; ++i)
	{
		game_PlayerState*	ps = i->second;
		if (!ps)
			continue;
		game_cl_mp* tempGame = smart_cast<game_cl_mp*>(&Game());
		R_ASSERT(tempGame);
		if (static_cast<ETeam>(tempGame->ModifyTeam(ps->team)) == myTeam)
			sum = sum + ps->m_iRivalKills;
	}
	return sum;
}
/*
===============
idCommonLocal::NetReceiveUsercmds
===============
*/
void idCommonLocal::NetReceiveUsercmds( int peer, idBitMsg& msg )
{
	int clientNum = Game()->MapPeerToClient( peer );
	if( clientNum == -1 )
	{
		idLib::Warning( "NetReceiveUsercmds: Could not find client for peer %d", peer );
		return;
	}
	
	NetReadUsercmds( clientNum, msg );
}
예제 #15
0
int CALLBACK WinMain( HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int /*nCmdShow*/ )
{
	#ifndef NDEBUG
		int flag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); /* Get current flag */
		flag ^= _CRTDBG_LEAK_CHECK_DF; /* Turn on leak-checking bit */
		_CrtSetDbgFlag( flag ); /* Set flag to the new value */
	#endif

    Game();

	return 0;
}
예제 #16
0
void ShowStatus(class CCommand* pCommand, tvector<tstring>& asTokens, const tstring& sCommand)
{
	TMsg(tstring("Level: ") + CVar::GetCVarValue("game_level") + "\n");
	TMsg(sprintf(tstring("Clients: %d Entities: %d/%d\n"), GameNetwork()->GetClientsConnected(), CBaseEntity::GetNumEntities(), GameServer()->GetMaxEntities()));

	for (size_t i = 0; i < Game()->GetNumPlayers(); i++)
	{
		const CPlayer* pPlayer = Game()->GetPlayer(i);
		if (!pPlayer)
			continue;

		if (pPlayer->GetClient() < 0)
			TMsg("Local: ");
		else
			TMsg(sprintf(tstring("%d: "), pPlayer->GetClient()));

		TMsg(pPlayer->GetPlayerName());

		TMsg("\n");
	}
}
예제 #17
0
/************************************************************************
*  初始化函数
************************************************************************/
void Controller::Init(const string& strID,const string& strPsd,bool bNetMode)
{
	m_pCurrentSelectedMonster	= 0;								// 当前用鼠标右键选中的怪物

	m_nCurrentChapter					= CHAPTER_0;				// 游戏剧情的章节

	m_bLoopGame							= true;							// 游戏循环标志

	m_bIsNetGame							= bNetMode;

	SetMyPlayerInfo(strID,strPsd);

	RPG_01::Game()->ChangeChapter(CHAPTER_1);

	if (m_bIsNetGame)
	{
		Game()->GetNetworkModule()->Born();

		Game()->GetNetworkModule()->RequestAllOnlinePlayer();
	}
}
예제 #18
0
int main(int argc, char* argv[])
{
    const char* rendererFlag = getCmdOption(argv, argv + argc, "--renderer");
    
    auto game = Game();
    if(game.Init(rendererFlag))
    {
        game.Loop();
    }
    game.Terminate();
    return 0;
}
예제 #19
0
int main(){


	team A, B;


	Game(A, B);


	return 0;

}
예제 #20
0
bool CUISpeechMenu::OnKeyboardAction(int dik, EUIMessages keyboard_action)
{
    if (dik < DIK_1 || dik > DIK_0)
		return CUIDialogWnd::OnKeyboardAction(dik, keyboard_action);

	game_cl_mp* game = smart_cast<game_cl_mp*>(&Game());

	HideDialog();
	game->OnMessageSelected(this, static_cast<u8>(dik - DIK_1));

	return true;
}
예제 #21
0
void CChangeLevelWnd::OnOk()
{
	Game().StartStopMenu					(this, true);
	NET_Packet								p;
	p.w_begin								(M_CHANGE_LEVEL);
	p.w										(&m_game_vertex_id,sizeof(m_game_vertex_id));
	p.w										(&m_level_vertex_id,sizeof(m_level_vertex_id));
	p.w_vec3								(m_position);
	p.w_vec3								(m_angles);

	Level().Send							(p,net_flags(TRUE));
}
예제 #22
0
void CSpectator::IR_OnKeyboardHold(int cmd)
{
	if (Remote())		return;

	game_cl_mp* pMPGame = smart_cast<game_cl_mp*> (&Game());
	game_PlayerState* PS = Game().local_player;

	if ((cam_active==eacFreeFly)||(cam_active==eacFreeLook)){
		CCameraBase* C	= cameras	[cam_active];
		Fvector vmove={0,0,0};
		switch(cmd){
		case kUP:
		case kDOWN: 
		case kCAM_ZOOM_IN: 
		case kCAM_ZOOM_OUT: 
			cameras[cam_active]->Move(cmd); break;
		case kLEFT:
		case kRIGHT:
			if (eacFreeLook!=cam_active) cameras[cam_active]->Move(cmd); break;
		case kFWD:			
			vmove.mad( C->vDirection, Device.fTimeDelta*Accel_mul );
			break;
		case kBACK:
			vmove.mad( C->vDirection, -Device.fTimeDelta*Accel_mul );
			break;
		case kR_STRAFE:{
			Fvector right;
			right.crossproduct(C->vNormal,C->vDirection);
			vmove.mad( right, Device.fTimeDelta*Accel_mul );
			}break;
		case kL_STRAFE:{
			Fvector right;
			right.crossproduct(C->vNormal,C->vDirection);
			vmove.mad( right, -Device.fTimeDelta*Accel_mul );
			}break;
		}
		if (cam_active != eacFreeFly || (pMPGame->Is_Spectator_Camera_Allowed(eacFreeFly) || (PS && PS->testFlag(GAME_PLAYER_FLAG_SPECTATOR))))
			XFORM().c.add( vmove );
	}
}
예제 #23
0
void CUISkinSelectorWnd::SendMessage(CUIWindow *pWnd, s16 msg, void *pData)
{
	game_cl_mp	*game = NULL;
	//game_cl_Deathmatch * dm = NULL;
	switch (msg){
		case BUTTON_CLICKED:
			game = smart_cast<game_cl_mp*>(&(Game()));
			//dm = smart_cast<game_cl_Deathmatch *>(&(Game()));
/*
			if (pWnd == m_pButtons[0])
				OnKeyLeft();
			else if (pWnd == m_pButtons[1])
				OnKeyRight();
			else */if (pWnd == m_pBtnAutoSelect)
			{
				m_iActiveIndex = -1;
				OnBtnOK();		
			}
			else if (pWnd == m_pBtnSpectator)
			{
				HideDialog();
				game->OnSpectatorSelect();
			}
			else if (pWnd == m_pBtnBack)
			{
				HideDialog();
				game->OnSkinMenuBack();				
			}
			else
                for (int i = 0; i<6; i++)
					if (pWnd == m_pImage[i])
					{
						m_iActiveIndex = m_firstSkin+i;
						OnBtnOK();					
					}
			break;
		case WINDOW_FOCUS_RECEIVED:
/*
			if (pWnd == m_pButtons[0])
			{
				m_pAnims[0]->Rewind(0);
				m_pAnims[0]->Play();
			}
			else if (pWnd == m_pButtons[1])
			{
				m_pAnims[1]->Rewind(0);
				m_pAnims[1]->Play();
			}
*/			
			break;
	}
}
예제 #24
0
void CUITextVote::OnBtnOk(){
	LPCSTR name = edit->GetText();
	if (name && name[0])
	{
		string512 command;
		sprintf(command, "cl_votestart $%s", name);		
		Console->Execute(command);
		game_cl_mp* game = smart_cast<game_cl_mp*>(&Game());
		game->StartStopMenu(this, true);
	}
	else
		return;
}
예제 #25
0
파일: UISpawnWnd.cpp 프로젝트: 2asoft/xray
void CUISpawnWnd::SendMessage(CUIWindow *pWnd, s16 msg, void *pData)
{
	if (BUTTON_CLICKED == msg)
	{
		Game().StartStopMenu(this,true);
		game_cl_mp * game = smart_cast<game_cl_mp*>(&Game());
		VERIFY(game);
		//game_cl_TeamDeathmatch * tdm = smart_cast<game_cl_TeamDeathmatch *>(&(Game()));
		if (pWnd == m_pImage1)
			game->OnTeamSelect(0);
		else if (pWnd == m_pImage2)
			game->OnTeamSelect(1);
		else if (pWnd == m_pBtnAutoSelect)
			game->OnTeamSelect(-1);
		else if (pWnd == m_pBtnSpectator)
			game->OnSpectatorSelect();
		else if (pWnd == m_pBtnBack)
			game->OnTeamMenuBack();
	}

	inherited::SendMessage(pWnd, msg, pData);
}
예제 #26
0
void CUITalkWnd::Update()
{
	//остановить разговор, если нужно
	if (g_actor && m_pActor && !m_pActor->IsTalking() )
	{
		Game().StartStopMenu(this,true);
	}else{
		CGameObject* pOurGO = smart_cast<CGameObject*>(m_pOurInvOwner);
		CGameObject* pOtherGO = smart_cast<CGameObject*>(m_pOthersInvOwner);
	
		if(NULL==pOurGO || NULL==pOtherGO || ((pOurGO->Position().distance_to(pOtherGO->Position())>3.0f)&&!m_pOthersInvOwner->NeedOsoznanieMode()) )
			Game().StartStopMenu(this,true);
	}

	if(m_bNeedToUpdateQuestions)
	{
		UpdateQuestions			();
	}
	inherited::Update			();
	UpdateCameraDirection		(smart_cast<CGameObject*>(m_pOthersInvOwner));

}
예제 #27
0
void CUIGameCTA::SetPlayerParamsToBuyMenu()
{
    VERIFY(m_pCurBuyMenu);

    game_PlayerState* ps = Game().local_player;
    VERIFY2(ps, "local player not initialized");
    CActor* actor = smart_cast<CActor*> (Level().Objects.net_Find(ps->GameID));
    R_ASSERT2(actor || ps->testFlag(GAME_PLAYER_FLAG_VERY_VERY_DEAD),
              make_string("bad actor: not found in game (GameID = %d)", ps->GameID).c_str());

    m_pCurBuyMenu->SetRank(ps->rank);
    m_pCurBuyMenu->SetMoneyAmount(ps->money_for_round);
}
void game_state_accumulator::init_player(game_PlayerState* local_player)
{
	m_local_player					= local_player;
	init_player_accum_values		(local_player);

	CUIMpTradeWnd* tmp_trade_wnd	= NULL;
	game_cl_Deathmatch* tmp_dm_game = smart_cast<game_cl_Deathmatch*>(&Game());
	if (tmp_dm_game)
	{
		tmp_trade_wnd = smart_cast<CUIMpTradeWnd*>(tmp_dm_game->GetBuyWnd());
	} else
	{
		R_ASSERT(Game().Type() == eGameIDCaptureTheArtefact);
		CUIGameCTA* tmp_cta_ui	= smart_cast<CUIGameCTA*>(CurrentGameUI());
		VERIFY(tmp_cta_ui);
		tmp_trade_wnd			= smart_cast<CUIMpTradeWnd*>(tmp_cta_ui->GetBuyWnd());
	}
	R_ASSERT(tmp_trade_wnd);
	m_item_mngr					= tmp_trade_wnd->GetItemMngr();
	R_ASSERT(m_item_mngr);
	m_amm_groups.init			(m_item_mngr);
}
예제 #29
0
void ActorPlayer::setWeapon(int weaponId)
{
	this->currentWeaponId = weaponId;
	// Construct the weapon model instance
	if(!model)
	{
		setModel("player_weapon");
	}
	model->GetTransform().Translation() = glm::vec3(0, -0.3, -1.95);

	// Based on which weapon it is, select a reticle
	if(weaponId == 0)
	{
		Game()->GetHUD()->SetReticle("hud/reticle_sniper.png", glm::vec2(48, 48));
	} else
	{
		Game()->GetHUD()->SetReticle("hud/reticle.png", glm::vec2(48, 48));
	}

	//Save weapon
	this->currentWeapon = weapons[weaponId];
}
예제 #30
0
/************************************************************************
*  玩家经验值改变
************************************************************************/
bool Controller::CheckPlayerIsInPortal()
{
	Player* myPlayer = GetMyPlayer();//GetPlayerManager()->GetPlayer(m_strMyPlayerID);
	Point playerPosition = myPlayer->getPosition();
	if (GetCurrentChapter() != CHAPTER_4 && Game()->GetPathManager()->IsInRect(Game()->GetSkillManager()->GetPortalAnimation()->GetScope(),playerPosition))
	{
		if (GetCurrentChapter() == CHAPTER_1)
		{
			ChangeChapter(CHAPTER_2);
		}
		else if (GetCurrentChapter() == CHAPTER_2)
		{
			ChangeChapter(CHAPTER_3);
		}
		else if (GetCurrentChapter() == CHAPTER_3)
		{
			ChangeChapter(CHAPTER_4);
		}
		return true;
	}
	return false;
}