-------------------------------------------------------------------------------- Description: This is where it is all going to happen --------------------------------------------------------------------------------
| 1119 | // This is where it is all going to happen |
| 1120 | // -------------------------------------------------------------------------------- |
| 1121 | void EveSOF::SetupSpriteLineSets( IEveSpaceObjectAttachmentOwnerPtr obj, const EveSOFDNAPtr dna, const std::vector<Matrix>& offsets, uint32_t buildFlags ) const |
| 1122 | { |
| 1123 | CCP_STATS_ZONE( __FUNCTION__ ); |
| 1124 | |
| 1125 | // cycle over all hulls in the multi-hull list |
| 1126 | Vector3 hullOffset( 0.f, 0.f, 0.f ); |
| 1127 | |
| 1128 | for( size_t hullIdx = 0; hullIdx < dna->GetMultiHullCount(); ++hullIdx ) |
| 1129 | { |
| 1130 | // cycle over all spritelinesets of this hull |
| 1131 | const std::vector<EveSOFDataMgr::HullSpriteLineSetData>& hullSpriteLineSets = dna->GetHullSpriteLineSets( hullIdx ); |
| 1132 | for( auto slsit = hullSpriteLineSets.begin(); slsit != hullSpriteLineSets.end(); ++slsit ) |
| 1133 | { |
| 1134 | const EveSOFDataMgr::HullSpriteLineSetData* spriteLineSetData = &( *slsit ); |
| 1135 | |
| 1136 | // visible? |
| 1137 | if( dna->IsInVisibilityData( spriteLineSetData->visibilityGroup ) ) |
| 1138 | { |
| 1139 | // create a spriteset for this ship |
| 1140 | EveSpriteLineSetPtr spriteLineSet; |
| 1141 | spriteLineSet.CreateInstance(); |
| 1142 | // set shader |
| 1143 | spriteLineSet->Setup( m_spriteSetEffect, spriteLineSetData->skinned && buildFlags != EveSOFDataHullBuildFilter::INSTANCED_PLACEMENT ); |
| 1144 | uint32_t index = 0; |
| 1145 | |
| 1146 | for( auto& offset : offsets ) |
| 1147 | { |
| 1148 | // add all the individual items |
| 1149 | for( auto slsiit = spriteLineSetData->items.begin(); slsiit != spriteLineSetData->items.end(); ++slsiit ) |
| 1150 | { |
| 1151 | const EveSOFDataMgr::HullSpriteLineSetItemData* itemData = &( *slsiit ); |
| 1152 | |
| 1153 | // color data? |
| 1154 | const Color* colorSet = dna->GetColorSet(); |
| 1155 | |
| 1156 | // create spritelineset items |
| 1157 | EveSpriteLineSetItemPtr spriteLineSetItem; |
| 1158 | spriteLineSetItem.CreateInstance(); |
| 1159 | |
| 1160 | // set it up the colorset data |
| 1161 | spriteLineSetItem->m_color = itemData->intensity * colorSet[itemData->colorType]; |
| 1162 | |
| 1163 | // set up the position data |
| 1164 | Vector3 tmp; |
| 1165 | Matrix m = TransformationMatrix( Vector3( 1.0f, 1.0f, 1.0f ), itemData->rotation, itemData->position + hullOffset ) * offset; |
| 1166 | Decompose( tmp, spriteLineSetItem->m_rotation, spriteLineSetItem->m_position, m ); |
| 1167 | |
| 1168 | // set it up the per-hull data |
| 1169 | spriteLineSetItem->m_blinkPhaseShift = itemData->blinkPhaseShift; |
| 1170 | spriteLineSetItem->m_blinkPhase = itemData->blinkPhase; |
| 1171 | spriteLineSetItem->m_blinkRate = itemData->blinkRate; |
| 1172 | spriteLineSetItem->m_boneIndex = itemData->boneIndex; |
| 1173 | spriteLineSetItem->m_falloff = itemData->falloff; |
| 1174 | spriteLineSetItem->m_maxScale = itemData->maxScale; |
| 1175 | spriteLineSetItem->m_minScale = itemData->minScale; |
| 1176 | spriteLineSetItem->m_scaling = itemData->scaling; |
| 1177 | spriteLineSetItem->m_spacing = itemData->spacing; |
| 1178 | spriteLineSetItem->m_isCircle = itemData->isCircle; |
nothing calls this directly
no test coverage detected