public static NGSSHAD ReadNGSSHAD(BufferedStreamReader streamReader, int offset) { NGSSHAD shad = new NGSSHAD(); shad.unk0 = streamReader.Read <int>(); shad.pixelShader = streamReader.Read <PSO2String>(); shad.vertexShader = streamReader.Read <PSO2String>(); shad.shadDetailOffset = streamReader.Read <int>(); shad.shadExtraOffset = streamReader.Read <int>(); long bookmark = streamReader.Position(); //Some shaders, like some player ones apparently, do not use the extra structs... if (shad.shadDetailOffset > 0) { streamReader.Seek(shad.shadDetailOffset + offset, System.IO.SeekOrigin.Begin); shad.shadDetail = streamReader.Read <SHADDetail>(); streamReader.Seek(shad.shadExtraOffset + offset, System.IO.SeekOrigin.Begin); for (int i = 0; i < shad.shadDetail.shadExtraCount; i++) { shad.shadExtra.Add(streamReader.Read <SHADExtraEntry>()); } } else if (shad.shadExtraOffset > 0) { Console.WriteLine("**Apparently shadExtraOffset is allowed to be used without shadDetailOffset???**"); } streamReader.Seek(bookmark, System.IO.SeekOrigin.Begin); return(shad); }
public override SHAD Clone() { NGSSHAD newShad = new NGSSHAD(); newShad.unk0 = unk0; newShad.pixelShader = PSO2String.GeneratePSO2String(pixelShader.GetBytes()); newShad.vertexShader = PSO2String.GeneratePSO2String(vertexShader.GetBytes()); newShad.shadDetailOffset = shadDetailOffset; newShad.shadExtraOffset = shadExtraOffset; newShad.shadDetail = shadDetail; newShad.shadExtra = new List <SHADExtraEntry>(shadExtra); return(newShad); }