Ejemplo n.º 1
0
        /// <summary>
        /// Calculates the vector cross product
        /// </summary>
        /// <param name="c"></param>
        /// <param name="thizArg"></param>
        /// <param name="x"></param>
        /// <returns>
        /// The cross product of two 3D vectors.
        /// </returns>
        public JsValue VecCross(CpuBlock c, JsValue thizArg, JsValue[] x)
        {
            if (x.Length < 1)
            {
                throw new Exception("Invalid value");
            }

            var     v1obj = ((ObjectInstance)thizArg);
            var     v2obj = ((ObjectInstance)x[0]);
            Vector3 v1    = BlockUtils.ToVector3(v1obj);
            Vector3 v2    = BlockUtils.ToVector3(v2obj);

            return(BlockUtils.Vec2Obj(c, Vector3.Cross(v1, v2)));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Multiply vector3 by scalar
        /// </summary>
        /// <param name="c"></param>
        /// <param name="thizArg"></param>
        /// <param name="x"></param>
        /// <returns>
        /// The result of a vector3 multiplied by scalar.
        /// </returns>
        public JsValue VecMul(CpuBlock c, JsValue thizArg, JsValue[] x)
        {
            if (x.Length < 1)
            {
                throw new Exception("Invalid value");
            }

            var   vobj = ((ObjectInstance)thizArg);
            float f;

            if (!BlockUtils.TryGetFloat(x[0], out f))
            {
                throw new Exception("Invalid value");
            }
            Vector3 v = BlockUtils.ToVector3(vobj);

            return(BlockUtils.Vec2Obj(c, v * f));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Multiply quaternion with either another quaternion or a 3d vector.
        /// </summary>
        /// <returns>
        /// Vector if second argument is vector and quaternion if second argument is quaternion
        /// </returns>
        public JsValue QuatMult(CpuBlock c, JsValue thizArg, JsValue[] x)
        {
            if (x.Length < 1)
            {
                throw new Exception("Invalid value");
            }

            var q1obj = ((ObjectInstance)thizArg);
            var q2obj = ((ObjectInstance)x[0]);
            var q1    = BlockUtils.ToQuat(q1obj);

            if (q2obj.HasProperty("w"))
            {
                var q2 = BlockUtils.ToQuat(q2obj);
                return(BlockUtils.Quat2Obj(c, q1 * q2));
            }
            else
            {
                var v = BlockUtils.ToVector3(q2obj);
                return(BlockUtils.Vec2Obj(c, q1 * v));
            }
        }