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

Method CastRayDDA

extensions/olcPGEX_RayCastWorld.h:608–763  ·  view source on GitHub ↗

Will be explained in upcoming video...

Source from the content-addressed store, hash-verified

606
607// Will be explained in upcoming video...
608bool olc::rcw::Engine::CastRayDDA(const olc::vf2d& vOrigin, const olc::vf2d& vDirection, sTileHit& hit)
609{
610 olc::vf2d vRayDelta = { sqrt(1 + (vDirection.y / vDirection.x) * (vDirection.y / vDirection.x)), sqrt(1 + (vDirection.x / vDirection.y) * (vDirection.x / vDirection.y)) };
611
612 olc::vi2d vMapCheck = vOrigin;
613 olc::vf2d vSideDistance;
614 olc::vi2d vStepDistance;
615
616 if (vDirection.x < 0)
617 {
618 vStepDistance.x = -1;
619 vSideDistance.x = (vOrigin.x - (float)vMapCheck.x) * vRayDelta.x;
620 }
621 else
622 {
623 vStepDistance.x = 1;
624 vSideDistance.x = ((float)vMapCheck.x + 1.0f - vOrigin.x) * vRayDelta.x;
625 }
626
627 if (vDirection.y < 0)
628 {
629 vStepDistance.y = -1;
630 vSideDistance.y = (vOrigin.y - (float)vMapCheck.y) * vRayDelta.y;
631 }
632 else
633 {
634 vStepDistance.y = 1;
635 vSideDistance.y = ((float)vMapCheck.y + 1.0f - vOrigin.y) * vRayDelta.y;
636 }
637
638 olc::vf2d vIntersection;
639 olc::vi2d vHitTile;
640 float fMaxDistance = 100.0f;
641 float fDistance = 0.0f;
642 bool bTileFound = false;
643 while (!bTileFound && fDistance < fMaxDistance)
644 {
645 if (vSideDistance.x < vSideDistance.y)
646 {
647 vSideDistance.x += vRayDelta.x;
648 vMapCheck.x += vStepDistance.x;
649 }
650 else
651 {
652 vSideDistance.y += vRayDelta.y;
653 vMapCheck.y += vStepDistance.y;
654 }
655
656 olc::vf2d rayDist = { (float)vMapCheck.x - vOrigin.x, (float)vMapCheck.y - vOrigin.y };
657 fDistance = rayDist.mag();
658
659
660 if (IsLocationSolid(float(vMapCheck.x), float(vMapCheck.y)))
661 {
662 vHitTile = vMapCheck;
663 bTileFound = true;
664
665 hit.vTilePos = vMapCheck;

Callers

nothing calls this directly

Calls 1

magMethod · 0.45

Tested by

no test coverage detected