//  One-time call
        public static Vector3 GetRandom(Vector3 originalVector, float maxAngle)
        {
            if (maxAngle == 0)
                return originalVector;

            MyUtilRandomVector3ByDeviatingVector rnd = new MyUtilRandomVector3ByDeviatingVector(originalVector);
            return rnd.GetNext(maxAngle);
        }
예제 #2
0
        public static Vector3 GetRandom(Vector3 originalVector, float maxAngle)
        {
            if (maxAngle == 0f)
            {
                return(originalVector);
            }
            MyUtilRandomVector3ByDeviatingVector vector = new MyUtilRandomVector3ByDeviatingVector(originalVector);

            return(vector.GetNext(maxAngle));
        }
        public static Vector3 GetRandom(int hash, Vector3 originalVector, float maxAngle)
        {
            if (maxAngle == 0)
            {
                return(originalVector);
            }

            MyUtilRandomVector3ByDeviatingVector rnd = new MyUtilRandomVector3ByDeviatingVector(originalVector);

            return(rnd.GetNext(hash, maxAngle));
        }
        //  Create smoke and debris particle at the place of voxel/model hit
        static void CreateBasicHitParticles(ref Vector3D hitPoint, ref Vector3 normal, ref Vector3D direction, IMyEntity physObject, MyEntity weapon, float scale, MyEntity ownerEntity = null)
        {
            Vector3D reflectedDirection = Vector3D.Reflect(direction, normal);
            MyUtilRandomVector3ByDeviatingVector randomVector = new MyUtilRandomVector3ByDeviatingVector(reflectedDirection);

            if (MySector.MainCamera.GetDistanceWithFOV(hitPoint) < 200)
            {
                MyParticleEffect effect;
                if (MyParticlesManager.TryCreateParticleEffect((int)MyParticleEffectsIDEnum.Hit_BasicAmmo, out effect))
                {
                    MatrixD dirMatrix = MatrixD.CreateFromDir(reflectedDirection);
                    effect.WorldMatrix = MatrixD.CreateWorld(hitPoint, dirMatrix.Forward, dirMatrix.Up);
                    effect.UserScale = scale;
                }
            }
        }
        //  Create smoke and debris particle at the place of voxel/model hit
        static void CreateBasicHitAutocannonParticles(ref Vector3D hitPoint, ref Vector3 normal, ref Vector3D direction, IMyEntity physObject, MyEntity weapon, float scale, MyEntity ownerEntity = null)
        {
            MyParticleEffect effect = GetEffectForWeapon(weapon, (int)MyParticleEffectsIDEnum.Hit_AutocannonBasicAmmo);

            Vector3 reflectedDirection = Vector3.Reflect(direction, normal);
            MyUtilRandomVector3ByDeviatingVector randomVector = new MyUtilRandomVector3ByDeviatingVector(reflectedDirection);
            MatrixD dirMatrix = MatrixD.CreateFromDir(reflectedDirection);
            effect.WorldMatrix = MatrixD.CreateWorld(hitPoint, dirMatrix.Forward, dirMatrix.Up);
            effect.UserScale = scale;
        }
        public static void CreateBasicHitParticles(string effectName, ref Vector3D hitPoint, ref Vector3 normal, ref Vector3D direction, IMyEntity physObject, MyEntity weapon, float scale, MyEntity ownerEntity = null)
        {
            Vector3D reflectedDirection = Vector3D.Reflect(direction, normal);
            MyUtilRandomVector3ByDeviatingVector randomVector = new MyUtilRandomVector3ByDeviatingVector(reflectedDirection);

            MyParticleEffect effect;
            if (MyParticlesManager.TryCreateParticleEffect(effectName, out effect))
            {
                MatrixD dirMatrix = MatrixD.CreateFromDir(normal);
                effect.WorldMatrix = MatrixD.CreateWorld(hitPoint, dirMatrix.Forward, dirMatrix.Up);

                //VRageRender.MyRenderProxy.DebugDrawSphere(hitPoint, 0.1f, Color.Wheat, 1, false);
                // VRageRender.MyRenderProxy.DebugDrawAxis(effect.WorldMatrix, 5, false);

                effect.UserScale = scale;
            }
        }