Raycast collision bridge (py_map.cpp)#23
Merged
Conversation
RAW native bridge to the engine world-intersect primitives + live prop-memory walk, backing Py4GWCoreLib Map.Raycast. All derived math (normalize, segment length, blocked decision, hit reconstruction, prop-mesh v*M) stays in Python; C++ returns raw engine numbers verbatim. Binds MapCliQueryIntersection (RayCast), ITerrain::QueryIntersection (RayCastTerrain, returns a parametric hit fraction), and IProps::IntersectGeometry via the per-geoset CIGrModel::IntersectCone (RayCastInteractive), plus prop enumeration (GetProps) and raw collision-mesh extraction (GetPropGeometry). Includes the n_scanned == -1 "probe could not run" sentinel and a unit-vector precondition guard against the engine's "Invalid unit vector" abort.
Closed
apoguita
approved these changes
Jul 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the native
PyMapcollision-raycast bridge (src/py_map.cpp) that backs thePython
Map.RaycastAPI. It is a faithful RAW bridge to the engine'sworld-intersect primitives plus the live prop-memory walk — it does NO derived math
(normalize, segment length, the blocked decision, hit-point reconstruction and the
prop-mesh
v*Mtransform all live on the Python side).Engine functions bound (resolved by byte-pattern / assertion-string scanners)
RayCast→MapCliQueryIntersection— terrain + walkable-prop; returns a hit point.RayCastTerrain→ITerrain::QueryIntersection— terrain only; returns a parametric fraction [0,1].RayCastInteractive→IProps::IntersectGeometryover each interactive prop, via theper-geoset
CIGrModel::IntersectCone; returns the threaded nearest distance + winning prop.Includes an
n_scanned == -1"probe could not run" sentinel and a unit-vector preconditionguard against the engine's "Invalid unit vector" abort.
GetProps/GetPropGeometry— prop enumeration + raw collision-mesh extraction (Python doesv*M).Notes
src/py_map.cpp(CMake globssrc/*.cpp, no build-config change).