コード例 #1
0
void CEnemyBoss::OnCollision(CEntity* Entity) {

	// Prevent premature damage taking
	if( !CAppStateGame::Instance.BossFightOn ) return;

	if( !IsActive() || !Entity->IsActive() ) return;

	switch( Entity->Type ) {
		case ENTITY_TYPE_BULLET:
			if( Entity->SubType == ENTITY_SUBTYPE_BULLET_NORMAL ) {
				Damage(BULLET_NORMAL_STR);
			}
			else if( Entity->SubType == ENTITY_SUBTYPE_BULLET_SMALL_45U || Entity->SubType == ENTITY_SUBTYPE_BULLET_SMALL_45D) {
				Damage(BULLET_SMALL_STR);
			}
			else if( Entity->SubType == ENTITY_SUBTYPE_BULLET_CHARGE1 ) {
				Damage(BULLET_CHARGE1_STR);
			}

			if( IsDead() ){
				// Need to substract bullet life, since it won't check collission when enemy dies from hit
				Entity->Damage(1);
			}
			break;
		case ENTITY_TYPE_PLAYER:
			Entity->Damage(1);
		default:
			return;
	}

	return;
}
コード例 #2
0
ファイル: GuiCombat.cpp プロジェクト: Azurami/wagic
int GuiCombat::resolve() // Returns the number of damage objects dealt this turn.
{
    DamageStack* stack = NEW DamageStack(observer);
    for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
    {
        MTGCardInstance * attacker = (*it)->card;
        signed dmg = attacker->stepPower(step);
        for (vector<DefenserDamaged*>::iterator q = (*it)->blockers.begin(); q != (*it)->blockers.end(); ++q)
        {
            for (vector<Damage>::iterator d = (*q)->damages.begin(); d != (*q)->damages.end(); ++d)
                stack->Add(NEW Damage(*d));
            dmg -= (*q)->sumDamages();
        }

        if (dmg > 0 && ((!attacker->isBlocked()) || attacker->has(Constants::TRAMPLE)))
            stack->Add(NEW Damage(observer, (*it)->card, (Damageable*)attacker->isAttacking?(Damageable*)attacker->isAttacking:observer->opponent(), dmg, DAMAGE_COMBAT));

        for (vector<Damage>::iterator d = (*it)->damages.begin(); d != (*it)->damages.end(); ++d)
            stack->Add(NEW Damage(*d));
    }
    int v = stack->mObjects.size();
    if (v > 0)
    {
        observer->mLayers->stackLayer()->Add(stack);
        observer->mLayers->stackLayer()->resolve(); // This will delete the damage stack which will in turn delete the Damage it contains
    }
    else
        SAFE_DELETE(stack);
    return v;
}
コード例 #3
0
ファイル: character.cpp プロジェクト: jjuiddong/Dx3D-Study
//-----------------------------------------------------------------------------//
// 충돌이 일어나면 이 함수가 호출된다.
// TestNum : 1 = 주인공이 공격한후 충돌체크
//			 2 = 적이 공격한후 충돌체크
// ICollisionable : 충돌한 객체 포인터
//-----------------------------------------------------------------------------//
void CCharacter::Collision( int TestNum, ICollisionable *pObj )
{
   	if( CHAR_HERO == m_Group )
	{
		switch( TestNum )
		{
		case 1:
			break;
		case 2:
			{
				int damage = 0;
				ATTACK_TYPE type = NONE;
				Vector3 dir(0,0,0);
				CCharacter *p = (CCharacter*)pObj;
				if( p->m_pCurAct )
				{
					damage = p->m_pCurAct->damage;
					type = (ATTACK_TYPE)p->m_pCurAct->attack_type;
					dir = GetPos() - p->GetPos();
					dir.Normalize();
				}
				Damage( type, damage, &dir );
			}
			break;
		}
	}
	else if( CHAR_ENEMY == m_Group )
	{
		switch( TestNum )
		{
		case 1:
			{
				int damage = 0;
				ATTACK_TYPE type = NONE;
				Vector3 dir(0,0,0);
				CCharacter *p = (CCharacter*)pObj;
				if( p->m_pCurAct )
				{
					damage = p->m_pCurAct->damage;
					type = (ATTACK_TYPE)p->m_pCurAct->attack_type;
					dir = GetPos() - p->GetPos();
					dir.Normalize();
				}
				Damage( type, damage, &dir );
			}
			break;
		case 2:
			break;
		}
	}

}
コード例 #4
0
bool CShieldClass::GetReferenceDamageAdj (const CItem *pItem, CSpaceObject *pInstalled, int *retiHP, int *retArray) const

//	GetReferenceDamageAdj
//
//	Returns an array of damage adj values

	{
	CItemCtx Ctx(pItem, pInstalled);
	int i;

	const CItemEnhancement &Mods = Ctx.GetMods();

	int iMinHP, iMaxHP;
	CalcMinMaxHP(Ctx, m_iMaxCharges, 0, 0, &iMinHP, &iMaxHP);

	if (retiHP)
		*retiHP = iMaxHP;

	if (retArray)
		{
		for (i = 0; i < damageCount; i++)
			{
			DamageDesc Damage((DamageTypes)i, DiceRange(0, 0, 0));
			int iAdj = GetDamageAdj(Mods, Damage);
			if (iAdj == 0)
				retArray[i] = -1;
			else
				retArray[i] = (int)((iMaxHP * 100.0 / iAdj) + 0.5);
			}
		}

	return true;
	}
コード例 #5
0
// Main part, calls simulating damage function
int main()
{
	enum { numSimulation = 10000000 };
	enum { numAttackDice = 2 };
	enum { AttackFocus = true };
	enum { TargetLock = false };
	enum { Howlrunner = true };
	enum { CrackShot = true };
	enum { numEvadeDice = 3 };
	enum { EvadeFocus = true };
	enum { EvadeToken = false };
	std::vector<double> Damage (numSimulation);

	std::cout << "Rolling " << numAttackDice << " attack dice and " << numEvadeDice << " evade dice" << '\n'; //Code-Review - std::endl includes a flush, most of the time this isn't essential.
	std::cout << "Attack Focus: " << AttackFocus << " Evade Focus: " << EvadeFocus << " Target Lock: " << TargetLock << " Evade Action: " << EvadeToken << '\n';
	std::cout << "HowlRunner: " << Howlrunner << " Crack Shot : " << CrackShot << '\n';
	clock_t begin = clock();
	
	std::generate(std::begin(Damage),std::end(Damage),
		[&]()
	{
		auto result = SimulateDamage(numAttackDice, AttackFocus, TargetLock, numEvadeDice, EvadeFocus, EvadeToken, Howlrunner, CrackShot);
		return result;
	});
	const auto DamageSum = std::accumulate(std::begin(Damage), std::end(Damage), 0.0);
	std::cout << "Number of simulations was " << numSimulation << '\n';
	std::cout << "Average damage was " << DamageSum / numSimulation << '\n';
	clock_t end = clock();
	double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
	std::cout << "Time needed for calculation: " << elapsed_secs << std::endl;
}
コード例 #6
0
ファイル: enemy.cpp プロジェクト: grandseiken/iispace
void Square::Update()
{
    if ( GetNonWallCount() == 0 && IsOnScreen() )
        _timer--;
    else
        _timer = GetLib().RandInt( 80 ) + 40;

    if ( _timer == 0 )
        Damage( 4, false, 0 );

    Vec2 pos = GetPosition();
    if ( pos._x < 0 && _dir._x <= 0 ) {
        _dir._x = -_dir._x;
        if ( _dir._x <= 0 ) _dir._x = 1;
    }
    if ( pos._y < 0 && _dir._y <= 0 ) {
        _dir._y = -_dir._y;
        if ( _dir._y <= 0 ) _dir._y = 1;
    }

    if ( pos._x > Lib::WIDTH && _dir._x >= 0 ) {
        _dir._x = -_dir._x;
        if ( _dir._x >= 0 ) _dir._x = -1;
    }
    if ( pos._y > Lib::HEIGHT && _dir._y >= 0 ) {
        _dir._y = -_dir._y;
        if ( _dir._y >= 0 ) _dir._y = -1;
    }
    _dir.Normalise();

    Move( _dir * SPEED );
    SetRotation( _dir.Angle() );
}
コード例 #7
0
ファイル: EDITSEL.CPP プロジェクト: GaoHongchen/chromatic
void CSelection::MakeEmpty( BOOL bDamage, BOOL bAtEnd )
{
    if ( !IsEmpty() )
    {
        EnableColumnSel( FALSE );
        if ( bDamage )
        {
            Damage();
        }

        if ( bAtEnd )
        {
            m_nStartCol = m_nEndCol;
            m_nStartViewCol = m_nEndViewCol;
            m_nStartRow = m_nEndRow;
        }
        else
        {
            m_nEndCol = m_nStartCol;
            m_nEndViewCol = m_nStartViewCol;
            m_nEndRow = m_nStartRow;
        }
        UpdateCaretPosition();
    }
}
コード例 #8
0
ファイル: Containers.cpp プロジェクト: mmaulwurff/FREG
 void Converter::DoRareAction() {
     if ( isOn && fuelLevel < World::SECONDS_IN_DAY/DamageLevel() ) {
         for (int i=GetSize()-1; i>=0; --i) {
             Block* const block = ShowBlock(i);
             if ( block ) {
                 const int add = ConvertRatio(block->Sub());
                 if ( add > 0 ) {
                     fuelLevel += add;
                     Pull(i);
                     delete block;
                     break;
                 }
             }
         }
     }
     World* const world = World::GetWorld();
     if ( fuelLevel <= 0
             || ( Sub() == STONE
                 && world->GetBlock(X(), Y(), Z()+1)->Sub() == WATER ) )
     {
         Damage(1, damageKindOff);
     } else {
         if (world->Damage(X(), Y(), Z()+1, DamageLevel(), damageKindOn)<=0)
         {
             world->DestroyAndReplace(X(), Y(), Z()+1);
         }
         fuelLevel -= DamageLevel();
     }
 }
コード例 #9
0
ファイル: CArmorClass.cpp プロジェクト: dogguts/Transcendence
bool CArmorClass::GetReferenceDamageAdj (const CItem *pItem, CSpaceObject *pInstalled, int *retiHP, int *retArray)

//	GetReferenceDamageAdj
//
//	Returns armor HP after adjustment for damage type

	{
	int i;

	CItemCtx ItemCtx(pItem, pInstalled);
	int iHP = GetMaxHP(ItemCtx);

	if (retiHP)
		*retiHP = iHP;

	for (i = 0; i < damageCount; i++)
		{
		DamageDesc Damage((DamageTypes)i, DiceRange(0, 0, 0));
		int iAdj = GetDamageAdj(ItemCtx.GetMods(), Damage);

		if (retArray)
			retArray[i] = CalcHPDamageAdj(iHP, iAdj);
		}

	return true;
	}
コード例 #10
0
ファイル: Enemy.cpp プロジェクト: nitorionedan/GekiRenSha
bool Enemy::IsHit(const double & ColX, const double & ColY, const int& DAMAGE)
{
	if (!isExist)	return false;

	bool isHit;

	switch (type)
	{
	case 0:
		isHit = Vector2D::CirclesCollision(hitRange, 6, pos.x, pos.y + 9., ColX, ColY);	
		break;
	case 1:
		break;
	case 2:
		isHit = Vector2D::CirclesCollision(hitRange, 6, pos.x, pos.y + 9., ColX, ColY);
		break;
	case 3:
		break;
	case 4:
		isHit = Vector2D::CirclesCollision(hitRange, 6, pos.x, pos.y + 9., ColX, ColY);
		break;
	case 5:
		break;
	case 6:
		break;
	case 7:
		break;
	}

	// ダメージ処理
	if (isHit)	Damage(DAMAGE);

	// 全部falseならここにくる
	return isHit;
}
コード例 #11
0
ファイル: bullet_class.c プロジェクト: ChunHungLiu/cdogs-sdl
static bool HitItemFunc(TTileItem *ti, void *data)
{
	HitItemData *hData = data;
	if (!CanHit(hData->Obj->flags, hData->Obj->ActorUID, ti))
	{
		goto bail;
	}
	int targetUID = -1;
	hData->HitType = GetHitType(ti, hData->Obj, &targetUID);
	Damage(
		hData->Obj->vel, hData->Obj->bulletClass->Power,
		hData->Obj->flags, hData->Obj->PlayerUID, hData->Obj->ActorUID,
		ti->kind, targetUID,
		hData->Obj->bulletClass->Special);
	if (hData->Obj->tileItem.SoundLock <= 0)
	{
		hData->Obj->tileItem.SoundLock += SOUND_LOCK_TILE_OBJECT;
	}
	if (ti->SoundLock <= 0)
	{
		ti->SoundLock += SOUND_LOCK_TILE_OBJECT;
	}
	if (hData->Obj->specialLock <= 0)
	{
		hData->Obj->specialLock += SPECIAL_LOCK;
	}

bail:
	// Whether to produce multiple hits from the same TMobileObject
	return hData->MultipleHits;
}
コード例 #12
0
//update the game
void GameWindow::Update()
{
	//if in game
	if(m_bInGame){
		//Spawn Enemies
		Spawn();
		//check for damage
		Damage();
		//run enemy ai
		for(int i = 0; i < 7; i++){
			if(m_eAllEnemies[i].m_bOnScreen){
				m_eAllEnemies[i].AI(m_pPlatformList, m_PlatformCount, m_wPlayer);
			}
		}
		//move all entities
		Movement();
		//check players displayed image
		m_wPlayer.SwapImage();
		m_wPlayer.Tick();
		//apply gravity to all entities
		Gravity();
		//reset player velocity
		m_wPlayer.m_xVelocity = 0;
	}
	//handle key input
	HandleInput();
	//draw all images and sprites
	Draw();
	//check if game over
	EndGame();
}
コード例 #13
0
int ActionStack::addDamage(MTGCardInstance * _source, Damageable * _target, int _damage)
{
    Damage * damage = NEW Damage(observer, _source, _target, _damage);
    addAction(damage);
    _source->thatmuch = _damage;
    _target->thatmuch = _damage;
    return 1;
}
コード例 #14
0
ファイル: Ability.cpp プロジェクト: TrapAlice/DataShatter
void Ability::Activate(Combatant& attacker, Combatant& defender) const
{
	int damage = 0;
	damage = Damage();
	if( m->activate ){
		m->activate(attacker, defender);
	}
	defender.TakeDamage(damage);
}
コード例 #15
0
ファイル: Damage.cpp プロジェクト: anliec/Mosp
Damage Damage::operator *(double factor) const
{
    std::vector<AttackValue> retValues;
    for(unsigned i=0 ; i<values.size() ; i++)
    {
        retValues.push_back(values.at(i)*factor);
    }
    return Damage(retValues,effects);
}
コード例 #16
0
void Personaje::FunctionTimerSixSec()
{
    if(CoinTimer)
    {
        WinCoin();
        Damage();
    }

}
コード例 #17
0
ファイル: Spell.cpp プロジェクト: superwills/Wryv
void ASpell::Move( float t )
{
  if( Arcs )
  {
    AProjectile::Move( t );
  }
  
  // Deal DPS to each overlap
  // Deal damage to the target, draining HP
  for( AGameObject* go : HitOverlaps )
  {
    // Anything in the hit overlaps bounds gets damaged
    if( DamagesFriendly && isAllyTo( go ) )
      Damage( go, t );
    else if( isEnemyTo( go ) )
      Damage( go, t );
  }

}
コード例 #18
0
ファイル: Animal.cpp プロジェクト: Panzerschrek/FREG-3d_2.0
// Animal:: section
    inner_actions Animal::ActInner() {
        if ( GROUP_MEAT != GetSubGroup(Sub()) ) return INNER_ACTION_NONE;
        if ( satiation <= 0 ) {
            Damage(5, DAMAGE_HUNGER);
        } else {
            --satiation;
            Mend(1);
        }
        emit Updated();
        return INNER_ACTION_NONE;
    }
コード例 #19
0
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함
void CObjectActionManager::ApplyResult(CObject* pObject,CObject* pOperator,RESULTINFO* pRInfo,BYTE DamageKind)
{
	if(pRInfo->RealDamage)
	{
		Damage(pObject,pOperator,DamageKind,pRInfo->RealDamage,*pRInfo);
		if(pObject->IsDied())
			Die(pObject,pOperator,FALSE,pRInfo->bCritical,pRInfo->bDecisive);
	}
	// 100223 ShinJS --- 마나 데미지 추가
	if(pRInfo->ManaDamage)
	{
		ManaDamage(pObject,pOperator,DamageKind,pRInfo->ManaDamage,*pRInfo);
	}
	if(pRInfo->CounterDamage)
	{
		const RESULTINFO emptyResult = { 0 };
		Damage(pOperator,pObject,eDamageKind_Counter,pRInfo->CounterDamage,emptyResult);
		if(pOperator->IsDied())
			Die(pOperator,pObject,FALSE,FALSE,FALSE);
	}
	if(pRInfo->HealLife)
		Heal(pObject,pOperator,DamageKind,pRInfo->HealLife);
	if(pRInfo->RechargeMana)
		Recharge(pObject,pOperator,0,pRInfo->RechargeMana);	
	
	if(pRInfo->StunTime)
	
	if(pRInfo->Vampiric_Life)
	{
		if(pOperator->GetID() == gHeroID)
			HERO->ChangeLife(pRInfo->Vampiric_Life);
		else
			pOperator->SetLife(pOperator->GetLife()+pRInfo->Vampiric_Life);
	}
	
	if(pRInfo->Vampiric_Mana)
	{
		pOperator->SetMana(pOperator->GetMana()+pRInfo->Vampiric_Mana);
	}
}
コード例 #20
0
ファイル: Shadow.cpp プロジェクト: bpoore/162_Fantasy_Game
/*********************************************************************
**                Shadow::attack Function
** Description: This function simulates rolling attack dice.
** Parameters: No input parameters. The function returns a Damage object.
*********************************************************************/	
Damage Shadow::attack() 
{
	int attackTotal = 0;
	for (int i=0; i<numAttackDice; i++)
	{
		int rollVal;
		rollVal = (rand() % numAttackSides + 1);
		//std::cout << "Attack Roll " << i+1 << " = " << rollVal << std::endl;
		attackTotal += rollVal;
	} 
	//std::cout << "Attack Total: " << attackTotal << std::endl;
	return Damage(attackTotal, false);
}
コード例 #21
0
ファイル: world.cpp プロジェクト: Panzerschrek/FREG-3d
bool World::CanMove(const ushort x, const ushort y, const ushort z,
		const ushort newx, const ushort newy, const ushort newz,
		const quint8 dir)
{
	if ( !InBounds(x, y, z) ) {
		return false;
	}
	Block * const block = GetBlock(x, y, z);
	if ( NOT_MOVABLE == block->Movable() ) {
		return false;
	}
	Block * block_to = GetBlock(newx, newy, newz);
	if ( ENVIRONMENT == block->Movable() ) {
		if ( *block == *block_to ) {
			return false;
		} else if ( MOVABLE == block_to->Movable() ) {
			NoCheckMove(x, y, z, newx, newy, newz, dir);
			return true;
		}
	}
	switch ( block_to->BeforePush(dir, block) ) {
	case MOVE_SELF: block_to = GetBlock(newx, newy, newz); break;
	case DESTROY:
		DeleteBlock(block_to);
		PutBlock(Normal(AIR), newx, newy, newz);
		return true;
	break;
	case JUMP:
		if ( DOWN!=dir && UP!=dir ) {
			Jump(x, y, z, dir);
			return false;
		}
	break;
	case MOVE_UP:
		if ( DOWN!=dir && UP!=dir ) {
			Move(x, y, z, UP);
			return false;
		}
	break;
	case DAMAGE:
		Damage(x, y, z,
			block_to->DamageLevel(),
			block_to->DamageKind());
		return false;
	break;
	}
	return ( ENVIRONMENT==block_to->Movable() );/* ||
		( (block->Weight() > block_to->Weight()) &&
			Move(newx, newy, newz, dir) ) );*/
} // bool World::CanMove(ushort x, y, z, newx, newy, newz, quint8 dir)
コード例 #22
0
ファイル: BatMan.cpp プロジェクト: sansanshi/repo_test
void
BatMan::OnCollided(Collider* col)
{
	if (col->Type() == col_attack&&col->CharaType() == ct_player){
		Vector2 vec = (_pos - _playerRef.GetCenter()).Normalize();
		Reject(Vector2(vec.x * 20, 0));
		Player* p = dynamic_cast<Player*>(col->_gameObject);
		Damage(p->GetAttackDmg());
	}
	if (col->Type() == col_default&&col->CharaType() == ct_player){

	}

}
コード例 #23
0
ファイル: DamagerDamaged.cpp プロジェクト: Esplin/wagic
void DamagerDamaged::addDamage(int damage, DamagerDamaged* source)
{
    for (vector<Damage>::iterator i = damages.begin(); i != damages.end(); ++i)
        if (i->source == source->card)
        {
            i->damage += damage;
            if (0 >= i->damage)
                damages.erase(i);
            return;
        }
    if (0 < damage)
        damages.push_back(Damage(card->getObserver(), source->card, card, damage, Damage::DAMAGE_COMBAT));
    return;
}
コード例 #24
0
ファイル: shot_ice.cpp プロジェクト: seobyeongky/gunscape
bool Shot_ice::Action(Game_Manager* gm_)
{
	if(valid)
	{
		if(gm_)
		{
			for(list<Unit*>::iterator it = gm_->unit_list.begin();it != gm_->unit_list.end();it++)
			{
				bool hit_ = true;
				if((*it)->isLive() && !(*it)->isNonTarget()  && (*it)->GetTeam() != GetTeam())
				{
					for(vector<Unit*>::iterator it2 = hit_unit.begin(); it2 != hit_unit.end() ; it2++)
					{
						if((*it) == (*it2))
						{
							hit_ = false;
						}
					}
					if(hit_ && (*it)->collution(GetPos(), 3.0f))
					{
						Damage(gm_, (*it));
					}
				}
			}
		}


		if(collution(3))
		{
			valid = false;
		}
		else
			Move();
		UpDownSpeed(-decel);
		size += size_inc;
		color -= 0x02000000;
		time--;
		if(time<0)
			valid = false;
	}


	if(!valid)
	{
		return true;
	}
	return false;
}
コード例 #25
0
ファイル: bullet_class.c プロジェクト: NSYXin/cdogs-sdl
static bool HitItemFunc(TTileItem *ti, void *data)
{
	HitItemData *hData = data;
	if (!CanHit(hData->Obj->flags, hData->Obj->ActorUID, ti))
	{
		goto bail;
	}
	int targetUID = -1;
	switch (ti->kind)
	{
	case KIND_CHARACTER:
		hData->HitType = HIT_FLESH;
		targetUID = ((const TActor *)CArrayGet(&gActors, ti->id))->uid;
		break;
	case KIND_OBJECT:
		hData->HitType = HIT_OBJECT;
		targetUID = ((const TObject *)CArrayGet(&gObjs, ti->id))->uid;
		break;
	default:
		CASSERT(false, "cannot damage target kind");
		break;
	}
	if (hData->Obj->soundLock > 0 ||
		!HasHitSound(
		hData->Obj->bulletClass->Power, hData->Obj->flags, hData->Obj->PlayerUID,
		ti->kind, targetUID, hData->Obj->bulletClass->Special, true))
	{
		hData->HitType = HIT_NONE;
	}
	Damage(
		hData->Obj->vel, hData->Obj->bulletClass->Power,
		hData->Obj->flags, hData->Obj->PlayerUID, hData->Obj->ActorUID,
		ti->kind, targetUID,
		hData->Obj->bulletClass->Special);
	if (hData->Obj->soundLock <= 0)
	{
		hData->Obj->soundLock += SOUND_LOCK_MOBILE_OBJECT;
	}
	if (hData->Obj->specialLock <= 0)
	{
		hData->Obj->specialLock += SPECIAL_LOCK;
	}

bail:
	// Whether to produce multiple hits from the same TMobileObject
	return hData->MultipleHits;
}
コード例 #26
0
ファイル: Animal.cpp プロジェクト: Panzerschrek/FREG-3d_2.0
 void Animal::DoRareAction() {
     if ( GROUP_MEAT != GetSubGroup(Sub()) ) return;
     if ( not IsSubAround(AIR) ) {
         if ( breath <= 0 ) {
             Damage(10, DAMAGE_BREATH);
         } else {
             --breath;
         }
     } else if ( breath < MAX_BREATH ) {
         ++breath;
     }
     if ( GetDurability() <= 0 ) {
         GetWorld()->DestroyAndReplace(X(), Y(), Z());
     } else {
         emit Updated();
     }
 }
コード例 #27
0
ファイル: Enemy.cpp プロジェクト: nitorionedan/GekiRenSha
void Enemy::Move()
{
	switch (m_pattern)
	{
	case 0:	Move_0();	break;
	case 1:	Move_1();	break;
	case 2:	Move_2();	break;
	case 3:	Move_3();	break;
	case 4:	Move_4();	break;
	case 5:	Move_5();	break;
	case 6:	Move_6();	break;
	case 7:	Move_7();	break;
	}

	const bool& IS_HIT = Game::IsHitPlayer(hitRange, Player::HIT_RANGE, pos.x, pos.y, Game::GetPlayerPos().x, Game::GetPlayerPos().y);
	if (IS_HIT)	Damage(1);
}
コード例 #28
0
ファイル: Containers.cpp プロジェクト: mmaulwurff/FREG
 void Box::DoRareAction() {
     if ( GROUP_MEAT == GetSubGroup(Sub()) ) {
         Damage(MAX_DURABILITY/World::SECONDS_IN_DAY, DAMAGE_TIME);
         if ( GetDurability() <= 0 ) {
             World::GetWorld()->DestroyAndReplace(X(), Y(), Z());
         }
     } else if ( Sub() == DIFFERENT ) {
         World* const world = World::GetWorld();
         Inventory* const inv =
             world->GetBlock(X(), Y(), Z()-1)->HasInventory();
         if ( inv ) {
             inv->GetAll(this);
         }
         if ( IsEmpty() ) {
             world->DestroyAndReplace(X(), Y(), Z());
         }
     }
 }
コード例 #29
0
ファイル: EnemyLeader.cpp プロジェクト: EKISUKE/GitHubTest
//-----------------------------------------------------------------------------
//! 更新
//-----------------------------------------------------------------------------
void EnemyLeader::UpdateByCommand()
{
	
	// 一定距離はなれていなければ
	if( (_goalPos - _position).length() <= 3000.0f && !_goGoal){
		
		// ターゲットの検索、設定
		EnemyBase::searchAndSetTarget();

		
		// キーの更新
		_key->Update();

		//---- キャラの移動
		Vector3	StickState = _key->getVector();
		
		// スティック操作がされていたら
		if( abs(atan2f(StickState._x, StickState._z) ) > 0.0f )
		{
			_rotation._y = atan2f( StickState._x, StickState._z );
			_speed = _myStatus->getParam()->_speedMAX;
		}else{
			_speed = 0.0f;
		}
	}else{
		UpdateNormal(_goalPos);
	}

	// 当たり判定とダメージ計算
	s32 damage = EnemyBase::calcDamageAndCollision();
	
	s32 currentAnimation = _pTaskModel->getAnimation();

	if( damage > 0 ) {
		Damage(damage);
		// ダメージアニメーションへ
		_pTaskModel->setAnimation(_aniDamage);
	}else if( currentAnimation == _aniDamage ){
		_isDamage = false;
	}
	
	_pTaskModel->update();
		
}
コード例 #30
0
ファイル: enemy.cpp プロジェクト: grandseiken/iispace
void Wall::Update()
{
    if ( GetNonWallCount() == 0 && _timer % 8 < 2 ) {
        if ( GetHP() > 2 )
            PlaySound( Lib::SOUND_ENEMY_SPAWN );
        Damage( GetHP() - 2, false, 0 );
    }

    if ( _rotate ) {
        Vec2 d( _dir );
        d.Rotate( ( _rdir ? _timer - TIMER : TIMER - _timer ) * M_PI / ( M_FOUR * TIMER ) );
        SetRotation( d.Angle() );
        _timer--;
        if ( _timer <= 0 ) {
            _timer = 0;
            _rotate = false;
            _dir.Rotate( _rdir ? -M_PI / M_FOUR : M_PI / M_FOUR );
        }
        return;
    }
    else {
        _timer++;
        if ( _timer > TIMER * 6 ) {
            if ( IsOnScreen() ) {
                _timer = TIMER;
                _rotate = true;
            }
            else
                _timer = 0;
        }
    }

    Vec2 pos = GetPosition();
    if ( ( pos._x < 0 && _dir._x < -M_PT_ZERO_ONE ) ||
         ( pos._y < 0 && _dir._y < -M_PT_ZERO_ONE ) ||
         ( pos._x > Lib::WIDTH && _dir._x > M_PT_ZERO_ONE ) ||
         ( pos._y > Lib::HEIGHT && _dir._y > M_PT_ZERO_ONE ) ) {
        _dir = Vec2() - _dir;
        _dir.Normalise();
    }

    Move( _dir * SPEED );
    SetRotation( _dir.Angle() );
}