private SurfaceBehaviour ScanForSurfaces(out RaycastHit point)
    {
        SurfaceBehaviour closest = null;
        var closestDistance      = float.MaxValue;

        point = new RaycastHit();

        foreach (var dir in directions)
        {
            var        ray = new Ray(transform.position, dir);
            RaycastHit hit;
            var        result = Physics.Raycast(ray, out hit, m_raycastDistance, 1 << LayerMask.NameToLayer("Surface"));
            if (!result)
            {
                continue;
            }

            var surface = hit.collider.GetComponent <SurfaceBehaviour>();
            if (surface == null)
            {
                continue;
            }

            if (closest == null || hit.distance < closestDistance)
            {
                point           = hit;
                closest         = surface;
                closestDistance = hit.distance;
            }
        }

        return(closest);
    }
Exemple #2
0
        public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour prop,
                                                       SurfaceBehaviour primarySurface)
        {
            var handler = go.AddComponent <DefaultSmartTerrainEventHandler>();

            handler.PropTemplate    = prop.GetComponent <PropBehaviour>();
            handler.SurfaceTemplate = primarySurface.GetComponent <SurfaceBehaviour>();
        }
 //检测到Smart Terrain的表面
 void surfaceFound(GameObject surface)
 {
     //获取被激活表面的相关引用
     SmartSurface       = surface.GetComponent <SurfaceBehaviour>();
     STTrackableHandler = surface.GetComponent <SmartTerrainTrackableEventHandler>();
     //对状态改变进行通知
     if (OnChangeState != null)
     {
         OnChangeState(GameState.SCANNING);
     }
 }
Exemple #4
0
    public void RemoveGizmoSurface(Gizmo gizmo)
    {
        if (!(gizmo is GizmoSurface))
        {
            return;
        }
        GizmoSurface gizmoSurface = (GizmoSurface)gizmo;

        SurfaceBehaviour surfaceBehaviour = (SurfaceBehaviour)gizmoMap[gizmoSurface];

        Destroy(surfaceBehaviour.gameObject);

        gizmoMap.Remove(gizmoSurface);
    }
Exemple #5
0
    public void AddGizmoSurface(Gizmo gizmo)
    {
        if (!(gizmo is GizmoSurface))
        {
            return;
        }
        GizmoSurface gizmoSurface = (GizmoSurface)gizmo;

        GameObject gizmoObject = new GameObject("surface");

        gizmoObject.transform.SetParent(gizmoWrapper.transform);

        SurfaceBehaviour surfaceBehaviour = gizmoObject.AddComponent <SurfaceBehaviour>();

        surfaceBehaviour.Init(geoCamera);

        FaceRefer face = gizmoSurface.face;

        if (face.ids.Length < 3)
        {
            return;
        }
        Vector3 center     = geometry.Center();
        Vector3 v1         = geometry.UnitVector(face.ids[0]);
        Vector3 v2         = geometry.UnitVector(face.ids[1]);
        Vector3 v3         = geometry.UnitVector(face.ids[2]);
        float   radius     = v3.z - v2.z;
        int     pointCount = 4;

        Vector3[] vectors     = new Vector3[pointCount];
        float     angledegree = 360.0f;
        float     angleRad    = Mathf.Deg2Rad * angledegree;
        float     angleCur    = angleRad;
        float     angledelta  = angleRad / pointCount;

        for (int i = 0; i < pointCount; i++)
        {
            float cosA = Mathf.Cos(angleCur);
            float sinA = Mathf.Sin(angleCur);
            vectors[i] = new Vector3(radius * cosA, v2.y, radius * sinA);
            angleCur  -= angledelta;
        }

        string area = geometry.SurfaceArea(face.ids);

        surfaceBehaviour.SetData(center, vectors, area);

        gizmoMap.Add(gizmoSurface, surfaceBehaviour);
    }
    private void FixedUpdate()
    {
        m_surface = ScanForSurfaces(out m_contactPoint);

        if (m_surface)
        {
            m_surface.HandleContact(m_contactPoint.normal, m_rigidbody);
        }
        else
        {
            Physics.gravity = Vector3.down * Physics.gravity.magnitude;
        }

        m_rigidbody.velocity = m_rigidbody.velocity.normalized *
                               Mathf.Max(Mathf.Min(m_rigidbody.velocity.magnitude, m_maxVelocity), m_minVelocity);
    }
Exemple #7
0
    void Start()
    {
        // Assign all references
        mReconstructionBehaviour  = FindObjectOfType <ReconstructionBehaviour>();
        mCylinderTrackableHandler = FindObjectOfType <CylinderTrackableEventHandler>();
        mSTEventHandler           = GameObject.FindObjectOfType <SmartTerrainEventHandler>();
        mSmartSurface             = GameObject.FindObjectOfType <SurfaceBehaviour>();
        mSTTrackableHandler       = GameObject.FindObjectOfType <SmartTerrainTrackableEventHandler>();

        // Register to events
        mCylinderTrackableHandler.CylinderTrackableFoundFirstTime += OnCylinderTrackableFoundFirstTime;

        // Load header textures for user instructions
        mPointDeviceTexture = Resources.Load <Texture2D>("UserInterface/header_pointdevice");
        mPullBackTexture    = Resources.Load <Texture2D>("UserInterface/header_pullbackslowly");
        mTapIceTexture      = Resources.Load <Texture2D>("UserInterface/header_tapice");
    }
 public void StartTerrainGeneration()
 {
     mSurfaceBehavour = FindObjectOfType <SurfaceBehaviour>();
     mSurfaceBehavour.GetComponent <CustomSmartTerrainTrackableEventHandler>().StartRender();
 }
 public void AddDefaultSmartTerrainEventHandler(GameObject go, PropBehaviour propBehaviour, SurfaceBehaviour surfaceBehaviour)
 {
     throw new System.NotImplementedException();
 }
Exemple #10
0
    void Start()
    {
        mPopUpMsg = GetComponent<SampleInitErrorHandler>();
        if (!mPopUpMsg)
        {
            mPopUpMsg = gameObject.AddComponent<SampleInitErrorHandler>();

        }

        mPopUpMsg.InitPopUp();
        // register callback methods
        QCARAbstractBehaviour qcarBehaviour = (QCARAbstractBehaviour)FindObjectOfType(typeof(QCARAbstractBehaviour));
        if (qcarBehaviour)
        {
            qcarBehaviour.RegisterQCARStartedCallback(OnQCARStarted);
            qcarBehaviour.RegisterQCARInitErrorCallback(OnQCARInitializationError);
        }

        //Assign all references
        m_reconstructionBehaviour = FindObjectOfType(typeof(ReconstructionBehaviour)) as ReconstructionBehaviour;
        m_uiInput = new GUIInputManager();
        m_cylinderTrackableHandler = FindObjectOfType(typeof(CylinderTrackableEventHandler)) as CylinderTrackableEventHandler;
        m_smartTerrainEventHandler = GameObject.FindObjectOfType(typeof(SmartTerrainEventHandler)) as SmartTerrainEventHandler;
        m_smartSurface = GameObject.FindObjectOfType(typeof(SurfaceBehaviour)) as SurfaceBehaviour;
        m_smartTerrainTrackableHandler = GameObject.FindObjectOfType(typeof(SmartTerrainTrackableEventHandler)) as SmartTerrainTrackableEventHandler;
        //Register to events
        m_cylinderTrackableHandler.CylinderTrackableFoundFirstTime += OnCylinderTrackableFoundFirstTime;
        m_uiInput.TappedOnDoneButton += OnTappedOnDone;
        m_uiInput.TappedOnResetButton += OnTappedOnReset;
    }