Exemplo n.º 1
0
        /// <summary>
        /// Processes a line that describes a tcMod operation.
        /// </summary>
        private static Q3BSPMaterialStageTcMod ParseTcMod(string line, ref Q3BSPMaterialStageContent currentStage)
        {
            Q3BSPTcModFunction function = Q3BSPTcModFunction.Invalid;

            float[] data = new float[] { };
            #region Scale
            if (line.Length > 4 && line.Substring(0, 5) == "scale")
            {
                string[] split = line.Split(' ');
                data     = new float[] { 1.0f / float.Parse(split[1]), 1.0f / float.Parse(split[2]) };
                function = Q3BSPTcModFunction.Scale;

                // skies seem to work backwards for some reason.
                if (currentStage.Parent != null && currentStage.Parent.IsSky)
                {
                    data[0] = float.Parse(split[1]);
                    data[1] = float.Parse(split[2]);
                }
            }
            #endregion

            #region Scroll
            else if (line.Length > 5 && line.Substring(0, 6) == "scroll")
            {
                string[] split = line.Split(' ');

                data     = new float[] { float.Parse(split[1]), float.Parse(split[2]) };
                function = Q3BSPTcModFunction.Scroll;
            }
            #endregion

            #region Rotate
            else if (line.Length > 5 && line.Substring(0, 6) == "rotate")
            {
                string[] split = line.Split(' ');

                data     = new float[] { MathHelper.ToRadians(float.Parse(split[1])) };
                function = Q3BSPTcModFunction.Rotate;
            }
            #endregion

            #region Turbulence
            else if (line.Length > 4 && line.Substring(0, 4) == "turb")
            {
                string[] split = line.Split(' ');

                data     = new float[] { float.Parse(split[2]), float.Parse(split[3]), float.Parse(split[4]) };
                function = Q3BSPTcModFunction.Turbulence;
            }
            #endregion

            return(new Q3BSPMaterialStageTcMod(function, data));
        }
 public Q3BSPMaterialStageTcMod(Q3BSPTcModFunction function, float[] data)
 {
     this.Function = function;
     this.Data     = data;
 }