Beispiel #1
0
        public static bool IsWmoHit(out WMOHitInformation info, out SlimDX.Vector3 hitPos)
        {
            info = null;
            bool hasHit   = false;
            uint uniqueId = 0;
            uint refId    = 0;

            hitPos = SlimDX.Vector3.Zero;
            SlimDX.Matrix modelMatrix = SlimDX.Matrix.Identity;
            WMOFile       hitFile     = null;
            WMORender     renderer    = null;
            uint          instanceID  = 0;

            lock (lockobj)
            {
                float curNear = 99999;

                foreach (var rndr in mRenders)
                {
                    float          curHit  = 0;
                    uint           curInst = 0;
                    uint           curRef  = 0;
                    SlimDX.Vector3 pos;
                    SlimDX.Matrix  tmpMatrix;
                    uint           tmpId = 0;
                    if (rndr.Value.IsInstanceHit(out curHit, out curInst, out curRef, out pos, out tmpMatrix, out tmpId))
                    {
                        hasHit = true;
                        if (curHit < curNear)
                        {
                            curNear     = curHit;
                            uniqueId    = curInst;
                            refId       = curRef;
                            hitPos      = pos;
                            modelMatrix = tmpMatrix;
                            hitFile     = rndr.Value.File;
                            renderer    = rndr.Value;
                            instanceID  = tmpId;
                        }
                    }
                }
            }

            if (hasHit)
            {
                info             = ADT.ADTManager.GetWmoInformation(uniqueId, refId);
                info.HitPoint    = hitPos;
                info.ModelMatrix = modelMatrix;
                info.Model       = hitFile;
                info.Renderer    = renderer;
                info.InstanceID  = instanceID;
            }

            return(hasHit);
        }
Beispiel #2
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);
 }
Beispiel #3
0
        public static bool IsWmoHit(out WMOHitInformation info, out SlimDX.Vector3 hitPos)
        {
            info = null;
            bool hasHit = false;
            uint uniqueId = 0;
            uint refId = 0;
            hitPos = SlimDX.Vector3.Zero;
            SlimDX.Matrix modelMatrix = SlimDX.Matrix.Identity;
            WMOFile hitFile = null;
            WMORender renderer = null;
            uint instanceID = 0;
            lock (lockobj)
            {
                float curNear = 99999;

                foreach (var rndr in mRenders)
                {
                    float curHit = 0;
                    uint curInst = 0;
                    uint curRef = 0;
                    SlimDX.Vector3 pos;
                    SlimDX.Matrix tmpMatrix;
                    uint tmpId = 0;
                    if (rndr.Value.IsInstanceHit(out curHit, out curInst, out curRef, out pos, out tmpMatrix, out tmpId))
                    {
                        hasHit = true;
                        if (curHit < curNear)
                        {
                            curNear = curHit;
                            uniqueId = curInst;
                            refId = curRef;
                            hitPos = pos;
                            modelMatrix = tmpMatrix;
                            hitFile = rndr.Value.File;
                            renderer = rndr.Value;
                            instanceID = tmpId;
                        }
                    }
                }
            }

            if (hasHit)
            {
                info = ADT.ADTManager.GetWmoInformation(uniqueId, refId);
                info.HitPoint = hitPos;
                info.ModelMatrix = modelMatrix;
                info.Model = hitFile;
                info.Renderer = renderer;
                info.InstanceID = instanceID;
            }

            return hasHit;
        }
Beispiel #4
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);
            }
        }
Beispiel #5
0
 public WMOModelMover(WMOHitInformation wmoHit)
 {
     mResult = wmoHit;
 }
Beispiel #6
0
 public WMOModelMover(WMOHitInformation wmoHit)
 {
     mResult = wmoHit;
 }
Beispiel #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);
        }
Beispiel #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);
        }