/// <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; }