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); }
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); }
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; }
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); } }
public WMOModelMover(WMOHitInformation wmoHit) { mResult = wmoHit; }
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); }
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); }