void CMonster::Die(CObject* pAttacker,BOOL bFatalDamage,BOOL bCritical, BOOL bDecisive) { if(pAttacker) MOVEMGR->SetLookatPos(this,&pAttacker->GetCurPosition(),0,gCurTime); if( OBJECTMGR->GetSelectedObjectID() == GetID() ) { OBJECTMGR->SetSelectedEffect( NULL ); } int DieEffect; if(bFatalDamage) DieEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Die2DramaNum; // 날라가서 죽기 else DieEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Die1DramaNum; // 그냥 죽기 if(DieEffect != -1) { TARGETSET set; set.pTarget = this; set.ResultInfo.bCritical = bCritical; set.ResultInfo.bDecisive = bDecisive; EFFECTMGR->StartEffectProcess(DieEffect,pAttacker,&set,1,GetID(), EFFECT_FLAG_DIE|EFFECT_FLAG_GENDERBASISTARGET); } // Life 셋팅 SetLife(0); }
int CParticleSystem::Update (void) { CParticleEmitter *emitterP; int i = 0; if ((m_nObject == 0x7fffffff) && (m_nType == SMOKE_PARTICLES) && (gameStates.app.nSDLTicks - m_nBirth > (MAX_SHRAPNEL_LIFE / I2X (1)) * 1000)) SetLife (0); #if DBG if ((m_nObject >= 0) && (m_nObject < 0x70000000) && (OBJECTS [m_nObject].info.nType == 255)) i = i; #endif if ((emitterP = m_emitters.Buffer ())) { bool bKill = (m_nObject < 0) || ((m_nObject < 0x70000000) && ((OBJECTS [m_nObject].info.nSignature != m_nSignature) || (OBJECTS [m_nObject].info.nType == OBJ_NONE))); for (i = 0; i < m_nEmitters; ) { if (!m_emitters) return 0; if (emitterP->IsDead (gameStates.app.nSDLTicks)) { if (!RemoveEmitter (i)) { //particleManager.Destroy (m_nId); m_bDestroy = true; break; } } else { if (bKill) emitterP->SetLife (0); emitterP->Update (gameStates.app.nSDLTicks, -1); emitterP++, i++; } } } return i; }
int CParticleSystem::Render (void) { if (!m_bValid) return 0; int h = 0; if (m_emitters.Buffer ()) { if (!particleImageManager.Load (m_nType)) return 0; if ((m_nObject >= 0) && (m_nObject < 0x70000000) && ((OBJECTS [m_nObject].info.nType == OBJ_NONE) || (OBJECTS [m_nObject].info.nSignature != m_nSignature) || (particleManager.GetObjectSystem (m_nObject) < 0))) SetLife (0); CParticleEmitter *emitterP = m_emitters.Buffer (); for (int i = m_nEmitters; i; i--, emitterP++) h += emitterP->Render (-1); } #if DBG if (!h) return 0; #endif return h; }
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함 void CMapObject::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result) { if( pAttacker ) { if( OPTIONMGR->IsShowMemberDamage() ) { if( pAttacker == HERO || pAttacker == HEROPET || PARTYMGR->IsPartyMember( pAttacker->GetID() ) ) EFFECTMGR->AddDamageNumber(Damage,pAttacker,this,DamageKind,result); } else { if( pAttacker == HERO || pAttacker == HEROPET ) EFFECTMGR->AddDamageNumber(Damage,pAttacker,this,DamageKind,result); } } // Life 셋팅 DWORD life = GetLife(); if(life < Damage) life = 0; else life = life - Damage; SetLife(life); }
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함 void CBossMonster::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result) { // CheckTmpFunc(); SetObjectBattleState( eObjectBattleState_Battle ); if(Damage != 0) { const int DamageEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Damage1DramaNum; if(DamageEffect != -1) { TARGETSET set; set.pTarget = this; set.ResultInfo = result; EFFECTMGR->StartEffectProcess(DamageEffect,pAttacker,&set,1,GetID()); } } if( pAttacker ) { if( pAttacker != HEROPETBACKUP ) pAttacker->SetObjectBattleState( eObjectBattleState_Battle ); if(pAttacker->GetID() == gHeroID || pAttacker == HEROPET || OPTIONMGR->IsShowMemberDamage() && PARTYMGR->IsPartyMember(pAttacker->GetID())) { EFFECTMGR->AddDamageNumber( Damage, pAttacker, this, DamageKind,result); } else if(eObjectKind_Monster & pAttacker->GetObjectKind()) { CMonster* const monster = (CMonster*)pAttacker; if(monster->GetMonsterTotalInfo().OwnedObjectIndex == gHeroID) { EFFECTMGR->AddDamageNumber( Damage, pAttacker, this, DamageKind,result); } } } // Life 셋팅 DWORD life = GetLife(); if(life < Damage) life = 0; else life = life - Damage; SetLife(life); }
void CStage::Continue() { if (4 - GetContinue() > 0) { gContinue->Draw(); SetDrawBlendMode(DX_BLENDMODE_INVSRC, 255); gNumber->Draw(453, 283, 4 - GetContinue()); SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255); if (continueState) { gPauseP->Draw(320, 481); if ((Event.key.GetDown(Event.key.Z) || Event.key.GetDown(Event.key.RETURN))) { music->ResetLoopFlag(); overFlag = true; } } else { gPauseP->Draw(320, 384); if ((Event.key.GetDown(Event.key.Z) || Event.key.GetDown(Event.key.RETURN))) { continueFlag = false; music->RestartLoop(); if (GetPractice()) { SetLife(9, 9); } else { SetLife(2, 3); AddHaniwaBomb(); } AddContinue(); } } if (Event.key.GetDown(Event.key.UP) || Event.key.GetDown(Event.key.DOWN)) { if (continueState) { continueState = false; } else { continueState = true; } } } else { music->ResetLoopFlag(); overFlag = true; } }
// ------------------------------------------------------------------------------------------------ void ProjectileBase :: SetState(Uint32 setOwnerPlayerId, Vector2df setPos, Vector2df setHeading, float setSpeed, float setLife, Uint32 setHealth, bool setIsMoving) { SetOwnerPlayerId(setOwnerPlayerId); SetPos(setPos); SetHeading(setHeading); SetSpeed(setSpeed); SetLife(setLife); SetHealth(setHealth); SetIsMoving(setIsMoving); } // ----------------------------------------------------------------------------------------------
void CPet::Heal(CObject* pHealer,BYTE HealKind,DWORD HealVal) { // desc_hseos_전투평화상태01 // S 전투평화상태 주석처리 added by hseos 2007.08.02 if( GetObjectBattleState() == eObjectBattleState_Battle ) { if( pHealer ) pHealer->SetObjectBattleState( eObjectBattleState_Battle ); } // E 전투평화상태 주석처리 added by hseos 2007.08.02 DWORD life = GetLife() + HealVal; SetLife(life); }
void Enemy::SetAll( float x, float y, float z, int life, int timer, int shotpattern, int movepattern , int Itemflag){ SetX(x); SetY(y); SetZ(z); SetLife(life); SetTimer(timer); this->Itemflag = Itemflag; this->shotpattern = shotpattern; this->movepattern = movepattern; for(int i = 0; i < ESNUM; i++){ es[i].graph = MV1LoadModel("aaaa.mqo"); es[i].flag = 0; MV1SetScale(es[i].graph, VGet(0.01f, 0.01f, 0.01f)); } score = life * 100; DeathTimer = 120; }
void CFieldSubMonster::Recover() { if(m_Info.m_dwPieceTime + m_Info.m_dwRecoverStartTime < gCurTime) { DWORD maxlife = GetMaxLife(); DWORD curlife = GetLife(); if(gCurTime - m_LifeRecoverTime.lastCheckTime > m_Info.m_dwRecoverDelayTime) { if(curlife < maxlife) { DWORD pluslife = (DWORD)(maxlife * m_Info.m_fLifeRate); SetLife(curlife + pluslife, TRUE); m_LifeRecoverTime.lastCheckTime = gCurTime; } } } }
//main main(){ // 3 starting arrays int a[row][col], b[row][col], c[row][col]; //telling user what to do UserInstruct(); //make first array is all zero InitStartArray(a,row,col); //asking user to set cells with life in them SetLife(a); //printing array printf("The life you have made in the grid\n"); PrintArray(a,row,col); //ask user for number of generations int generations = AskGeneration(); //play game int genFinal; int samePattern; int numberOfGenerations = Game(generations, &genFinal,&samePattern,a,b,c); printf("After %d generations this much life remaineds\n", numberOfGenerations); if (samePattern){ printf("Steady state was reached\n"); } //print out final array if (genFinal == one){ PrintArray(a,row,col); } if (genFinal == two){ PrintArray(b,row,col); } if (genFinal == three){ PrintArray(c,row,col); } }
void Tank::TrackAnimation() { ++_TrackUpdateFrame; if (_TrackUpdateFrame == FPS * TRACKPOINT_CREATE_CYCLE) { auto trackPoint = TrackPoint::Create(); trackPoint->SetPosition(_Bullet->GetPosition()); trackPoint->SetVisible(false); this->AddChild(trackPoint); _Track.push_back(trackPoint); _TrackUpdateFrame = 0; } for (auto iter = _Track.begin(); iter != _Track.end();) { auto trackPoint = *iter; trackPoint->SetStartPos(_Bullet->GetPosition()); trackPoint->SetLife(TRACKPOINT_LIFE); trackPoint->SetPower(_Power); trackPoint->SetAngle(D3DXToRadian(_DegreeAngle)); trackPoint->Update(); if (!trackPoint->IsActive()) { trackPoint->Release(); iter = _Track.erase(iter); } else { ++iter; } } }
void CMonster::Heal(CObject* pHealer,BYTE HealKind,DWORD HealVal) { SetLife(GetLife() + HealVal); }
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함 void CPet::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result) { // desc_hseos_전투평화상태01 // S 전투평화상태 주석처리 added by hseos 2007.08.02 SetObjectBattleState( eObjectBattleState_Battle ); if (pAttacker) pAttacker->SetObjectBattleState( eObjectBattleState_Battle ); // E 전투평화상태 주석처리 added by hseos 2007.08.02 if(Damage != 0) { if(GetState() == eObjectState_None) { if(pAttacker) MOVEMGR->SetLookatPos(this,&pAttacker->GetCurPosition(),0,gCurTime); } if(GetState() == eObjectState_None) { // 091110 ONS 펫 애니메이션 추가 ChangeMotion(GetMotionIDX(eMonsterMotionN_Damage),FALSE); } int DamageEffect = -1; if( result.bCritical ) { DamageEffect = eEffect_CriticalDamage; } else { DamageEffect = eEffect_NormalDamage; } if(DamageEffect != -1) { TARGETSET set; set.pTarget = this; set.ResultInfo = result; EFFECTMGR->StartEffectProcess(DamageEffect,pAttacker,&set,1,GetID(), EFFECT_FLAG_GENDERBASISTARGET); if( result.bCritical ) { TARGETSET set; set.pTarget = this; EFFECTMGR->StartEffectProcess(19,this,&set,0,GetID()); } } } if( pAttacker == HERO || pAttacker == HEROPET || this == HEROPET ) { EFFECTMGR->AddDamageNumber(Damage,pAttacker,this,DamageKind,result); } // Life 셋팅 DWORD life = GetLife(); if(life < Damage) life = 0; else life = life - Damage; SetLife(life); }
void Api::_SetLife(Object* target,double life){ int lifei = (int)(life); SetLife(target, lifei); }
// 080910 LUJ, 데미지 상태 처리를 RESULTINFO 구조체를 받아 처리하도록 함 void CMonster::Damage(CObject* pAttacker,BYTE DamageKind,DWORD Damage,const RESULTINFO& result) { SetObjectBattleState( eObjectBattleState_Battle ); // 091218 LUJ, 널포인터 예외가 발생해서 검사를 추가함 if(pAttacker && pAttacker != HEROPETBACKUP) { pAttacker->SetObjectBattleState( eObjectBattleState_Battle ); } if(Damage != 0) { if(GetState() == eObjectState_None) { if(pAttacker) MOVEMGR->SetLookatPos(this,&pAttacker->GetCurPosition(),0,gCurTime); ChangeMotion(1,FALSE); switch(DamageKind) { case eDamageKind_Front: ChangeMotion(eMonsterMotion_DamageFront,FALSE); break; case eDamageKind_Left: ChangeMotion(eMonsterMotion_DamageLeft,FALSE); break; case eDamageKind_Right: ChangeMotion(eMonsterMotion_DamageRight,FALSE); break; } } int DamageEffect = GAMERESRCMNGR->GetMonsterListInfo(GetMonsterKind())->Damage1DramaNum; if(DamageEffect != -1) { TARGETSET set; set.pTarget = this; set.ResultInfo = result; EFFECTMGR->StartEffectProcess( DamageEffect, pAttacker, &set, 1, GetID(), EFFECT_FLAG_GENDERBASISTARGET); if( result.bCritical ) { TARGETSET set; set.pTarget = this; EFFECTMGR->StartEffectProcess(19,this,&set,0,GetID()); } } } if( pAttacker ) { if(pAttacker->GetID() == gHeroID || pAttacker == HEROPET || GetMonsterTotalInfo().OwnedObjectIndex == gHeroID || OPTIONMGR->IsShowMemberDamage() && PARTYMGR->IsPartyMember(pAttacker->GetID())) { EFFECTMGR->AddDamageNumber( Damage, pAttacker, this, DamageKind,result); } else if(eObjectKind_Monster & pAttacker->GetObjectKind()) { CMonster* const monster = (CMonster*)pAttacker; if(monster->GetMonsterTotalInfo().OwnedObjectIndex == gHeroID) { EFFECTMGR->AddDamageNumber( Damage, pAttacker, this, DamageKind,result); } } } // Life 셋팅 DWORD life = GetLife(); if(life < Damage) life = 0; else life = life - Damage; SetLife(life); }
void CMonster::Process() { if(IsDied()) { DWORD time = REMOVEFADE_START_TIME; if(GetObjectKind() == eObjectKind_BossMonster) { time += 5000; } if( gCurTime - m_DiedTime > time ) { ShowObjectName( FALSE ); ShowChatBalloon( FALSE, NULL ); //그림자도 없애주자. if(m_ShadowObj.IsInited()) { m_ShadowObj.Release(); } DWORD ToTime = time; DWORD ElTime = gCurTime - m_DiedTime - time; float alp = 1 - (ElTime / (float)ToTime); if(alp <= 0) alp = 0; GetEngineObject()->SetAlpha(alp); } #ifdef _TESTCLIENT_ if(gCurTime - m_DiedTime > MONSTERREMOVE_TIME) { OBJECTMGR->AddGarbageObject(this); } #endif } else { const EObjectKind objectKind = EObjectKind( GetSInfo() ? GetSInfo()->ObjectKind : eObjectKind_None ); switch( objectKind ) { // 080616 LUJ, 함정인 경우 초당 1씩 피를 감소시키고, 최후에는 자살시킨다 case eObjectKind_Trap: { if( gCurTime < mLastCheckedTick ) { break; } else if( ! GetLife() ) { SetDieFlag(); break; } SetLife( GetLife() - 1 ); mLastCheckedTick = gCurTime + 1000; break; } } } if(GetObjectKind() == eObjectKind_BossMonster) { CBossMonster* const pMon = (CBossMonster*)this; // 080109 KTH -- 보스 몬스터 등장 연출 if( pMon && pMon->IsOpenning() ) { if( pMon->GetOpenningTime()->Check() == 0 ) { pMon->GetEngineObject()->EnablePick(); pMon->SetOpenningEnd(); } } } CObject::Process(); }
void CMapObject::Die(CObject* pAttacker,BOOL bFatalDamage,BOOL bCritical, BOOL bDecisive) { SetLife(0); CObject::Die(pAttacker,bFatalDamage,bCritical,bDecisive); }