====== Custom Component: Computing Ground or Water Elevation ====== The following LUA code computes and returns the global Y elevation of water from a global position: function MY_CUSTOM_COMPONENT:computeWaterElevation(_globalPosition) local raycastResult = {} -- Raycast from the _globalPosition + 1000 -- to _globalPosition - 1000 -- only on objects with a WATER flag local FromPosition = { _globalPosition[1], _globalPosition[2]+1000, _globalPosition[3] } local ToPosition = { _globalPosition[1], _globalPosition[2]-1000, _globalPosition[3] } if not self:getLevel():rayCast(FromPosition, ToPosition, raycastResult, 2 ^ OBJECT_FLAG.WATER:toNumber()) then MyMod:logWarning("MY_CUSTOM_COMPONENT: Water not found on the vertical of " .. tostring(_globalPosition)) return _globalPosition[2] else return raycastResult["Position"][2] end end You can do the same with the ground by replacing OBJECT_FLAG.WATER by OBJECT_FLAG.GROUND If water (or ground) is not found (for instance when the ''_globalPosition'' is outside the map) then a warning is entered in the logs, and the code returns the Y of the ''_globalPosition''. This can be used, for instance, when moving an object on the ground or water whatever the slope. Note: Water doesn't have the same elevation at all points on a vanilla map!