/// <summary> /// gets the range information using the omen data /// </summary> /// <param name="obj"></param> /// <returns></returns> public float Range(BattleCharacter spellCaster, out Vector3 center, Matrix44?forcedMatrix = null, float?forcedRange = null) { center = Vector3.Zero; try { var m4X4 = forcedMatrix ?? spellCaster.OmenMatrix; center = m4X4.Center(); m4X4.Transform(One, out var edge); return(forcedRange ?? center.Distance2D(edge)); } catch (Exception ex) { Logger.Warn(ex.ToString()); return(spellCaster.SpellCastInfo.SpellData.EffectRange + spellCaster.CombatReach); } }
public static void Transform(this Matrix44 matrix, Vector3 from, out Vector3 transformed) { transformed = new Vector3(); transformed.X = from.X * matrix.M00 + from.Y * matrix.M10 + from.Z * matrix.M20 + matrix.M30; transformed.Y = from.X * matrix.M01 + from.Y * matrix.M11 + from.Z * matrix.M21 + matrix.M31; transformed.Z = from.X * matrix.M02 + from.Y * matrix.M12 + from.Z * matrix.M22 + matrix.M32; }