Ejemplo n.º 1
0
    public bool TryPlaceOnPlatform(out Vector3 position, float minHeight, float maxHeight, float minWidth)
    {
        position = Vector3.zero;
        IntPtr resultsTopologyPtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(m_topologyResults);
        int    numResults         = SpatialUnderstandingDllTopology.QueryTopology_FindLargePositionsSittable(minHeight, maxHeight, 1, minWidth, m_topologyResults.Length, resultsTopologyPtr);

        if (numResults == 0)
        {
            return(false);
        }

        // Pick randomly by shuffling indices
        int[] placementIdxs = new int[numResults];
        for (int i = 0; i < placementIdxs.Length; i++)
        {
            placementIdxs[i] = i;
        }
        Shuffle(placementIdxs);

        // We have to keep track of our own placements
        foreach (int idx in placementIdxs)
        {
            SpatialUnderstandingDllTopology.TopologyResult result = m_topologyResults[idx];
            if (!Overlaps(result, minWidth))
            {
                position = result.position;
                Vector3 size = new Vector3(minWidth, 0, minWidth); // we ignore height for now
                m_platformPlacements.Add(new Tuple <Vector3, Vector3>(position, size));
                return(true);
            }
        }
        return(false);
    }
Ejemplo n.º 2
0
        public void Query_Topology_FindLargePositionsSittable()
        {
            // Setup
            float minHeight          = 0.125f;
            float maxHeight          = 2.0f;
            float minFacingClearance = 1.0f;
            float minWidth           = .5f;

            // Only if we're enabled
            if (!SpatialUnderstanding.Instance.AllowSpatialUnderstanding)
            {
                return;
            }

            // Query
            IntPtr resultsTopologyPtr = SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(resultsTopology);
            int    locationCount      = SpatialUnderstandingDllTopology.QueryTopology_FindLargePositionsSittable(
                minHeight, maxHeight, minFacingClearance, minWidth,
                resultsTopology.Length, resultsTopologyPtr);

            // Output
            HandleResults_Topology("Find Large Sittable Positions", locationCount, new Vector3(minWidth, 0.025f, minWidth), Color.cyan);
        }