コード例 #1
0
ファイル: RoRsmFile.cs プロジェクト: GodLesZ/svn-dump
		protected override bool ReadInternal() {
			MagicHead = Reader.ReadChars(4);
			Version = new GenericFileFormatVersion(Reader);

			AnimationLen = Reader.ReadInt32();
			ShadowType = Reader.ReadInt32();
			if (Version.IsCompatible(1, 4)) {
				Alpha = Reader.ReadByte();
			}

			Reader.BaseStream.Position += 16;

			TextureNameCount = Reader.ReadInt32();
			TextureNames = new string[TextureNameCount];
			for (int i = 0; i < TextureNameCount; i++) {
				TextureNames[i] = Reader.ReadWord(40);
			}

			MainNode = Reader.ReadWord(40);
			int nodeCount = Reader.ReadInt32();
			for (int i = 0; i < nodeCount; i++) {
				ReadMesh();
			}

			if (Meshes.Count == 1) {
				Meshes[0].IsOnly = true;
			}

			return true;
		}
コード例 #2
0
ファイル: RoRsmMesh.cs プロジェクト: GodLesZ/svn-dump
		public RoRsmMesh(BinaryReader bin, GenericFileFormatVersion version)
			: base(bin, version) {
			int count;

			Head = new RoRsmMeshHeader(bin, version);

			count = bin.ReadInt32();
			if ((bin.BaseStream.Length - bin.BaseStream.Position) < (4 * count)) {
				IsValid = false;
				return;
			}
			for (int i = 0; i < count; i++) {
				TextureIndexs.Add(bin.ReadInt32());
			}

			Matrix = new RoRsmMeshTransMatrix(bin, version);

			count = bin.ReadInt32();
			if ((bin.BaseStream.Length - bin.BaseStream.Position) < (9 * count)) {
				IsValid = false;
				return;
			}
			for (int i = 0; i < count; i++) {
				MainVectors.Add(bin.ReadVector3());
			}

			count = bin.ReadInt32();
			for (int i = 0; i < count; i++) {
				TextureVectors.Add(new RoRsmMeshTextureVertex(bin, version));
			}


			count = bin.ReadInt32();
			for (int i = 0; i < count; i++) {
				Surfaces.Add(new RoRsmMeshSurface(bin, version));
			}

			if (version.IsCompatible(1, 5)) {
				count = bin.ReadInt32();
				for (int i = 0; i < count; i++) {
					PositionFrames.Add(new RoRsmMeshPositionFrame(bin, version));
				}
			}

			count = bin.ReadInt32();
			for (int i = 0; i < count; i++) {
				RotationFrames.Add(new RoRsmMeshRotationFrame(bin, version));
			}

			IsValid = true;
		}
コード例 #3
0
ファイル: RoRswDataWater.cs プロジェクト: GodLesZ/svn-dump
		public RoRswDataWater(BinaryReader reader, GenericFileFormatVersion version)
			: base(reader, version) {
			Height = 0;
			Type = 0;
			Amplitude = 1;
			Phase = 2;
			SurfaceCurveLevel = 0.5f;
			TextureCycling = 3;

			if (version.IsCompatible(1, 3)) {
				Height = reader.ReadSingle();

				if (version.IsCompatible(1, 8)) {
					Type = reader.ReadUInt32();
					Amplitude = reader.ReadSingle();
					Phase = reader.ReadSingle();
					SurfaceCurveLevel = reader.ReadSingle();

					if (version.IsCompatible(1, 9)) {
						TextureCycling = reader.ReadInt32();
					}
				}
			}
		}
コード例 #4
0
ファイル: RoRswDataModel.cs プロジェクト: GodLesZ/svn-dump
		public RoRswDataModel(BinaryReader reader, GenericFileFormatVersion version)
			: base(reader, version) {
			name = reader.ReadWord(40);
			if (version.IsCompatible(1, 3)) {
				unk1 = reader.ReadInt32();
				unk2 = reader.ReadSingle();
				unk3 = reader.ReadSingle();
			}
			filename = reader.ReadWord(40);
			reserved = reader.ReadWord(40);
			type = reader.ReadWord(20);
			sound = reader.ReadWord(20);
			todo1 = reader.ReadWord(40);
			pos = reader.ReadVector3();
			rot = reader.ReadVector3();
			scale = reader.ReadVector3();
		}
コード例 #5
0
ファイル: RoRsmMeshSurface.cs プロジェクト: GodLesZ/svn-dump
		public RoRsmMeshSurface(BinaryReader bin, GenericFileFormatVersion version)
			: base(bin, version) {
			SurfaceVector = new ushort[3];
			TextureVector = new ushort[3];
			for (int i = 0; i < SurfaceVector.Length; i++) {
				SurfaceVector[i] = bin.ReadUInt16();
			}
			for (int i = 0; i < TextureVector.Length; i++) {
				TextureVector[i] = bin.ReadUInt16();
			}

			TextureID = bin.ReadUInt16();
			Padding = bin.ReadUInt16();
			TwoSide = bin.ReadUInt32();
			if (version.IsCompatible(1, 2)) {
				SmoothGroup = bin.ReadUInt32();
			} else {
				SmoothGroup = 0;
			}
		}
コード例 #6
0
ファイル: RoRswFile.cs プロジェクト: GodLesZ/svn-dump
		protected override bool ReadInternal() {
			if (base.ReadInternal() == false) {
				return false;
			}

			// skip Magic Header
			Reader.BaseStream.Position += 4; // GRSW

			Version = new GenericFileFormatVersion(Reader);

			mIniFile = Reader.ReadWord(40);
			mGndFile = Reader.ReadWord(40);
			if (Version.IsCompatible(1, 4)) {
				mGatFile = Reader.ReadWord(40);
			}

			mWaterData = new RoRswDataWater(Reader, Version);

			// Unknown Byte Skipping
			if (Version.IsCompatible(1, 4)) {
				int i1 = Reader.ReadInt32(); // angle(?) in degrees
				int i2 = Reader.ReadInt32(); // angle(?) in degrees
				Vector3 v1 = Reader.ReadVector3(); // some sort of Vector3D
				Vector3 v2 = Reader.ReadVector3(); // some sort of Vector3D
			}
			if (Version.IsCompatible(1, 7)) {
				float f1 = Reader.ReadSingle();
			}
			if (Version.IsCompatible(1, 6)) {
				int i1 = Reader.ReadInt32();
				int i2 = Reader.ReadInt32();
				int i3 = Reader.ReadInt32();
				int i4 = Reader.ReadInt32();
			}

			// reading Objects
			uint objCount = Reader.ReadUInt32();
			RoRswDataModel m;
			RoRswDataLight l;
			RoRswDataSound s;
			RoRswDataEffect e;

			//System.Diagnostics.Debug.WriteLine( "reading " + objCount + " Objects from RWS File" );
			for (int i = 0; i < objCount; i++) {
				if (Reader.BaseStream.Position + 4 >= Reader.BaseStream.Length)
					break;

				int objType = Reader.ReadInt32();
				if (objType < 1 || objType > 4) {
					//System.Diagnostics.Debug.WriteLine( "- UNKNOWN Object (" + objType + ") @ " + i );
					continue;
				}

				// 1 = Model
				// 2 = Light
				// 3 = Sound
				// 4 = Effect
				if (objType == 1) {
					try {
						//System.Diagnostics.Debug.WriteLine( "- found Model @ Obj " + i );
						m = new RoRswDataModel(Reader, Version);
						mModelData.Add(m);
					} catch {
						continue;
					}
				} else if (objType == 2) {
					try {
						//System.Diagnostics.Debug.WriteLine( "- found Light @ Obj " + i );
						l = new RoRswDataLight(Reader, Version);
						mLightData.Add(l);
					} catch {
						continue;
					}
				} else if (objType == 3) {
					try {
						//System.Diagnostics.Debug.WriteLine( "- found Sound @ Obj " + i );
						s = new RoRswDataSound(Reader, Version);
						mSoundData.Add(s);
					} catch {
						continue;
					}
				} else if (objType == 4) {
					try {
						//System.Diagnostics.Debug.WriteLine( "- found Effect @ Obj " + i );
						e = new RoRswDataEffect(Reader, Version);
						mEffectData.Add(e);
					} catch {
						continue;
					}
				}

			}


			return true;
		}
コード例 #7
0
		public RoRsmMeshTextureVertex(BinaryReader bin, GenericFileFormatVersion version)
			: base(bin, version) {
			Color = (version.IsCompatible(1, 2) == false ? 0xFFFFFFFF : bin.ReadUInt32());
			U = bin.ReadSingle();
			V = bin.ReadSingle();
		}