MCPcopy Create free account
hub / github.com/OneLoneCoder/olcPixelGameEngine / DrawPartialDecal

Method DrawPartialDecal

olcPixelGameEngine.h:3489–3520  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3487 }
3488
3489 void PixelGameEngine::DrawPartialDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale, const olc::Pixel& tint)
3490 {
3491 olc::vf2d vScreenSpacePos =
3492 {
3493 (pos.x * vInvScreenSize.x) * 2.0f - 1.0f,
3494 -((pos.y * vInvScreenSize.y) * 2.0f - 1.0f)
3495 };
3496
3497
3498 olc::vf2d vScreenSpaceDim =
3499 {
3500 ((pos.x + source_size.x * scale.x) * vInvScreenSize.x) * 2.0f - 1.0f,
3501 -(((pos.y + source_size.y * scale.y) * vInvScreenSize.y) * 2.0f - 1.0f)
3502 };
3503
3504 olc::vf2d vWindow = olc::vf2d(vViewSize);
3505 olc::vf2d vQuantisedPos = ((vScreenSpacePos * vWindow) + olc::vf2d(0.5f, 0.5f)).floor() / vWindow;
3506 olc::vf2d vQuantisedDim = ((vScreenSpaceDim * vWindow) + olc::vf2d(0.5f, -0.5f)).ceil() / vWindow;
3507
3508 DecalInstance di;
3509 di.points = 4;
3510 di.decal = decal;
3511 di.tint = { tint, tint, tint, tint };
3512 di.pos = { { vQuantisedPos.x, vQuantisedPos.y }, { vQuantisedPos.x, vQuantisedDim.y }, { vQuantisedDim.x, vQuantisedDim.y }, { vQuantisedDim.x, vQuantisedPos.y } };
3513 olc::vf2d uvtl = (source_pos + olc::vf2d(0.0001f, 0.0001f)) * decal->vUVScale;
3514 olc::vf2d uvbr = (source_pos + source_size - olc::vf2d(0.0001f, 0.0001f)) * decal->vUVScale;
3515 di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } };
3516 di.w = { 1,1,1,1 };
3517 di.mode = nDecalMode;
3518 di.structure = nDecalStructure;
3519 vLayers[nTargetLayer].vecDecalInstance.push_back(di);
3520 }
3521
3522 void PixelGameEngine::DrawPartialDecal(const olc::vf2d& pos, const olc::vf2d& size, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint)
3523 {

Callers

nothing calls this directly

Calls 3

push_backMethod · 0.80
floorMethod · 0.45
ceilMethod · 0.45

Tested by

no test coverage detected