Exemple #1
0
const bool Collision::rect_Circle(const MyRectangle* rect, const Circle* circle)const
{
	GSvector2 vertex[4]=
	{
		rect->getPosition(),//0
		rect->getPosition() + GSvector2(rect->getWidth(), 0),//1
		rect->getPosition() + GSvector2(0, rect->getHeight()),//2
		rect->getPosition() + rect->getSize()//3
	};
	for (int i = 0; i <4; i++)
	{
		//矩形の各点と円同士の当たり判定
		if (circle->isCollision(&Circle(vertex[i], 0)))
		{
			return true;
		}
	}
	int n[4]=
	{
		2,-1,1,-2
	};
	for (int i = 0; i <4; i++)
	{
		if (cricle_Segment(circle, &Segment(vertex[i], vertex[i + n[i]])))
		{
			return true;
		}
	}
	return isRectInCircle(rect,circle);
}
/*******************************************************************
*
* 描画
*
*******************************************************************/
void Elevator::draw()
{
	//ランダムモード時のみ表示
	if(m_isRandomMode){

		//エレベーターレーン描画
		Sprite[TEXTRUE::LANE].setPosition(GSvector2(m_Position.x-26,-20));
		Sprite[TEXTRUE::LANE].draw();

		//エレベーターチェーン描画
		Sprite[TEXTRUE::CHAIN].setPosition(GSvector2(m_Position.x+16.0f,m_Position.y-736.0f));
		Sprite[TEXTRUE::CHAIN].draw();

		//エレベーター(本体)描画
		m_Sprite.setPosition(GSvector2(m_Position.x-10,m_Position.y-28));
		m_Sprite.draw();

	}

	//ゲート描画
	for(int i = 0; i < StageHeight ;i++){
		if(m_CGate[i] != NULL){
			m_CGate[i]->draw();
		}
	}

	//乗客からプレイヤーを探す
	for( int i = 0; i < MAX_CREW;i++ ){
		
		//利用者がいなければ
		if( m_CUserData[i] == NULL ){continue;}
		
		//プレイヤーがフロア選択中でなければ
		if( !isChoosingPlayer(i) ){continue;}

		//選択ボタンを順番に描画
		for( int j = 0; j < 4;j++ ){

			//選択ボタンなら
			if( m_CUserData[i]->m_GoalFloor == j+1 ){
				//切り取り座標指定
				Sprite[TEXTRUE::NUMBER].setRect(GSrect(30.0f*j,30.0f,30.0f*(j+1),30.0f*2));
			}
			else{
				//別切り取り座標指定
				Sprite[TEXTRUE::NUMBER].setRect(GSrect(30.0f*j,0.0f,30.0f*(j+1),30.0f));
			}
			//描画
			Sprite[TEXTRUE::NUMBER].setPosition(GSvector2(m_Position.x-30,m_Position.y-(j*20)+30));
			Sprite[TEXTRUE::NUMBER].draw();
		}
	}
}
/*******************************************************************
*
* コンストラクタ
*
*******************************************************************/
ElevatorAlgorithm::ElevatorAlgorithm()
	:m_InitPosition(GSvector2(0,0))
	,m_NextArray(GSvector2(0,0))
	,m_SearchFloor(1)
	,m_SearchCount(0)
	,m_ReflectValue(1)
	,m_FloorSearchCount(0)
	,m_FloorReflectValue(1)
	,CallState(ELEVATOR::FREE)
	,m_isAllSearch(false)
{

}
/*******************************************************************
*
* 描画
*
*******************************************************************/
void TitleScene::draw()
{
	//下の背景
	m_SpriteBG.draw();

	//タイトル背景描画
	for(int i= 0;i<3;i++){
		m_SpriteBack[i].draw();
	}

	if(m_NowProcess==1){return;}

	//バー描画
	for(int i=0;i<5;++i){
		m_Sprite[TEXTURE::BAR].setPosition(GSvector2(794.0f,400.0f+70.0f*i));
		if( i > 2 ){
			m_Sprite[TEXTURE::BAR].setRect(GSrect(0.0f,66.0f,111.0f,99.0f));
		}
		else if( m_Select == i ){
			m_Sprite[TEXTURE::BAR].setRect(GSrect(0.0f,0.0f,111.0f,33.0f));
		}
		else{
			m_Sprite[TEXTURE::BAR].setRect(GSrect(0.0f,33.0f,111.0f,66.0f));
		}
		m_Sprite[TEXTURE::BAR].draw();
	}

	//バーの文字
	for(int i=0;i<3;++i){
		m_Sprite[TEXTURE::Name].setPosition(GSvector2(804.0f,410.0f+70.0f*i));
		m_Sprite[TEXTURE::Name].setRect(GSrect(0.0f,i*23.0f,112.0f,23.0f+i*23.0f));
		m_Sprite[TEXTURE::Name].draw();
	}

	//セレクト移行中なら
	if(m_isChangeSelect){return;}

	//背景を変えるか
	if( m_isChangeBack ){
		if(m_Select==1)m_Sprite[TEXTURE::MANUAL].draw();
		else if(m_Select==2)m_Sprite[TEXTURE::CREDIT].draw();
	}

	//フォグを消すか
	if(m_isFog){
		for(int i = 0;i<m_FogDepth;i++ ){
			m_Sprite[TEXTURE::BLACKFOG].draw();
		}
	}
	
}
Exemple #5
0
void Ending::Draw(const Renderer& renderer)
{
	renderer.DrawTextrue("space0.bmp", &GSvector2(0, 0));
	renderer.DrawTextrue("con_logo.bmp", &logoPosi,&GSvector2(2,2),&GScolor(1,1,1,1));
	anim.draw(renderer, "kasasagi_end.bmp", &playerPosi);

	if (playerPosi.x < 0)
	{
		renderer.DrawString("スペースを押してね",&GSvector2(300,600),30);
	}
	fadeIn.draw(renderer);
	fadeOut.draw(renderer);
	starFade.draw(renderer);
}
Exemple #6
0
const bool Collision::isRectInCircle(const MyRectangle* rect, const Circle* circle)const
{

	Segment seg1(rect->getPosition(), rect->getPosition() + GSvector2(rect->getWidth(), 0));//0,1
	Segment seg2(rect->getPosition() + rect->getSize(),rect->getPosition() + GSvector2(0, rect->getHeight()));//3,2
	float res1 = segment_Point_atan(&seg1,&circle->center);
	float res2 = segment_Point_atan(&seg2,&circle->center);
	if (0 <= res1 && res1 <= 90 &&
		0 <= res2&& res2 <= 90)
	{
		return true;
	}
	return false;
}
/*******************************************************************
*
* ゲートを開け終えたか
*
*******************************************************************/
bool TitleScene::isOpenGate()
{
	//扉の座標を動かす
	m_GatePosition.x += 2.0f;

	m_SpriteBack[TEXTURE::LDoor].setPosition(GSvector2(-m_GatePosition.x,m_GatePosition.y));
	m_SpriteBack[TEXTURE::RDoor].setPosition(GSvector2(m_GatePosition.x,m_GatePosition.y));

	//扉は開いたか
	if(m_GatePosition.x >= 700.0f){
		return true;
	}

	return false;
}
Exemple #8
0
void Ending::Init()
{
	fadeIn.initialize();
	fadeOut.initialize();
	isEnd = false;
	device.getSound().PlaySE("ending.wav");
	playerPosi = GSvector2(1280, 200);
	logoPosi = playerPosi + GSvector2(190, 50);
	vel = GSvector2(0, 0);
	anim.addCell("A", 1, 3, 208, 204);
	animTimer.initialize();
	animTimer.setStarTimer(30.f);

	fadeIn.start(GScolor(0, 0, 0, 1), GScolor(0, 0, 0, 0), 1.0f);
}
Exemple #9
0
void Item::update(float time)
{
	position_ += velosity_;
	velosity_ += GSvector2(0, 0.02f);

	if (!world_.isInSide(position_))
	{
		alive_ = false;
	}
}
/*******************************************************************
*
* エレベーターを出たか
*
*******************************************************************/
bool TitleScene::isOutElevator()
{
	//壁スライド
	m_BoardPosition.x += 3.0f;
	m_BoardPosition.y -= 5.0f;
	m_ScaleCount += 0.01f;
	
	//右扉を動かす
	m_SpriteBack[TEXTURE::RDoor].setPosition(m_GatePosition+m_BoardPosition);

	//操作盤背景
	m_SpriteBack[TEXTURE::Board].setPosition(GSvector2(m_BoardPosition.x,m_BoardPosition.y));
	m_SpriteBack[TEXTURE::Board].setScale(GSvector2(2.0f,2.0f+(m_ScaleCount*2)));

	//背景
	m_SpriteBG.setPosition(GSvector2(0.0f,10.0f+m_BoardPosition.y*0.015f));
	m_SpriteBG.setScale(GSvector2(1.8f+m_ScaleCount*0.16f,1.8f+m_ScaleCount*0.15f));

	//エレベーターを出たか
	if( m_BoardPosition.x >= 400.0f ){
		return true;
	}
	return false;
}
Exemple #11
0
void Operation::Draw(const Renderer& renderer)
{	
	const std::string Tex[3] =
	{
		"Control",
		"stage_commentary",
		"object"
	};
	if (index == 3)
	{
		index -= 1;
		isEnd = true;
		fadeOut.start(GScolor(0, 0, 0, 0), GScolor(0, 0, 0, 1), 1.f);
	}
	renderer.DrawTextrue(Tex[index] + ".bmp", &GSvector2(0, 0));
	
	fadeIn.draw(renderer);
	fadeOut.draw(renderer);
}
/*******************************************************************
*
* ゲート生成
*
*******************************************************************/
void Elevator::setup(StageData mStageData)
{
	//仮の画像IDを初期値
	int TextureID = 210;

	//ランダムモードなら
	if(mStageData.m_GameMode == GAMEMODE::Random ){
		m_isRandomMode = true;
		TextureID = 223;//違う画像IDに変更
	}

	//エレベーターに合わせてゲートを生成
	for(int i = 0; i < StageHeight; i++){
		for(int j = 0; j < MaxFloor; j++){
			if( FloorHeight[j] ==  ( i * OBJECT_SIZE ) ){
				m_CGate[i] = new BoardingGate(TextureID,GSvector2(m_Position.x,i*OBJECT_SIZE),j+1);
			}
		}
	}
}
/*******************************************************************
*
* 生成
*
*******************************************************************/
void ObjectManager::setup(StageData mStageData)
{
	int Stage;

	//エレベーター数によってステージ変化
	if( 0 < mStageData.m_ElevatorNumber && mStageData.m_ElevatorNumber <= 5 ){
		Stage = 0;
	}
	if( mStageData.m_ElevatorNumber == 6 ){
		Stage = 1;
	}
	if( mStageData.m_ElevatorNumber == 7 ){
		Stage = 2;
	}


	//ゲームモードによってオブジェクトに使う画像ID調整
	int addTextureID=0;
	if( mStageData.m_GameMode == GAMEMODE::Random ){
		addTextureID = 19;
	}

	//基本的なオブジェクトの生成
	for(int i = 0; i < StageHeight; i++){
		for(int j = 0; j < StageWigth; j++){
			
			if(BASIC_OBJECT[Stage][i][j] != 0){
				if(BASIC_OBJECT[Stage][i][j] == 1){
					m_CDefaultStage[j][i] = new Floor(OBJECT::i_Floor,OBJECT::i_Floor+addTextureID,GSvector2(j*OBJECT_SIZE,i*OBJECT_SIZE));
				}
				if(BASIC_OBJECT[Stage][i][j] == 2){
					m_CDefaultStage[j][i] = new Ladder(OBJECT::i_Ladder,OBJECT::i_Ladder+addTextureID,GSvector2(j*OBJECT_SIZE,i*OBJECT_SIZE));
				}
				if(BASIC_OBJECT[Stage][i][j] == 3){
					m_CDefaultStage[j][i] = new CrossFloor(OBJECT::i_CrossFloor,OBJECT::i_CrossFloor+addTextureID,GSvector2(j*OBJECT_SIZE,i*OBJECT_SIZE));
				}
			}
			
		}
	}
}
/*******************************************************************
*
* コンストラクタ
*
*******************************************************************/
Elevator::Elevator(GSvector2 Position)
	:ElevatorBase(OBJECT::i_Elevator,OBJECT::i_Elevator,GSrect(0.0f,0.0f,84.0f,120.0f),Position,false,1)
	,m_Gate_Ypos(0)
	,m_isUserRiding(false)
	,m_UserInterval(0)
	,m_isRidingTurn(false)
	,m_ControlState(CONTROL::FREE)
	,m_isRandomMode(false)

{
	//エレベーターチェーン
	Sprite[TEXTRUE::CHAIN].setTextureID(205);
	Sprite[TEXTRUE::CHAIN].setRect(GSrect(0.0f,0.0f,33.0f,800.0f));

	//エレベーターレーン
	Sprite[TEXTRUE::LANE].setTextureID(206);
	Sprite[TEXTRUE::LANE].setRect(GSrect(0.0f,0.0f,128.0f,800.0f));

	//プレイヤー用のフロアセレクト数字
	Sprite[TEXTRUE::NUMBER].setTextureID(112);
	Sprite[TEXTRUE::NUMBER].setRect(GSrect(0.0f,0.0f,120.0f,60.0f));
	Sprite[TEXTRUE::NUMBER].setScale(GSvector2(0.6,0.6));

	//乗客初期化
	for(int i = 0; i < MAX_CREW;i++ ){
		m_CUserData[i] = NULL;
	}

	//ゲート初期化
	for(int i = 0; i <StageHeight;i++){
		m_CGate[i] = NULL;
	}

	//エレベーターの初期位置指定
	this->m_Position.y = OBJECT_SIZE*10;

}
Exemple #15
0
void Ending::Update()
{
	starFade.update();
	fadeIn.updata();
	if (!fadeIn.getIsEnd())return;

	vel = GSvector2(-2.0f, 0);
	playerPosi += vel;
	if (playerPosi.x > 0)
	{
		logoPosi = playerPosi;
	}
	anim.updata("A");
	animTimer.updata();
	fadeOut.updata();
	isEnd = fadeOut.getIsEnd();


	if (fadeOut.getIsStart())return;
	if (device.getInput().getActionTrigger())
	{
		fadeOut.start(GScolor(0, 0, 0, 0), GScolor(0, 0, 0, 1), 1.0f);
	}
}
void EnemyBulletGenerator::fire(const GSvector2& position, const int bullet_type, const float speed)
{
	GSvector2 v;
	float angle;

	switch (bullet_type)
	{
	case ばらまき:
		v = GSvector2(gsRandf(-1, 1), gsRandf(-1, 1));
		v.normalize();
		world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
			world_,
			position,
			v * speed));
		break;

	case 自機狙い弾:
		angle = MathUtility::subtractAngle(position, 0, world_.getPlayer()->getPosition());
		v = GSvector2(
			MathUtility::cos(angle),
			MathUtility::sin(angle)
			);
		v.normalize();
		world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
			world_,
			position,
			v * speed));
		break;

	case 自機狙い24方位:
		angle = MathUtility::subtractAngle(position, 0, world_.getPlayer()->getPosition());
		for (int i = 0; i < 360; i += 15)
		{
			v = GSvector2(
				MathUtility::cos(i + angle),
				MathUtility::sin(i + angle)
				);
			v.normalize();
			world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
				world_,
				position,
				v * speed));
		}
		break;

	case 24方位:
		for (int i = 0; i < 360; i += 15)
		{
			v = GSvector2(
				MathUtility::cos(i),
				MathUtility::sin(i)
				);
			v.normalize();
			world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
				world_,
				position,
				v * speed));
		}
		break;

	case 前方5方位:
		for (int i = 240; i <= 300; i += 15)
		{
			v = GSvector2(
				MathUtility::cos(i),
				MathUtility::sin(i)
				);
			v.normalize();
			world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
				world_,
				position,
				v * speed));
		}
		break;

	case 自機狙い前方5方位:
		angle = MathUtility::subtractAngle(position, 0, world_.getPlayer()->getPosition());
		for (int i = -30; i <= 30; i += 15)
		{
			v = GSvector2(
				MathUtility::cos(i + angle),
				MathUtility::sin(i + angle)
				);
			v.normalize();
			world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
				world_,
				position,
				v * speed));
		}
		break;

	case 垂直弾:
		for (int i = speed / 2; i <= speed * 2; i++)
		{
			v = GSvector2(0, 1);
			world_.add(CHARACTER_ENEMY_BULLET, std::make_shared<EnemyBullet>(
				world_,
				position,
				v * (i / 2.0f)));
		}

	default:
		break;
	}

	world_.playSE(SE_SHOT);
	count += 1;
}
Exemple #17
0
Item::Item(IWorld& world, const CharacterID characterId, const GSvector2& position, const int size) :
Character(world, characterId, TEXTURE_ITEM, position, size)
{
	velosity_ = GSvector2(0, 0);
}
/*******************************************************************
*
* コンストラクタ
*
*******************************************************************/
TitleScene::TitleScene(SceneManager& m_manager,bool FogFlag)
	:SceneBase(m_manager)
	,m_isFog(FogFlag)
	,m_FogDepth(40)
	,m_Select(0)
	,m_isChangeSelect(false)
	,m_NowProcess(0)
	,m_GatePosition(GSvector2(0.0f,0.0f))
	,m_BoardPosition(GSvector2(0.0f,0.0f))
	,m_ScaleCount(0.0f)
	,m_isChangeBack(false)
{
	TextureLoader m_Loader;
	m_Loader.Load("res/CSV/Title.csv");

	//下の背景(セレクトシーンの背景)
	m_SpriteBG.setTextureID(9);
	m_SpriteBG.setPosition(GSvector2(0.0f,10.0f));
	m_SpriteBG.setScale(GSvector2(1.8f,1.8f));

	//背景全般
	for(int i= 0;i<3;i++){
		m_SpriteBack[i].setTextureID(i+1);
		m_SpriteBack[i].setPosition(GSvector2(0.0f,0.0f));
		m_SpriteBack[i].setScale(GSvector2(2.0f,2.0f));
	}
	m_SpriteBack[TEXTURE::Board].setRect(GSrect(0.0f,0.0f,512.0f,384.0f));
	

	//バー
	m_Sprite[TEXTURE::BAR].setTextureID(7);
	m_Sprite[TEXTURE::BAR].setScale(GSvector2(2.0f,2.0f));

	//バーの文字
	m_Sprite[TEXTURE::Name].setTextureID(4);
	m_Sprite[TEXTURE::Name].setScale(GSvector2(2.0f,2.0f));

	//マニュアル
	m_Sprite[TEXTURE::MANUAL].setTextureID(5);
	m_Sprite[TEXTURE::MANUAL].setScale(GSvector2(2.0f,2.0f));
	
	//クレジット
	m_Sprite[TEXTURE::CREDIT].setTextureID(6);
	m_Sprite[TEXTURE::CREDIT].setScale(GSvector2(2.0f,2.0f));

	m_Sprite[TEXTURE::BLACKFOG].setTextureID(8);
	m_Sprite[TEXTURE::BLACKFOG].setPosition(GSvector2(0.0f,0.0f));
	m_Sprite[TEXTURE::BLACKFOG].setScale(GSvector2(2.0f,2.0f));

}
void GameObjectFactory::addContainer()
{
	GSvector2 zero(0, 0);
	const int length = 17;
	GSvector2 navSize(45,100);
	GameObject* objs[length] =
	{
		/*           画像名,  位置(原型),見た目のサイズ(基本画像サイズ), 位置からの当たり判定位置と横縦幅 */
		new Respawn("respawn.bmp", zero, GSvector2(94, 88), MyRectangle(GSvector2(11, 11), GSvector2(85, 0))),
		new Player("orihime.bmp", zero, GSvector2(64, 64), MyRectangle(GSvector2(20, 50), GSvector2(30, 14)), &scroll, device, effectMediator),
		new ImMovable("meteo.bmp", zero, GSvector2(44, 44), MyRectangle(zero, GSvector2(44, 44)), GAMEOBJ_TYPE::PLANET),
		new ImMovable("start.bmp", zero, GSvector2(200, 100), MyRectangle(GSvector2(30, 15), GSvector2(180, 30)), GAMEOBJ_TYPE::START),
		new ImMovable("goal.bmp", zero, GSvector2(200, 100), MyRectangle(GSvector2(30, 15), GSvector2(180, 30)), GAMEOBJ_TYPE::GOAL),
		new Magpie("magpie.bmp", zero, GSvector2(128, 128), MyRectangle(GSvector2(0, 0), GSvector2(128, 128)), objMediator,device),
		new ImMovable("magpieEnd.bmp", zero, GSvector2(94, 88), MyRectangle(GSvector2(11, 11), GSvector2(85, 23)), GAMEOBJ_TYPE::MAGPIE_ENDSPOT),

		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_R),
		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_L),
		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_U),
		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_D),

		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_RU),
		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_RD),

		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_LD),
		new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_LU),

		new ImMovable("sasa.bmp", zero, GSvector2(96, 128), MyRectangle(zero, zero), GAMEOBJ_TYPE::SASA),
		new Hikoboshi("hikobosi.bmp",zero,GSvector2(64,64),MyRectangle(zero,GSvector2(64,64)))
	};
	GAMEOBJ_TYPE types[length] =
	{
		GAMEOBJ_TYPE::RESPAWN,
		GAMEOBJ_TYPE::PLAYER,
		GAMEOBJ_TYPE::PLANET,
		GAMEOBJ_TYPE::START,
		GAMEOBJ_TYPE::GOAL,
		GAMEOBJ_TYPE::MAGPIE,
		GAMEOBJ_TYPE::MAGPIE_ENDSPOT,

		GAMEOBJ_TYPE::SIGNBOARD_R,
		GAMEOBJ_TYPE::SIGNBOARD_L,
		GAMEOBJ_TYPE::SIGNBOARD_U,
		GAMEOBJ_TYPE::SIGNBOARD_D,

		GAMEOBJ_TYPE::SIGNBOARD_RU,
		GAMEOBJ_TYPE::SIGNBOARD_RD,
		GAMEOBJ_TYPE::SIGNBOARD_LD,
		GAMEOBJ_TYPE::SIGNBOARD_LU,
		GAMEOBJ_TYPE::SASA,
		GAMEOBJ_TYPE::HIKOBOSHI
	};
	for (int i = 0; i < length; i++)
	{
		GameObj_Ptr obj = GameObj_Ptr(objs[i]);
		container.insert(std::pair<GAMEOBJ_TYPE, GameObj_Ptr>(types[i], obj));
	}
}