| 3304 | } |
| 3305 | |
| 3306 | void PixelGameEngine::FillTexturedPolygon(const std::vector<olc::vf2d>& vPoints, const std::vector<olc::vf2d>& vTex, const std::vector<olc::Pixel>& vColour, olc::Sprite* sprTex, olc::DecalStructure structure) |
| 3307 | { |
| 3308 | if (structure == olc::DecalStructure::LINE) |
| 3309 | { |
| 3310 | return; // Meaningless, so do nothing |
| 3311 | } |
| 3312 | |
| 3313 | if (vPoints.size() < 3 || vTex.size() < 3 || vColour.size() < 3) |
| 3314 | return; |
| 3315 | |
| 3316 | if (structure == olc::DecalStructure::LIST) |
| 3317 | { |
| 3318 | for (size_t tri = 0; tri < vPoints.size() / 3; tri++) |
| 3319 | { |
| 3320 | std::vector<olc::vf2d> vP = { vPoints[tri * 3 + 0], vPoints[tri * 3 + 1], vPoints[tri * 3 + 2] }; |
| 3321 | std::vector<olc::vf2d> vT = { vTex[tri * 3 + 0], vTex[tri * 3 + 1], vTex[tri * 3 + 2] }; |
| 3322 | std::vector<olc::Pixel> vC = { vColour[tri * 3 + 0], vColour[tri * 3 + 1], vColour[tri * 3 + 2] }; |
| 3323 | FillTexturedTriangle(vP, vT, vC, sprTex); |
| 3324 | } |
| 3325 | return; |
| 3326 | } |
| 3327 | |
| 3328 | if (structure == olc::DecalStructure::STRIP) |
| 3329 | { |
| 3330 | for (size_t tri = 2; tri < vPoints.size(); tri++) |
| 3331 | { |
| 3332 | std::vector<olc::vf2d> vP = { vPoints[tri - 2], vPoints[tri - 1], vPoints[tri] }; |
| 3333 | std::vector<olc::vf2d> vT = { vTex[tri - 2], vTex[tri - 1], vTex[tri] }; |
| 3334 | std::vector<olc::Pixel> vC = { vColour[tri - 2], vColour[tri - 1], vColour[tri] }; |
| 3335 | FillTexturedTriangle(vP, vT, vC, sprTex); |
| 3336 | } |
| 3337 | return; |
| 3338 | } |
| 3339 | |
| 3340 | if (structure == olc::DecalStructure::FAN) |
| 3341 | { |
| 3342 | for (size_t tri = 2; tri < vPoints.size(); tri++) |
| 3343 | { |
| 3344 | std::vector<olc::vf2d> vP = { vPoints[0], vPoints[tri - 1], vPoints[tri] }; |
| 3345 | std::vector<olc::vf2d> vT = { vTex[0], vTex[tri - 1], vTex[tri] }; |
| 3346 | std::vector<olc::Pixel> vC = { vColour[0], vColour[tri - 1], vColour[tri] }; |
| 3347 | FillTexturedTriangle(vP, vT, vC, sprTex); |
| 3348 | } |
| 3349 | return; |
| 3350 | } |
| 3351 | } |
| 3352 | |
| 3353 | |
| 3354 | void PixelGameEngine::DrawSprite(const olc::vi2d& pos, Sprite* sprite, uint32_t scale, uint8_t flip) |