Пример #1
0
//——————————————————————
// 機能:描画処理
// 引数:なし
// 戻値:成功/失敗
//——————————————————————
HRESULT Player::Render()
{
	//プレイヤー画像のサイズ調整
	SpriteData playerData;
	playerData.pos = position + g_stageScrollPos;	//表示位置はスクロールした分ずらす
	playerData.size = D3DXVECTOR2(32,32);			//サイズ
	playerData.cut.y = dir * 32;					//切抜き位置
	playerData.cut.x = ((anim / 9) % 4) * 32;
	
	switch (status)
	{
		//通常状態のとき
	case STATUS_NORMAL:
		//プレイヤーの描画
		player->Draw(&playerData);
		break;

		//死んだとき
	case STATUS_DEAD:
		Dead();
		break;
	}

	return S_OK;
}
Пример #2
0
void CUser::SetDamage(int damage, int tid)
{
    if (damage <= 0 || m_bLive == USER_DEAD)
        return;

    m_sHP -= (short)damage;

    if (m_sHP <= 0)
    {
        m_sHP = 0;
        Dead(tid, damage);
    }
}
Пример #3
0
//Update life
bool PhysicsActor::Update() {
	//Regenerate life and energy while alive
	if (!Dead()) {
		life += SIMULATION_DELTA*lifeRegenRate;
		if (life > maxLife)
			life = maxLife;
		energyPool += SIMULATION_DELTA*energyRegenRate;
		if (energyPool > energyPoolMax)
			energyPool = energyPoolMax;
	}

	if ((life <= 0) && vulnerable) {
		//This unit died
		vulnerable = false;
		//call on death
		onDeath();
	}
	return Actor::Update();
}
Пример #4
0
//	Damage 계산, 만약 m_sHP 가 0 이하이면 사망처리
void CUser::SetDamage(int damage, int tid)
{
	if(damage <= 0) return;
	if(m_bLive == USER_DEAD) return;

	short sHP = m_sHP;

	m_sHP -= (short)damage;

	//TRACE("User - SetDamage() : old=%d, damage=%d, curHP = %d, id=%s, uid=%d\n", sHP, damage, m_sHP, m_strUserID, m_iUserId);

	if( m_sHP <= 0 )	{
		m_sHP = 0;
		Dead(tid, damage);
	}

	//SendHP();
	// 버디중이면 다른 버디원에게 날린다.
}
Пример #5
0
void TeamMember::AdjustMental(int i)
{
	mental += i;

	if (i>0)
	{
		std::cout << name << " get " << i << " mental\n";
		if (mental >  maxMental)
			mental = maxMental;
	}
	else if (i<0)
	{
		std::cout << name << " lose " << i << "  mental\n";
		if (mental <= 0)
		{
			mental = 0;
			std::cout << name << " killed himself.\n";
			Dead();
		}
	}
}
Пример #6
0
void TeamMember::AdjustStamina(int i)
{
	stamina += i;

	if (i>0)
	{
		std::cout << name << " heal " << i << " stamina\n";
		if (stamina > maxStamina)
			stamina = maxStamina;
	}
	else if (i<0)
	{
		std::cout << name << " lose " << i << "  stamina\n";
		if (stamina <= 0)
		{
			stamina = 0;
			std::cout << name << " starved to death.\n";
			Dead();
		}
	}
}
Пример #7
0
//——————————————————————
// 機能:更新処理
// 引数:なし
// 戻値:成功/失敗
//——————————————————————
HRESULT Player::Update()
{
	//状態ごとに処理を分ける
	switch (status)
	{
		//通常状態
	case STATUS_NORMAL:
		Move();		//プレイヤーの移動
		//Attack();	//攻撃
		break;

		//下へスクロール中
	case DOWN_SCROLL:
		g_stageScrollPos.y -= 20;	//画面をスクロール
		position.y += 3;			//プレイヤーも移動
		//キリの良いところまでいったら通常状態に戻す
		if ((int)g_stageScrollPos.y % WINDOW_HEIGHT == 0)
		{
			status = STATUS_NORMAL;
		}
		break;

		//上へスクロール中
	case UP_SCROLL:
		g_stageScrollPos.y += 20;
		position.y -= 3;
		if ((int)g_stageScrollPos.y % WINDOW_HEIGHT == 0)
		{
			status = STATUS_NORMAL;
		}
		break;

		//死んだ状態
	case STATUS_DEAD:
		Dead();		//一定時間経ったら通常状態に戻す
		break;
	}

	return S_OK;
}
Пример #8
0
static void removeParent( a_state *child, a_state *parent )
{
    a_parent **prev;
    a_parent *curr;

    if( child->parents == NULL ) {
        return;
    }
    prev = &(child->parents);
    for( curr = *prev; curr != NULL; curr = curr->next ) {
        if( curr->state == parent ) {
            *prev = curr->next;
            FREE( curr );
            break;
        }
        prev = &(curr->next);
    }
    if( child->parents == NULL ) {
        ++deadStates;
        Dead( child );
    }
}
void GreenKoopa::MoveGreenKoopas(const char* id) {
		CommitDestructions(id); // to destroy the lost koopas
		for (std::list<MovingAnimator*>::iterator it=running[id].begin(); it != running[id].end(); ++it) {
				MovingAnimator* g = *it;
				Dim currPosX = g->GetSprite()->GetX();
				Dim currPosY = g->GetSprite()->GetY();

				Dim TileX = g->GetSprite()->GetTileX();
				Dim TileY = g->GetSprite()->GetTileY();
				
				if(Enemies::IsMarioAbove(TileX, TileY + 1)){
					char toCreate[20];
					const std::string id = g->GetSprite()->GetCurrFilm()->GetID();
					if(!strcmp(id.c_str(), "greenkoopaleft"))
						strcpy(toCreate, "greenkoopahit");
					else
						strcpy(toCreate, "redkoopahit");

						MovingAnimator* d; Dim x, y;
						if(suspendingdead[toCreate].size() == 0) 
								Dead(toCreate);
						d = suspendingdead[toCreate].back();
						d->GetMovingAnimation()->SetDx(0);
						d->GetMovingAnimation()->SetDelay(10000);
						d->GetMovingAnimation()->SetContinuous(false);
						d->SetLastTime(currTime);
						suspendingdead[toCreate].pop_back();
						assert(d);
						d->GetSprite()->SetX(x = g->GetSprite()->GetX());
						d->GetSprite()->SetY(y = g->GetSprite()->GetY() + 16);
						d->SetLastTime(CurrTime());
						AnimatorHolder::MarkAsRunning(d);
						walkingdead[toCreate].push_back(d);
						suspending[id].push_back(*it);
						AnimatorHolder::MarkAsSuspended(*it);
						running[id].erase(it);
						Sounds::Play("stomp");

						//jump mario:
						Dim mx = Mario::GetMarioCurrentSprite()->GetX();
						Dim my = Mario::GetMarioCurrentSprite()->GetY();
						Mario::SetDimensions(mx, my);

						AnimatorHolder::MarkAsSuspended( Mario::GetAnimator());
						Mario::SetDimensions(mx, my);
						Mario::ChangeState(Jumping);
						MovingPathAnimator* g = Mario::GetStandJump();
						g->SetCurrIndex(0);
						g->SetLastTime(currTime);
						AnimatorHolder::MarkAsRunning(g);

						return ;
				}

				if(Enemies::CanGoLeft(TileX, TileY) && g->GetMovingAnimation()->GetDx() < 0)
						g->GetMovingAnimation()->SetDx(-2);
				else if(!Enemies::CanGoLeft(TileX, TileY) && g->GetMovingAnimation()->GetDx() < 0)
						g->GetMovingAnimation()->SetDx(2);
				else if( Enemies::CanGoRight(TileX, TileY) && g->GetMovingAnimation()->GetDx() > 0)
						g->GetMovingAnimation()->SetDx(2);
				else if( !Enemies::CanGoRight(TileX, TileY) && g->GetMovingAnimation()->GetDx() > 0)
						g->GetMovingAnimation()->SetDx(-2);
				else
						g->GetMovingAnimation()->SetDx(0);
				Rect r = g->GetSprite()->GetCurrFilm()->GetFrameBox(g->GetSprite()->GetFrame());
				Dim f = r.GetHeight();
				if( Enemies::IsOnAir(TileX, TileY, f-1) && !Enemies::IsOnBrick(currPosX, currPosY))  
						g->GetMovingAnimation()->SetDy(3);
				else
						g->GetMovingAnimation()->SetDy(0);
		}
}
Пример #10
0
bool
hnStatus::Alive()
{
	return !Dead();
}