public CAMS(BinaryReader br) { Size = br.ReadUInt32(); Name = br.ReadString(80).TrimEnd('\0'); Pivot = br.ReadStruct <C3Vector>(); FieldOfView = br.ReadSingle(); FarClip = br.ReadSingle(); NearClip = br.ReadSingle(); TargetPivot = br.ReadStruct <C3Vector>(); while (true) { string token = br.ReadString(4); br.BaseStream.Position -= 4; switch (token) { case "KCTR": TranslationKeys = new MDXTrack <C3Vector>(br); break; case "KCRL": RotationKeys = new MDXTrack <float>(br); break; case "KTTR": TargetTranslationKeys = new MDXTrack <C3Vector>(br); break; case "KVIS": VisibilityKeys = new MDXTrack <float>(br); break; default: return; } } }
public override void Read(BinaryReader stream) { Id = stream.ReadUInt32(); Bone = stream.ReadUInt32(); Position = stream.Read <C3Vector>(); AnimateAttached.Read(stream); }
public void Load(BinaryReader stream, M2.Format version) { Id = stream.ReadUInt32(); Bone = stream.ReadUInt32(); Position = stream.ReadC3Vector(); AnimateAttached.Load(stream, version); }
public C33Matrix(C3Vector col0, C3Vector col1, C3Vector col2) { //Columns = new C3Vector[3]; Columns[0] = col0; Columns[1] = col1; Columns[2] = col2; }
public override void Read(BinaryReader stream) { Id = stream.ReadUInt32(); Data = stream.ReadUInt32(); Bone = stream.ReadUInt32(); Position = stream.Read <C3Vector>(); Enabled.Read(stream); }
public MFOG(BinaryReader br) { Flags = br.ReadEnum <MFOG_Flags>(); Position = br.ReadStruct <C3Vector>(); Start = br.ReadSingle(); End = br.ReadSingle(); Fogs = br.ReadStructArray <Fog>(2); }
public M2Event(BinaryReader br, uint build) { EventName = br.ReadString(4); Data = br.ReadUInt32(); BoneIndex = br.ReadUInt32(); Position = br.ReadStruct <C3Vector>(); EventTrack = new M2Track <bool>(br, build, true); }
public M2Attachment(BinaryReader br, uint build) { AttachmentId = br.ReadEnum <GeoComponentLink>(); BoneIndex = br.ReadUInt16(); Unknown_0x6 = br.ReadUInt16(); Position = br.ReadStruct <C3Vector>(); AnimTrack = new M2Track <bool>(br, build); }
public override void Read(BinaryReader stream) { Position = stream.Read <C3Vector>(); Weights = stream.ReadBytes(Weights.Length); Indices = stream.ReadBytes(Indices.Length); Normal = stream.Read <C3Vector>(); TextureCoordinates = stream.Read <C2Vector>(TextureCoordinates.Length); }
public MDDF(BinaryReader br) { NameId = br.ReadUInt32(); UniqueId = br.ReadInt32(); Position = br.ReadStruct <C3Vector>(); Rotation = br.ReadStruct <C3Vector>(); Scale = br.ReadUInt16(); Flags = br.ReadEnum <MODDF_Flags>(); }
public string LightName; // 32, 8.3 is not 0 padded public LIT_ListData(BinaryReader br) { Chunk = br.ReadStruct <C2iVector>(); ChunkRadius = br.ReadInt32(); LightLocation = br.ReadStruct <C3Vector>(); LightRadius = br.ReadSingle(); LightDropoff = br.ReadSingle(); LightName = br.ReadString(32).TrimEnd('\xFFFD', '\0'); }
public MLIQ(BinaryReader br) { VertexCount = br.ReadStruct <C2iVector>(); TileCount = br.ReadStruct <C2iVector>(); Corner = br.ReadStruct <C3Vector>(); MaterialId = br.ReadUInt16(); // HACK LiquidVertexList = br.ReadJaggedArray(VertexCount.x, VertexCount.y, () => br.ReadStruct <SMOLVert>()); LiquidTileList = br.ReadJaggedArray(TileCount.x, TileCount.y, () => br.ReadStruct <SMOLTile>()); }
public void UpdateCollisions() { if (_model.Has <CLID>()) { var v = _model.Get <CLID>().Vertices; C3Vector min = new C3Vector(v.Min(x => x.X), v.Min(x => x.Y), v.Min(x => x.Z)); C3Vector max = new C3Vector(v.Max(x => x.X), v.Max(x => x.Y), v.Max(x => x.Z)); Model.CollisionBox = new CAaBox(min, max); Model.CollisionSphereRadius = (Model.CollisionBox.Min.Length() + Model.CollisionBox.Max.Length()) / 2f; Model.CollisionNormals = _model.Get <CLID>().FacetNormals.Select(x => x.ToC3Vector).ToM2Array(); Model.CollisionTriangles = _model.Get <CLID>().TriIndices.ToM2Array(); Model.CollisionVertices = _model.Get <CLID>().Vertices.Select(x => x.ToC3Vector).ToM2Array(); } else { var view = Model.Views[0]; //Calculate Vertices Model.CollisionVertices = new M2Array <C3Vector>(); for (int i = 0; i < view.Indices.Count; i++) { Model.CollisionVertices.Add(Model.GlobalVertexList[i].Position); } //Calculate normals and triangles Model.CollisionNormals = new M2Array <C3Vector>(); Model.CollisionTriangles = new M2Array <ushort>(); for (int i = 0; i < view.Triangles.Count / 3; i++) { ushort i1 = view.Triangles[i]; ushort i2 = view.Triangles[i + 1]; ushort i3 = view.Triangles[i + 2]; C3Vector v1 = Model.GlobalVertexList[i1].Position; C3Vector v2 = Model.GlobalVertexList[i2].Position; C3Vector v3 = Model.GlobalVertexList[i3].Position; C3Vector U = new C3Vector(v2.X - v1.X, v2.Y - v1.Y, v2.Z - v1.Z); C3Vector V = new C3Vector(v3.X - v1.X, v3.Y - v1.Y, v3.Z - v1.Z); C3Vector N = new C3Vector(U.Y * V.Z - U.Z * V.Y, U.Z * V.X - U.X * V.Z, U.X * V.Y - U.Y * V.X).Normalise(); Model.CollisionNormals.Add(N); Model.CollisionTriangles.AddRange(new[] { i1, i2, i3 }); } //Calculate box and Sphere var v = Model.CollisionVertices; C3Vector min = new C3Vector(v.Min(x => x.X), v.Min(x => x.Y), v.Min(x => x.Z)); C3Vector max = new C3Vector(v.Max(x => x.X), v.Max(x => x.Y), v.Max(x => x.Z)); Model.CollisionBox = new CAaBox(min, max); Model.CollisionSphereRadius = (Model.CollisionBox.Min.Length() + Model.CollisionBox.Max.Length()) / 2f; } }
public M2Bone(BinaryReader br, uint build) { KeyBoneId = (KeyBone)br.ReadInt32(); Flags = br.ReadEnum <M2Bone_Flags>(); Parent = br.ReadInt16(); SubmeshId = br.ReadInt16(); TransTrack = new M2Track <C3Vector>(br, build); RotTrack = new M2Track <C4Quaternion>(br, build); ScaleTrack = new M2Track <C3Vector>(br, build); Pivot = br.ReadStruct <C3Vector>(); }
public MODD(BinaryReader br) { uint data = br.ReadUInt32(); NameIndex = data & 0xFFFFFFu; Flags = (MODD_Flags)(data >> 24); Position = br.ReadStruct <C3Vector>(); Orientation = br.ReadStruct <C4Quaternion>(); Scale = br.ReadSingle(); Color = br.ReadStruct <CImVector>(); }
public MODF(BinaryReader br) { NameId = br.ReadUInt32(); UniqueId = br.ReadInt32(); Pos = br.ReadStruct <C3Vector>(); Rot = br.ReadStruct <C3Vector>(); Extents = br.ReadStruct <CAaBox>(); Flags = br.ReadEnum <MODF_Flags>(); DoodadSet = br.ReadUInt16(); NameSet = br.ReadUInt16(); Scale = br.ReadUInt16(); }
public override void Read(BinaryReader stream) { Type = stream.ReadUInt32(); FarClip = stream.ReadSingle(); NearClip = stream.ReadSingle(); Positions.Read(stream); PositionBase = stream.Read <C3Vector>(); TargetPositions.Read(stream); TargetPositionBase = stream.Read <C3Vector>(); Roll.Read(stream); FoV.Read(stream); }
public override void Read(BinaryReader stream) { KeyBoneId = stream.ReadInt32(); Flags = stream.ReadUInt32(); ParentBone = stream.ReadInt16(); SubmeshId = stream.ReadUInt16(); Unknown = stream.Read <ushort>(Unknown.Length); Translation.Read(stream); Rotation.Read(stream); Scale.Read(stream); Pivot = stream.Read <C3Vector>(); }
public M2Camera(BinaryReader br, uint build) { Type = br.ReadEnum <CameraType>(); FieldOfView = br.ReadSingle(); FarClip = br.ReadSingle(); NearClip = br.ReadSingle(); TransTrack = new M2Track <SplineKey <C3Vector> >(br, build); Pivot = br.ReadStruct <C3Vector>(); TargetTransTrack = new M2Track <SplineKey <C3Vector> >(br, build); TargetPivot = br.ReadStruct <C3Vector>(); RollTrack = new M2Track <SplineKey <float> >(br, build); }
public override void Read(BinaryReader stream) { Type = stream.ReadUInt16(); Bone = stream.ReadInt16(); Position = stream.Read <C3Vector>(); AmbientColor.Read(stream); AmbientInsensity.Read(stream); DiffuseColor.Read(stream); DiffuseIntensity.Read(stream); AttenuationStart.Read(stream); AttenuationEnd.Read(stream); Unknown.Read(stream); }
public M2Light(BinaryReader br, uint build) { Type = br.ReadEnum <LightType>(); BoneIndex = br.ReadUInt16(); Position = br.ReadStruct <C3Vector>(); AmbColorTrack = new M2Track <C3Vector>(br, build); AmbIntensityTrack = new M2Track <float>(br, build); ColorTrack = new M2Track <C3Vector>(br, build); IntensityTrack = new M2Track <float>(br, build); AttenStartTrack = new M2Track <float>(br, build); AttenEndTrack = new M2Track <float>(br, build); VisibilityTrack = new M2Track <bool>(br, build); }
public override void Read(BinaryReader s) { Unknown = s.ReadUInt32(); Flags = s.ReadUInt32(); Position = s.Read <C3Vector>(); Bone = s.ReadUInt16(); PackedTexture = s.ReadUInt16(); ModelFileName.Read(s); ChildEmitterFileName.Read(s); BlendingType = s.ReadByte(); EmitterType = s.ReadByte(); ParticleColorIndex = s.ReadUInt16(); ParticleType = s.ReadByte(); HeadOrTail = s.ReadByte(); TextureTileRotation = s.ReadUInt16(); TextureDimensionRows = s.ReadUInt16(); TextureDimensionColumns = s.ReadUInt16(); EmissionSpeed.Read(s); SpeedVariation.Read(s); VerticalRange.Read(s); HorizontalRange.Read(s); Gravity.Read(s); LifeSpan.Read(s); UnkPadding = s.ReadUInt32(); EmissionRate.Read(s); UnkPadding2 = s.ReadUInt32(); EmissionAreaLength.Read(s); EmissingAreaWidth.Read(s); Gravity2.Read(s); ColorTrack.Read(s); AlphaTrack.Read(s); ScaleTrack.Read(s); UnknownFields = s.Read <float>(UnknownFields.Length); HeadCellTrack.Read(s); TailCellTrack.Read(s); SomethingParticleStyle = s.ReadSingle(); UnknownFloats1 = s.Read <float>(UnknownFloats1.Length); TwinkleScale = s.Read <CRange>(); Unk = s.ReadUInt32(); Drag = s.ReadSingle(); UnknownFloats2 = s.Read <float>(UnknownFloats2.Length); Rotation = s.ReadSingle(); UnknownFloats3 = s.Read <float>(UnknownFloats3.Length); Rotation1 = s.Read <C3Vector>(); Rotation2 = s.Read <C3Vector>(); Translation = s.Read <C3Vector>(); FollowParams = s.Read <float>(FollowParams.Length); UnknownReference.Read(s); EnabledIn.Read(s); Unk2 = s.Read <uint>(Unk2.Length); }
public static C3Vector Normalise(this C3Vector vector) { double lenSq = vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z; if (lenSq > 0.00000023841858) { double invLen = 1.0 / Math.Sqrt(lenSq); var X = vector.X * invLen; var Y = vector.Y * invLen; var Z = vector.Z * invLen; return(new C3Vector((float)X, (float)Y, (float)Z)); } return(vector); }
public MOLT(BinaryReader br, uint version) { Type = br.ReadEnum <LightType>(); UseAtten = br.ReadByte(); Unknown_0x2 = br.ReadBytes(2); Color = br.ReadStruct <CImVector>(); Position = br.ReadStruct <C3Vector>(); Intensity = br.ReadSingle(); if (version != 14) { Unknown_0x18 = br.ReadArray(4, () => br.ReadSingle()); } AttenStart = br.ReadSingle(); AttenEnd = br.ReadSingle(); }
public MDLGEOSECTION(BinaryReader br) { MaterialId = br.ReadInt32(); CenterBounds = br.ReadStruct <C3Vector>(); BoundsRadius = br.ReadSingle(); SelectionGroup = br.ReadInt32(); GeosetIndex = br.ReadInt32(); Flags = (GeosSection_Flags)br.ReadInt32(); br.AssertTag("PVTX"); NumVertices = br.ReadInt32(); // count of M2Vertex br.AssertTag("PTYP"); NumPrimitiveTypes = br.ReadInt32(); br.AssertTag("PVTX"); NumPrimitiveIndices = br.ReadInt32(); Unknown_0x28 = br.ReadInt32(); Unknown_0x2C = br.ReadInt32(); }
public M2Ribbon(BinaryReader br, uint build) { RibbonId = br.ReadInt32(); BoneIndex = br.ReadUInt32(); Position = br.ReadStruct <C3Vector>(); TextureLookup = br.ReadM2Array <short>(build); MaterialLookup = br.ReadM2Array <short>(build); ColorTrack = new M2Track <CRGB>(br, build); AlphaTrack = new M2Track <FixedPoint_0_15>(br, build); HeightAboveTrack = new M2Track <float>(br, build); HeightBelowTrack = new M2Track <float>(br, build); EdgesPerSecond = br.ReadSingle(); EdgeLifetime = br.ReadSingle(); Gravity = br.ReadSingle(); TextureRows = br.ReadUInt16(); TextureCols = br.ReadUInt16(); TextureSlotTrack = new M2Track <ushort>(br, build); VisbilityTrack = new M2Track <bool>(br, build); }
public override void Read(BinaryReader stream) { Unk = stream.ReadUInt32(); Bone = stream.ReadUInt32(); Position = stream.Read <C3Vector>(); TextureRef.Read(stream); BlendRef.Read(stream); Color.Read(stream); Opacity.Read(stream); HeightAbove.Read(stream); HeightBelow.Read(stream); Resolution = stream.ReadSingle(); Length = stream.ReadSingle(); EmissionAngle = stream.ReadSingle(); RenderFlags = stream.Read <ushort>(RenderFlags.Length); Unk1.Read(stream); Unk2.Read(stream); Unk3 = stream.ReadUInt32(); }
public void Load(BinaryReader stream, M2.Format version) { Debug.Assert(version != M2.Format.Useless); KeyBoneId = (KeyBone) stream.ReadInt32(); Flags = (BoneFlags) stream.ReadUInt32(); ParentBone = stream.ReadInt16(); SubmeshId = stream.ReadUInt16(); if (version > M2.Format.Classic) { _unknown[0] = stream.ReadUInt16(); _unknown[1] = stream.ReadUInt16(); } Translation.Load(stream, version); if (version > M2.Format.Classic) { _compressedRotation = new M2Track<M2CompQuat>(new M2CompQuat(32767, 32767, 32767, -1)); _compressedRotation.Sequences = Rotation.Sequences; _compressedRotation.Load(stream, version); } else Rotation.Load(stream, version); Scale.Load(stream, version); Pivot = stream.ReadC3Vector(); }
public CAaBox(C3Vector min, C3Vector max) { Min = min; Max = max; }
public static void WriteC3Vector(this BinaryWriter writer, C3Vector vector) { writer.Write(vector.X); writer.Write(vector.Y); writer.Write(vector.Z); }
public CAaSphere(C3Vector pos, float rad) { Position = pos; Radius = rad; }
public C4Plane(C3Vector vec, float dist) { Normal = vec; Distance = dist; }
public PRE2(BinaryReader br) { Size = br.ReadUInt32(); Load(br); EmitterSize = br.ReadInt32(); EmitterType = (EmitterType)br.ReadUInt32(); Speed = br.ReadSingle(); Variation = br.ReadSingle(); Latitude = br.ReadSingle(); Longitude = br.ReadSingle(); Gravity = br.ReadSingle(); ZSource = br.ReadSingle(); Lifespan = br.ReadSingle(); EmissionRate = br.ReadSingle(); Length = br.ReadSingle(); Width = br.ReadSingle(); Rows = br.ReadInt32(); Cols = br.ReadInt32(); ParticleType = (CellType)br.ReadUInt32(); TailLength = br.ReadSingle(); MiddleTime = br.ReadSingle(); StartColor = br.ReadStruct <CBGR>(); MiddleColor = br.ReadStruct <CBGR>(); EndColor = br.ReadStruct <CBGR>(); StartAlpha = br.ReadByte() / 255f; MiddleAlpha = br.ReadByte() / 255f; EndAlpha = br.ReadByte() / 255f; StartScale = br.ReadSingle(); MiddleScale = br.ReadSingle(); EndScale = br.ReadSingle(); LifespanUVAnimStart = br.ReadUInt32(); LifespanUVAnimEnd = br.ReadUInt32(); LifespanUVAnimRepeat = br.ReadUInt32(); DecayUVAnimStart = br.ReadUInt32(); DecayUVAnimEnd = br.ReadUInt32(); DecayUVAnimRepeat = br.ReadUInt32(); TailUVAnimStart = br.ReadUInt32(); TailUVAnimEnd = br.ReadUInt32(); TailUVAnimRepeat = br.ReadUInt32(); TailDecayUVAnimStart = br.ReadUInt32(); TailDecayUVAnimEnd = br.ReadUInt32(); TailDecayUVAnimRepeat = br.ReadUInt32(); BlendMode = (BlendMode)br.ReadUInt32(); TextureId = br.ReadUInt32(); PriorityPlane = br.ReadInt32(); ReplaceableId = br.ReadUInt32(); GeometryModel = br.ReadString(260).TrimEnd('\0'); RecursionModel = br.ReadString(260).TrimEnd('\0'); TwinkleFPS = br.ReadSingle(); TwinkleOnOff = br.ReadSingle(); TwinkleScaleMin = br.ReadSingle(); TwinkleScaleMax = br.ReadSingle(); IvelScale = br.ReadSingle(); TumbleX = br.ReadStruct <CRange>(); TumbleY = br.ReadStruct <CRange>(); TumbleZ = br.ReadStruct <CRange>(); Drag = br.ReadSingle(); Spin = br.ReadSingle(); WindVector = br.ReadStruct <C3Vector>(); WindTime = br.ReadSingle(); FollowSpeed1 = br.ReadSingle(); FollowScale1 = br.ReadSingle(); FollowSpeed2 = br.ReadSingle(); FollowScale2 = br.ReadSingle(); Splines = br.ReadStructArray <C3Vector>(br.ReadInt32()); Squirts = br.ReadUInt32() == 1; // for footsteps and impact spell effects while (true) { string token = br.ReadString(4); br.BaseStream.Position -= 4; switch (token) { case "KP2S": SpeedKeys = new MDXTrack <float>(br); break; case "KP2R": VariationKeys = new MDXTrack <float>(br); break; case "KP2G": GravityKeys = new MDXTrack <float>(br); break; case "KP2W": WidthKeys = new MDXTrack <float>(br); break; case "KP2N": LengthKeys = new MDXTrack <float>(br); break; case "KVIS": VisibilityKeys = new MDXTrack <float>(br); break; case "KP2E": EmissionRateKeys = new MDXTrack <float>(br); break; case "KP2L": LatitudeKeys = new MDXTrack <float>(br); break; case "KLIF": LifespanKeys = new MDXTrack <float>(br); break; case "KPLN": LongitudeKeys = new MDXTrack <float>(br); break; case "KP2Z": ZSourceKeys = new MDXTrack <float>(br); break; default: return; } } }
public override void Read(BinaryReader stream) { Normal = stream.Read <C3Vector>(); }
public byte[] Unk_0x14; // [56] public WLX_Block_2(BinaryReader br) { Unk_0x0 = br.ReadStruct <C3Vector>(); Unk_0xC = br.ReadStruct <C2Vector>(); Unk_0x14 = br.ReadBytes(0x38); }
public override void Read(BinaryReader stream) { Position = stream.Read <C3Vector>(); }