Example #1
0
        public void HitModels(SlimDX.Ray camRay, out MdxIntersectionResult result)
        {
            result          = new MdxIntersectionResult();
            result.Distance = -1;
            renderLock.WaitOne();

            foreach (var couple in BatchRenderers)
            {
                float          curDist = 0.0f;
                uint           instanceId;
                SlimDX.Vector3 hitPoint;
                if (couple.Value.Intersector.Intersect(camRay, out curDist, out instanceId, out hitPoint))
                {
                    if (curDist < result.Distance || result.Distance < 0)
                    {
                        result.InstanceID   = instanceId;
                        result.Distance     = curDist;
                        result.Model        = couple.Value.mModelInfo;
                        result.Renderer     = couple.Value;
                        result.InstanceData = result.Renderer.InstanceLoader.GetInstanceById(instanceId);
                        result.HitPoint     = hitPoint;
                        result.HasHit       = true;
                    }
                }
            }
            renderLock.ReleaseMutex();
        }
Example #2
0
        public void HitModels(SlimDX.Ray camRay, out MdxIntersectionResult result)
        {
            result = new MdxIntersectionResult();
            result.Distance = -1;
            renderLock.WaitOne();

            foreach (var couple in BatchRenderers)
            {
                float curDist = 0.0f;
                uint instanceId;
                SlimDX.Vector3 hitPoint;
                if (couple.Value.Intersector.Intersect(camRay, out curDist, out instanceId, out hitPoint))
                {
                    if (curDist < result.Distance || result.Distance < 0)
                    {
                        result.InstanceID = instanceId;
                        result.Distance = curDist;
                        result.Model = couple.Value.mModelInfo;
                        result.Renderer = couple.Value;
                        result.InstanceData = result.Renderer.InstanceLoader.GetInstanceById(instanceId);
                        result.HitPoint = hitPoint;
                        result.HasHit = true;
                    }
                }
            }
            renderLock.ReleaseMutex();
        }
Example #3
0
 public void ClearSelection()
 {
     mMdxResult = null;
     mWmoResult = null;
     mSelectionBox.ClearSelectionBox();
     mModelMover = null;
     Game.GameManager.GraphicsThread.RemoveOverlay<UI.Overlays.ModelInfoOverlay>();
     mCurrentSelection = null;
     if (ModelSelected != null)
         ModelSelected(null);
 }
Example #4
0
        public void SelectMdxModel(MDX.MdxIntersectionResult result)
        {
            mMdxResult = result;
            mWmoResult = null;
            mSelectionBox.UpdateSelectionBox(result.Model.BoundingBox, result.InstanceData.ModelMatrix);
            if (mModelMover != null)
            {
                mModelMover.ModelChanged -= mSelectionBox.UpdateMatrix;
            }
            mModelMover = new MDX.M2ModelMover(result);
            mModelMover.ModelChanged += (matrix) =>
            {
                mSelectionBox.UpdateMatrix(matrix);
                if (mCurrentSelection != null)
                {
                    mCurrentSelection.ModelPosition = new SlimDX.Vector3(matrix.M41, matrix.M42, matrix.M43);
                }
            };
            var modelOverlay = Game.GameManager.GraphicsThread.GetOverlay <UI.Overlays.ModelInfoOverlay>();

            if (modelOverlay != null)
            {
                modelOverlay.UpdateModel(result);
            }
            else
            {
                modelOverlay = new UI.Overlays.ModelInfoOverlay(result);
                Game.GameManager.GraphicsThread.PushOverlay(modelOverlay);
            }

            ModelSelectionInfo info = new ModelSelectionInfo()
            {
                ModelName     = result.Model.ModelPath,
                ModelMover    = mModelMover,
                ModelPosition = new SlimDX.Vector3(result.InstanceData.ModelMatrix.M41, result.InstanceData.ModelMatrix.M42, result.InstanceData.ModelMatrix.M43)
            };

            mCurrentSelection = info;

            if (ModelSelected != null)
            {
                ModelSelected(info);
            }
        }
Example #5
0
 public M2ModelMover(MdxIntersectionResult result)
 {
     mResult = result;
 }
Example #6
0
 public M2ModelMover(MdxIntersectionResult result)
 {
     mResult = result;
 }
Example #7
0
        public void SelectMdxModel(MDX.MdxIntersectionResult result)
        {
            mMdxResult = result;
            mWmoResult = null;
            mSelectionBox.UpdateSelectionBox(result.Model.BoundingBox, result.InstanceData.ModelMatrix);
            if (mModelMover != null)
                mModelMover.ModelChanged -= mSelectionBox.UpdateMatrix;
            mModelMover = new MDX.M2ModelMover(result);
            mModelMover.ModelChanged += (matrix) =>
                {
                    mSelectionBox.UpdateMatrix(matrix);
                    if (mCurrentSelection != null)
                        mCurrentSelection.ModelPosition = new SlimDX.Vector3(matrix.M41, matrix.M42, matrix.M43);
                };
            var modelOverlay = Game.GameManager.GraphicsThread.GetOverlay<UI.Overlays.ModelInfoOverlay>();
            if (modelOverlay != null)
                modelOverlay.UpdateModel(result);
            else
            {
                modelOverlay = new UI.Overlays.ModelInfoOverlay(result);
                Game.GameManager.GraphicsThread.PushOverlay(modelOverlay);
            }

            ModelSelectionInfo info = new ModelSelectionInfo()
            {
                ModelName = result.Model.ModelPath,
                ModelMover = mModelMover,
                ModelPosition = new SlimDX.Vector3(result.InstanceData.ModelMatrix.M41, result.InstanceData.ModelMatrix.M42, result.InstanceData.ModelMatrix.M43)
            };

            mCurrentSelection = info;

            if (ModelSelected != null)
                ModelSelected(info);
        }
Example #8
0
        public void SelectWMOModel(WMO.WMOHitInformation wmoHit)
        {
            mMdxResult = null;
            mWmoResult = wmoHit;
            mSelectionBox.UpdateSelectionBox(wmoHit.Model.BoundingBox, wmoHit.ModelMatrix);
            if (mModelMover != null)
                mModelMover.ModelChanged -= mSelectionBox.UpdateMatrix;

            mModelMover = new WMO.WMOModelMover(wmoHit);
            mModelMover.ModelChanged += (matrix) =>
            {
                mSelectionBox.UpdateMatrix(matrix);
                if (mCurrentSelection != null)
                    mCurrentSelection.ModelPosition = new SlimDX.Vector3(matrix.M41, matrix.M42, matrix.M43);
            };

            var modelOverlay = Game.GameManager.GraphicsThread.GetOverlay<UI.Overlays.ModelInfoOverlay>();
            if (modelOverlay != null)
                modelOverlay.UpdateModel(wmoHit);
            else
            {
                modelOverlay = new UI.Overlays.ModelInfoOverlay(wmoHit);
                Game.GameManager.GraphicsThread.PushOverlay(modelOverlay);
            }

            ModelSelectionInfo info = new ModelSelectionInfo()
            {
                ModelName = wmoHit.Model.FileName,
                ModelMover = mModelMover,
                ModelPosition = new SlimDX.Vector3(wmoHit.ModelMatrix.M41, wmoHit.ModelMatrix.M42, wmoHit.ModelMatrix.M43)
            };

            mCurrentSelection = info;

            if (ModelSelected != null)
                ModelSelected(info);
        }