int CvPlayerAI::AI_plotTargetMissionAIs(CvPlot* pPlot, MissionAITypes eMissionAI, int iRange) { int iCount = 0; int iLoop; for(CvUnit* pLoopUnit = firstUnit(&iLoop); pLoopUnit; pLoopUnit = nextUnit(&iLoop)) { CvPlot* pMissionPlot = pLoopUnit->GetMissionAIPlot(); if(!pMissionPlot) { continue; } MissionAITypes eGroupMissionAI = pLoopUnit->GetMissionAIType(); if(eGroupMissionAI != eMissionAI) { continue; } int iDistance = plotDistance(pPlot->getX(), pPlot->getY(), pMissionPlot->getX(), pMissionPlot->getY()); if(iDistance == iRange) { iCount++; } } return iCount; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveGeneral(CvUnit* pGreatGeneral) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; SpecialUnitTypes eSpecialUnitGreatPerson = (SpecialUnitTypes) GC.getInfoTypeForString("SPECIALUNIT_PEOPLE"); int iGreatGeneralCount = 0; int iLoop; for(CvUnit* pLoopUnit = firstUnit(&iLoop); pLoopUnit; pLoopUnit = nextUnit(&iLoop)) { if(pLoopUnit->getSpecialUnitType() != eSpecialUnitGreatPerson) { continue; } if(pLoopUnit->AI_getUnitAIType() == UNITAI_GENERAL && pLoopUnit->GetGreatPeopleDirective() != GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE) { iGreatGeneralCount++; } } if(iGreatGeneralCount > 2 && pGreatGeneral->plot()->getOwner() == pGreatGeneral->getOwner()) { // we're using a power at this point because constructing the improvement goes through different code eDirective = GREAT_PEOPLE_DIRECTIVE_USE_POWER; } return eDirective; }
GreatPeopleDirectiveTypes CvPlayerAI::GetDirectiveGeneral (CvUnit*) { GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; SpecialUnitTypes eSpecialUnitGreatPerson = (SpecialUnitTypes) GC.getInfoTypeForString("SPECIALUNIT_PEOPLE"); int iGreatGeneralCount = 0; int iLoop; for (CvUnit* pLoopUnit = firstUnit(&iLoop); pLoopUnit; pLoopUnit = nextUnit(&iLoop)) { if (pLoopUnit->getSpecialUnitType() != eSpecialUnitGreatPerson) { continue; } if (pLoopUnit->AI_getUnitAIType() == UNITAI_GENERAL && pLoopUnit->GetGreatPeopleDirective() != GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE) { iGreatGeneralCount++; } } if (iGreatGeneralCount > 2) { eDirective = GREAT_PEOPLE_DIRECTIVE_GOLDEN_AGE; } return eDirective; }
void CvPlayerAI::ProcessGreatPeople(void) { SpecialUnitTypes eSpecialUnitGreatPerson = (SpecialUnitTypes) GC.getInfoTypeForString("SPECIALUNIT_PEOPLE"); CvAssert(isAlive()); if(!isAlive()) return; int iLoop; for(CvUnit* pLoopUnit = firstUnit(&iLoop); pLoopUnit; pLoopUnit = nextUnit(&iLoop)) { if(pLoopUnit->getSpecialUnitType() != eSpecialUnitGreatPerson) { continue; } GreatPeopleDirectiveTypes eDirective = NO_GREAT_PEOPLE_DIRECTIVE_TYPE; switch(pLoopUnit->AI_getUnitAIType()) { case UNITAI_WRITER: eDirective = GetDirectiveWriter(pLoopUnit); break; case UNITAI_ARTIST: eDirective = GetDirectiveArtist(pLoopUnit); break; case UNITAI_MUSICIAN: eDirective = GetDirectiveMusician(pLoopUnit); break; case UNITAI_ENGINEER: eDirective = GetDirectiveEngineer(pLoopUnit); break; case UNITAI_MERCHANT: eDirective = GetDirectiveMerchant(pLoopUnit); break; case UNITAI_SCIENTIST: eDirective = GetDirectiveScientist(pLoopUnit); break; case UNITAI_GENERAL: eDirective = GetDirectiveGeneral(pLoopUnit); break; case UNITAI_PROPHET: eDirective = GetDirectiveProphet(pLoopUnit); break; case UNITAI_ADMIRAL: eDirective = GetDirectiveAdmiral(pLoopUnit); break; } pLoopUnit->SetGreatPeopleDirective(eDirective); } }
void CvPlayerAI::AI_doTurnUnitsPost() { CvUnit* pLoopUnit; int iLoop; if(!isHuman()) { for(pLoopUnit = firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = nextUnit(&iLoop)) { pLoopUnit->AI_promote(); } } }
int COGLColorCombiner4::ParseDecodedMux() { #define nextUnit() {unitNo++;} #ifndef USE_GLES if( m_maxTexUnits<3) return ParseDecodedMux2Units(); OGLExtCombinerSaveType res; for( int k=0; k<8; k++ ) res.units[k].tex = -1; COGLDecodedMux &mux = *(COGLDecodedMux*)m_pDecodedMux; int unitNos[2]; for( int rgbalpha = 0; rgbalpha<2; rgbalpha++ ) { unitNos[rgbalpha] = 0; for( int cycle = 0; cycle<2; cycle++ ) { int &unitNo = unitNos[rgbalpha]; OGLExtCombinerType &unit = res.units[unitNo]; OGLExt1CombType &comb = unit.Combs[rgbalpha]; CombinerFormatType type = m_pDecodedMux->splitType[cycle*2+rgbalpha]; N64CombinerType &m = m_pDecodedMux->m_n64Combiners[cycle*2+rgbalpha]; comb.arg0 = comb.arg1 = comb.arg2 = CM_IGNORE_BYTE; switch( type ) { case CM_FMT_TYPE_NOT_USED: comb.arg0 = MUX_COMBINED; unit.ops[rgbalpha] = GL_REPLACE; nextUnit(); break; case CM_FMT_TYPE_D: // = A comb.arg0 = m.d; unit.ops[rgbalpha] = GL_REPLACE; nextUnit(); break; case CM_FMT_TYPE_A_ADD_D: // = A+D comb.arg0 = m.a; comb.arg1 = m.d; unit.ops[rgbalpha] = GL_ADD; nextUnit(); break; case CM_FMT_TYPE_A_SUB_B: // = A-B comb.arg0 = m.a; comb.arg1 = m.b; unit.ops[rgbalpha] = GL_SUBTRACT; nextUnit(); break; case CM_FMT_TYPE_A_MOD_C: // = A*C comb.arg0 = m.a; comb.arg1 = m.c; unit.ops[rgbalpha] = GL_MODULATE; nextUnit(); break; case CM_FMT_TYPE_A_MOD_C_ADD_D: // = A*C+D if( m_bSupportModAdd_ATI ) { comb.arg0 = m.a; comb.arg2 = m.c; comb.arg1 = m.d; unit.ops[rgbalpha] = GL_MODULATE_ADD_ATI; nextUnit(); } else { if( unitNo < m_maxTexUnits-1 ) { comb.arg0 = m.a; comb.arg1 = m.c; unit.ops[rgbalpha] = GL_MODULATE; nextUnit(); res.units[unitNo].Combs[rgbalpha].arg0 = MUX_COMBINED; res.units[unitNo].Combs[rgbalpha].arg1 = m.d; res.units[unitNo].ops[rgbalpha] = GL_ADD; nextUnit(); } else { comb.arg0 = m.a; comb.arg1 = m.c; comb.arg2 = m.d; unit.ops[rgbalpha] = GL_INTERPOLATE; nextUnit(); } } break; case CM_FMT_TYPE_A_LERP_B_C: // = (A-B)*C+B comb.arg0 = m.a; comb.arg1 = m.b; comb.arg2 = m.c; unit.ops[rgbalpha] = GL_INTERPOLATE; nextUnit(); break; case CM_FMT_TYPE_A_SUB_B_ADD_D: // = A-B+D if( unitNo < m_maxTexUnits-1 ) { comb.arg0 = m.a; comb.arg1 = m.b; unit.ops[rgbalpha] = GL_SUBTRACT; nextUnit(); res.units[unitNo].Combs[rgbalpha].arg0 = MUX_COMBINED; res.units[unitNo].Combs[rgbalpha].arg1 = m.d; res.units[unitNo].ops[rgbalpha] = GL_ADD; nextUnit(); } else { comb.arg0 = m.a; comb.arg1 = m.c; comb.arg2 = m.d; unit.ops[rgbalpha] = GL_INTERPOLATE; nextUnit(); } break; case CM_FMT_TYPE_A_SUB_B_MOD_C: // = (A-B)*C if( unitNo < m_maxTexUnits-1 ) { comb.arg0 = m.a; comb.arg1 = m.b; unit.ops[rgbalpha] = GL_SUBTRACT; nextUnit(); res.units[unitNo].Combs[rgbalpha].arg0 = MUX_COMBINED; res.units[unitNo].Combs[rgbalpha].arg1 = m.c; res.units[unitNo].ops[rgbalpha] = GL_MODULATE; nextUnit(); } else { comb.arg0 = m.a; comb.arg1 = m.c; comb.arg2 = m.d; unit.ops[rgbalpha] = GL_INTERPOLATE; nextUnit(); } break; case CM_FMT_TYPE_A_B_C_D: // = (A-B)*C+D default: if( unitNo < m_maxTexUnits-1 ) { comb.arg0 = m.a; comb.arg1 = m.b; unit.ops[rgbalpha] = GL_SUBTRACT; nextUnit(); if( m_bSupportModAdd_ATI ) { res.units[unitNo].Combs[rgbalpha].arg0 = MUX_COMBINED; res.units[unitNo].Combs[rgbalpha].arg2 = m.c; res.units[unitNo].Combs[rgbalpha].arg1 = m.d; res.units[unitNo].ops[rgbalpha] = GL_MODULATE_ADD_ATI; nextUnit(); } else { res.units[unitNo].Combs[rgbalpha].arg0 = m.a; res.units[unitNo].Combs[rgbalpha].arg1 = m.b; res.units[unitNo].Combs[rgbalpha].arg2 = m.c; res.units[unitNo].ops[rgbalpha] = GL_INTERPOLATE; nextUnit(); } } else { comb.arg0 = m.a; comb.arg1 = m.c; comb.arg2 = m.d; unit.ops[rgbalpha] = GL_INTERPOLATE; nextUnit(); } break; } } } res.numOfUnits = std::min(m_maxTexUnits, std::max(unitNos[0],unitNos[1])); if( unitNos[0]>m_maxTexUnits || unitNos[1]>m_maxTexUnits ) { TRACE0("Unit overflows"); } for( int j=0; j<2; j++ ) { if( unitNos[j]<res.numOfUnits ) { for( int i=unitNos[j]; i<res.numOfUnits; i++ ) { res.units[i].Combs[j].arg0 = MUX_COMBINED; res.units[i].ops[j] = GL_REPLACE; } } } res.units[0].tex = 0; res.units[1].tex = 1; res.primIsUsed = mux.isUsed(MUX_PRIM); res.envIsUsed = mux.isUsed(MUX_ENV); res.lodFracIsUsed = mux.isUsed(MUX_LODFRAC) || mux.isUsed(MUX_PRIMLODFRAC); return SaveParsedResult(res); #else return 0; #endif }