public void AddSequence(string sequence, int value) { if (String.IsNullOrEmpty(sequence)) { return; } if (sequence.Length % 2 != 0) { throw new ArgumentException("Sequence has incorrect string length"); } Sequence s = new Sequence() { Value = value }; for (int sPos = 0; sPos < sequence.Length; sPos += 2) { string val = sequence.Substring(sPos, 2); Cell c = new Cell() { Value = val }; s.Cells.Add(c); } Sequences.Add(s); }
void LoadSequences() { Sequences.Clear(); var soundSequences = SoundServiceSingleton.Instance.GetAllSoundSequences(); soundSequences.ForEach(x => Sequences.Add(x)); }
public virtual void ReadChildData(BinaryReader reader) { int x = 0; _compressedColorPlateData.ReadBinary(reader); _processedPixelData.ReadBinary(reader); for (x = 0; (x < _sequences.Count); x = (x + 1)) { Sequences.Add(new BitmapGroupSequenceBlock()); Sequences[x].Read(reader); } for (x = 0; (x < _sequences.Count); x = (x + 1)) { Sequences[x].ReadChildData(reader); } for (x = 0; (x < _bitmaps.Count); x = (x + 1)) { Bitmaps.Add(new BitmapDataBlock()); Bitmaps[x].Read(reader); } for (x = 0; (x < _bitmaps.Count); x = (x + 1)) { Bitmaps[x].ReadChildData(reader); } }
private async void OnUpdateSequenceYamlItem() { if (SelectedSequenceFile == null) { Log("Sequence File Doesn't exist", Category.Warn); return; } Log("Updating sequences."); try { //Clear sequences and convert the attract configs values to sequence item view models await Dispatcher.CurrentDispatcher.InvokeAsync(() => { Sequences?.Clear(); _skeletonGameAttract.GetAvailableSequences(SelectedSequenceFile.SequenceYaml); foreach (var sequence in SelectedSequenceFile.SequenceYaml.Sequences) { Sequences.Add(new SequenceItemViewModel(sequence)); } }); } catch (Exception ex) { Log(ex.Message, Category.Exception); throw; } }
public void Populate(ref List <Node> nodes, Func <string, string> GetNodeName, Action <string> printFunc) { PrintFunc = printFunc; string[] ruleSplit = RawRules.Split('|', StringSplitOptions.RemoveEmptyEntries); foreach (String curSplit in ruleSplit) { List <string> ids = curSplit.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList(); int intTest; if (!int.TryParse(ids.ElementAt(0), out intTest)) { Value = ids.ElementAt(0); continue; } ids = ids.Select(i => GetNodeName(i)).ToList(); SubRules.Add(new List <string>()); SubRules.Last().AddRange(ids); Sequences.Add(new List <Node>()); foreach (string id in ids) { Node curNode = nodes.Where(n => n.ID == id).First(); Sequences.Last().Add(curNode); } } }
public SectionBase AddSubsection() { var subsection = new Sequence(); Sequences.Add(subsection); return(subsection); }
public bitmap(CacheBase Cache, int Address) { EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); #region Sequence Chunk Reader.SeekTo(Address + 60); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Sequences.Add(new Sequence(Cache, iOffset + 60 * i)); } #endregion #region BitmapData Chunk Reader.SeekTo(Address + 68); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Bitmaps.Add(new BitmapData(Cache, iOffset + 116 * i)); } #endregion }
public int AddSequence(string sequenceName, DefAnimation sequenceType) { Sequences.Add(new SpriteFrameSequenceViewModel(RegisterCollectionSynchronizationCallback) { SequenceName = sequenceName, SequenceType = sequenceType }); return(Sequences.Count - 1); }
public void InitNewConfig() { if (FlightGlobals.ActiveVessel != null && !ConfigInfo.Instance.Sequences.ContainsKey(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel))) { Log.Info("InitNewConfig for " + ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel)); Sequences.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), Enumerable.Repeat(-1, 10).ToArray()); VesselOptions.Add(ModuleNASACountdown.CraftName(FlightGlobals.ActiveVessel), new PerVesselOptions()); } }
private void AddHorizontalSequences(List <String[]> crozzleRows) { int rowNumber = 0; int columnIndex; String row; foreach (String[] crozzleRow in crozzleRows) { rowNumber++; columnIndex = 0; // Place all letters into one string, so that we can split it later. row = ""; foreach (String letter in crozzleRow) { row = row + letter; } // Use split to collect all sequences of letters. String[] letterSequences = row.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Collect and store data about each letter sequence of length > 1, as a sequence of one letter is not a word. foreach (String sequence in letterSequences) { if (sequence.Length > 1) { // Set column values. int columnNumber = row.IndexOf(sequence, columnIndex) + 1; //////// check for duplicate word //////WordData duplicate = Sequences.Find(x => x.Letters.Equals(sequence)); //////if (duplicate != null) ////// ErrorMessages.Add("\"" + sequence + "\" at (" + rowNumber + ", " + columnNumber + ") already exists in the crozzle at (" + duplicate.Location.Row + ", " + duplicate.Location.Column + ")"); //////// Check that duplicate words are within limits. //////List<WordData> duplicates = Sequences.FindAll(x => x.Letters.Equals(sequence)); //////if (duplicates.Count < Configuration.MinimumNumberOfTheSameWord) ////// ErrorMessages.Add("\"" + sequence + "\" at (" + rowNumber + ", " + columnNumber + ") exists in the crozzle " + duplicates.Count + ////// " times, which is more than the limit of " + Configuration.MinimumNumberOfTheSameWord); //////if (duplicates.Count > Configuration.MaximumNumberOfTheSameWord) ////// ErrorMessages.Add("\"" + sequence + "\" at (" + rowNumber + ", " + columnNumber + ") exists in the crozzle " + duplicates.Count + ////// " times, which is more than the limit of " + Configuration.MaximumNumberOfTheSameWord); // Collect data about the word, and // update the index for the next substring search. WordData word = new WordData(WordData.OrientationRow, rowNumber, row.IndexOf(sequence, columnIndex) + 1, sequence); columnIndex = word.Location.Column - 1 + sequence.Length; // Store data about the word. Sequences.Add(word); HorizontalSequences.Add(word); } } } }
/// <summary> /// Adds the sequence. /// </summary> /// <param name="sequence">Sequence</param> public void AddSequence(Sequence sequence) { if (!Sequences.Contains(sequence)) { Sequences.Add(sequence); if (OnSequencesUpdated != null) { OnSequencesUpdated.Invoke(this, new SequencesUpdatedArgs(UpdateOperation.Add, sequence)); } } }
public override void InitFullEventData(JObject json) { base.InitFullEventData(json); dynamic fullEvent = (dynamic)json; foreach (dynamic sequenceData in fullEvent.value[0].Sequences) { Sequences.Add(new ExerciseEventSequenceItem(sequenceData)); } }
/// <summary> /// Adds sequence to sequencer. /// </summary> /// <typeparam name="T">Type of sequence.</typeparam> /// <returns>Newly created sequence.</returns> public Sequence AddSequence <T>() where T : Sequence { var newSequence = Activator.CreateInstance(typeof(T), this) as Sequence; SequencerPanel.Children.Add(newSequence ?? throw new Exception("Cannot create sequence")); if (typeof(T) != typeof(ClockSequence)) { Sequences.Add(newSequence); } return(newSequence); }
public void AddVerticalSequences(List <String[]> crozzleColumns) { int columnNumber = 0; int rowIndex; String column; foreach (String[] crozzleColumn in crozzleColumns) { columnNumber++; rowIndex = 0; // Place all letters into one string, so that we can split it later. column = ""; foreach (String letter in crozzleColumn) { column = column + letter; } // Use split to collect all sequences of letters. String[] letterSequences = column.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Collect and store data about each letter sequence of length > 1, as a sequence of one letter is not a word. foreach (String sequence in letterSequences) { if (sequence.Length > 1) { // Set row values. int rowNumber = column.IndexOf(sequence, rowIndex) + 1; ////////// Check that duplicate words are within limits. ////////List<WordData> duplicates = Sequences.FindAll(x => x.Letters.Equals(sequence)); ////////if (duplicates.Count < Configuration.MinimumNumberOfTheSameWord) //////// ErrorMessages.Add("\"" + sequence + "\" at (" + rowNumber + ", " + columnNumber + ") exists in the crozzle " + duplicates.Count + //////// " times, which is more than the limit of " + Configuration.MinimumNumberOfTheSameWord); ////////if (duplicates.Count > Configuration.MaximumNumberOfTheSameWord) //////// ErrorMessages.Add("\"" + sequence + "\" at (" + rowNumber + ", " + columnNumber + ") exists in the crozzle " + duplicates.Count + //////// " times, which is more than the limit of " + Configuration.MaximumNumberOfTheSameWord); // Collect data about the word, and // update the index for the next substring search. WordData word = new WordData(WordData.OrientationColumn, rowNumber, columnNumber, sequence); rowIndex = word.Location.Row - 1 + sequence.Length; // Store data about the word. Sequences.Add(word); VerticalSequences.Add(word); } } } }
public bitmap(CacheBase Cache, int Address) { EndianReader Reader = Cache.Reader; Reader.SeekTo(Address); #region Sequence Chunk Reader.SeekTo(Address + 84); int iCount = Reader.ReadInt32(); int iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Sequences.Add(new Sequence(Cache, iOffset + 64 * i)); } #endregion #region BitmapData Chunk Reader.SeekTo(Address + 96); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { Bitmaps.Add(new BitmapData(Cache, iOffset + 48 * i)); } #endregion #region Raw Chunk A Reader.SeekTo(Address + 140); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { RawChunkAs.Add(new RawChunkA(Cache, iOffset + 8 * i)); } #endregion #region Raw Chunk B Reader.SeekTo(Address + 152); iCount = Reader.ReadInt32(); iOffset = Reader.ReadInt32() - Cache.Magic; for (int i = 0; i < iCount; i++) { RawChunkBs.Add(new RawChunkB(Cache, iOffset + 8 * i)); } Reader.SeekTo(Address + 164); #endregion }
// Read/write ROM private void ReadFromBuffer() { AnimationOffset = Bits.GetInt24(rom, 0x252000 + (Index * 3)) - 0xC00000; // Create source buffer for following properties int animationLength = Bits.GetShort(rom, AnimationOffset); Buffer = Bits.GetBytes(rom, AnimationOffset, animationLength); // Get pointers of data types int offset = 2; ushort sequencePacketPointer = Bits.GetShort(Buffer, offset); offset += 2; ushort moldPacketPointer = Bits.GetShort(Buffer, offset); offset += 2; byte sequenceCount = Buffer[offset++]; byte moldCount = Buffer[offset++]; VramAllocation = (ushort)(Buffer[offset] << 8); offset += 2; Unknown = Bits.GetShort(Buffer, offset); // Build sequence collection offset = sequencePacketPointer; this.Sequences = new List <Sequence>(); for (int i = 0; i < sequenceCount; i++) { var tSequence = new Sequence(); tSequence.ReadFromBuffer(Buffer, offset); Sequences.Add(tSequence); offset += 2; } // Build mold collection offset = moldPacketPointer; this.Molds = new List <Mold>(); this.UniqueTiles = new List <Mold.Tile>(); for (int i = 0; i < moldCount; i++) { var tMold = new Mold(); tMold.ReadFromBuffer(Buffer, offset, UniqueTiles, Index, AnimationOffset); Molds.Add(tMold); offset += 2; } }
private void AddVerticalSequences(List <String[]> crozzleColumns) { int columnNumber = 0; int rowIndex; String column; foreach (String[] crozzleColumn in crozzleColumns) { columnNumber++; rowIndex = 0; // Place all letters into one string, so that we can split it later. column = ""; foreach (String letter in crozzleColumn) { column = column + letter; } // Use split to collect all sequences of letters. String[] letterSequences = column.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Collect and store data about each letter sequence of length > 1, as a sequence of one letter is not a word. foreach (String sequence in letterSequences) { if (sequence.Length > 1) { // Set row values. int rowNumber = column.IndexOf(sequence, rowIndex) + 1; // Collect data about the word, and // update the index for the next substring search. WordData word = new WordData(WordData.OrientationColumn, rowNumber, columnNumber, sequence); rowIndex = word.Location.Row - 1 + sequence.Length; // Store data about the word. Sequences.Add(word); VerticalSequences.Add(word); } } } }
private void AddHorizontalSequences(List <String[]> crozzleRows) { int rowNumber = 0; int columnIndex; String row; foreach (String[] crozzleRow in crozzleRows) { rowNumber++; columnIndex = 0; // Place all letters into one string, so that we can split it later. row = ""; foreach (String letter in crozzleRow) { row = row + letter; } // Use split to collect all sequences of letters. String[] letterSequences = row.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Collect and store data about each letter sequence of length > 1, as a sequence of one letter is not a word. foreach (String sequence in letterSequences) { if (sequence.Length > 1) { // Set column values. int columnNumber = row.IndexOf(sequence, columnIndex) + 1; // Collect data about the word, and // update the index for the next substring search. WordData word = new WordData(WordData.OrientationRow, rowNumber, row.IndexOf(sequence, columnIndex) + 1, sequence); columnIndex = word.Location.Column - 1 + sequence.Length; // Store data about the word. Sequences.Add(word); HorizontalSequences.Add(word); } } } }
public override void InitFullEventData(JObject json) { base.InitFullEventData(json); dynamic fullEvent = (dynamic)json; foreach (dynamic sequenceData in fullEvent.value[0].Sequences) { Sequences.Add(new BikeEventSequenceItem(sequenceData)); } // parse out map points foreach (dynamic mapData in fullEvent.value[0].MapPoints) { var runMapPoint = new BandMapPoint() { Type = mapData.MapPointType, SecondsSinceStart = mapData.SecondsSinceStart, Ordinal = mapData.MapPointOrdinal, Distance = mapData.TotalDistance, HeartRate = mapData.HeartRate, Pace = ((double)mapData.Pace * 0.001), ScaledPace = mapData.ScaledPace, IsPaused = mapData.IsPaused, IsResume = mapData.IsResume }; if (mapData.Location != null) { runMapPoint.Latitude = ((double)mapData.Location.Latitude * 1E-07); runMapPoint.Longitude = ((double)mapData.Location.Longitude * 1E-07); runMapPoint.Altitude = ((double)mapData.Location.AltitudeFromMSL * 0.01); runMapPoint.EHPE = ((double)mapData.Location.EHPE * 0.01); runMapPoint.EVPE = ((double)mapData.Location.EVPE * 0.01); HasGPSPoints = true; } _mapPoints.Add(runMapPoint); } }
private void BuildSequences() { Sequence sequence1 = new Sequence(); sequence1.ID = 1; sequence1.ExternalId = "c2f5f76a-1ee7-4f92-9150-55de4cefa76f"; sequence1.Name = "Test Sequence 1"; sequence1.Description = "Sequence used for testing"; sequence1.Project = Projects.SingleOrDefault(p => p.ID == 1); sequence1.SequenceScripts = new List <SequenceScript>(); Sequences.Add(sequence1); Sequence sequence2 = new Sequence(); sequence2.ID = 2; sequence2.ExternalId = "a019a262-b469-4f8c-9da2-208d3b61ee12"; sequence2.Name = "Test Sequence 2"; sequence2.Description = "Another Sequence used for testing"; sequence2.Project = Projects.SingleOrDefault(p => p.ID == 1); sequence2.SequenceScripts = new List <SequenceScript>(); Sequences.Add(sequence2); }
/// <summary> /// Populates the genome metadata from an XML file /// </summary> public void Deserialize(string inputFilename) { // open the XML file inputFilename = Path.GetFullPath(inputFilename); string directory = Path.GetDirectoryName(inputFilename); Length = 0; KnownBases = 0; // initial int refIndex = 0; IGenomesReferencePath iGenomesReference = IGenomesReferencePath.GetReferenceFromFastaPath(directory); // use StreamReader to avoid URI parsing of filename that will cause problems with // certain characters in the path (#). using (var xmlReader = XmlReader.Create(new StreamReader(inputFilename))) { while (xmlReader.Read()) { XmlNodeType nType = xmlReader.NodeType; // handle if (nType == XmlNodeType.Element) { // retrieve the genome variables if (xmlReader.Name == "sequenceSizes") { Name = xmlReader.GetAttribute("genomeName"); if (iGenomesReference != null && string.IsNullOrEmpty(Name)) { Name = iGenomesReference.ToString(); } } // retrieve the chromosome variables if (xmlReader.Name == "chromosome") { SequenceMetadata refSeq = new SequenceMetadata { FastaPath = Path.Combine(directory, xmlReader.GetAttribute("fileName")), Name = xmlReader.GetAttribute("contigName"), Index = refIndex++, Length = long.Parse(xmlReader.GetAttribute("totalBases")), Type = ParseSequenceType(xmlReader.GetAttribute("type")) }; Length += refSeq.Length; refSeq.Build = xmlReader.GetAttribute("build"); refSeq.Species = xmlReader.GetAttribute("species"); // update species and build from fasta path if in iGenomes format if (iGenomesReference != null) { if (string.IsNullOrEmpty(refSeq.Build)) { refSeq.Build = iGenomesReference.Build; } if (string.IsNullOrEmpty(refSeq.Species)) { refSeq.Species = iGenomesReference.Species; } } string isCircular = xmlReader.GetAttribute("isCircular"); if (!string.IsNullOrEmpty(isCircular)) { refSeq.IsCircular = (isCircular == "true"); } string ploidy = xmlReader.GetAttribute("ploidy"); if (!string.IsNullOrEmpty(ploidy)) { refSeq.Ploidy = int.Parse(ploidy); } string md5 = xmlReader.GetAttribute("md5"); if (!string.IsNullOrEmpty(md5)) { refSeq.Checksum = md5; } string knownBases = xmlReader.GetAttribute("knownBases"); if (!string.IsNullOrEmpty(knownBases)) { refSeq.KnownBases = long.Parse(knownBases); KnownBases += refSeq.KnownBases; } Sequences.Add(refSeq); } } } } }
public void Load() { try { var node = ConfigNode.Load(_configPath); if (node == null) { throw new NullReferenceException("Node not exist"); } if (node.HasValue("isDebug")) { IsDebug = bool.Parse(node.GetValue("isDebug")); } if (node.HasValue("soundEnabled")) { IsSoundEnabled = bool.Parse(node.GetValue("soundEnabled")); } if (node.HasValue("engineControl")) { EngineControl = bool.Parse(node.GetValue("engineControl")); } if (node.HasValue("abort")) { AbortExecuted = bool.Parse(node.GetValue("abort")); } if (node.HasValue("scale")) { Scale = float.Parse(node.GetValue("scale")); } if (node.HasValue("soundSet")) { SoundSet = node.GetValue("soundSet"); } if (node.HasValue("position")) { WindowPosition = _wrapper.ToRect(node.GetValue("position")); Debug.LogWarning("Position is" + WindowPosition); } if (node.HasNode("sequence")) { var sequences = node.GetNodes("sequence"); Sequences.Clear(); foreach (var sequence in sequences) { Sequences.Add(new Guid(sequence.GetValue("id")), sequence.GetValue("stages").Split(',')); } } IsLoaded = true; } catch (Exception ex) { Debug.LogError("Cannot load config"); Debug.LogException(ex); IsLoaded = false; } }
public void Load(ConfigNode node) { try { LoadSounds(); if (node == null) { throw new NullReferenceException("Node not exist"); } if (node.HasValue("soundEnabled")) { IsSoundEnabled = bool.Parse(node.GetValue("soundEnabled")); } if (node.HasValue("engineControl")) { EngineControl = bool.Parse(node.GetValue("engineControl")); } if (node.HasValue("abort")) { AbortExecuted = bool.Parse(node.GetValue("abort")); } if (node.HasValue("scale")) { Scale = float.Parse(node.GetValue("scale")); } if (node.HasValue("soundSet")) { SoundSet = node.GetValue("soundSet"); } if (node.HasValue("position")) { WindowPosition = _wrapper.ToRect(node.GetValue("position")); Debug.LogWarning("Position is" + WindowPosition); } if (node.HasNode("sequence")) { var sequences = node.GetNodes("sequence"); Sequences.Clear(); foreach (var sequence in sequences) { Sequences.Add(new Guid(sequence.GetValue("id")), sequence.GetValue("stages").Split(',').Select(int.Parse).ToArray()); } } else { if (FlightGlobals.ActiveVessel != null && !ConfigInfo.Instance.Sequences.ContainsKey(FlightGlobals.ActiveVessel.id)) { Sequences.Add(FlightGlobals.ActiveVessel.id, Enumerable.Repeat(-1, 10).ToArray()); } } IsLoaded = true; } catch (Exception ex) { Debug.LogError("Cannot load config"); Debug.LogException(ex); IsLoaded = false; } }
public void AddSequence(string lotType, Sequence sequence) { Sequences.Add(lotType, sequence); }
// Read/write buffer private void ReadFromBuffer() { AnimationOffset = Bits.GetInt24(rom, 0x252C00 + (Index * 3)) - 0xC00000; // Create source buffer for following properties ushort animationLength = Bits.GetShort(rom, AnimationOffset); Buffer = Bits.GetBytes(rom, AnimationOffset, Bits.GetShort(rom, AnimationOffset)); // Get pointers of data types int offset = 2; ushort graphicSetPointer = Bits.GetShort(Buffer, offset); offset += 2; ushort paletteSetPointer = Bits.GetShort(Buffer, offset); offset += 2; ushort sequencePacketPointer = Bits.GetShort(Buffer, offset); offset += 2; ushort moldPacketPointer = Bits.GetShort(Buffer, offset); offset += 2; // Skip 2 unknown bytes offset += 2; // Get formatting properties Width = Buffer[offset++]; Height = Buffer[offset++]; Codec = Bits.GetShort(Buffer, offset); offset += 2; // Get graphics, palette, tileset data int tileSetPointer = Bits.GetShort(Buffer, offset); GraphicSetLength = paletteSetPointer - graphicSetPointer; GraphicSet = new byte[0x2000]; System.Buffer.BlockCopy(Buffer, graphicSetPointer, GraphicSet, 0, GraphicSetLength); PaletteSetLength = (ushort)(tileSetPointer - paletteSetPointer); PaletteSet = new PaletteSet(Buffer, 0, paletteSetPointer, 8, 16, 32); TilesetLength = sequencePacketPointer - tileSetPointer - 2; Tileset_bytes = new byte[64 * 4 * 2 * 4]; System.Buffer.BlockCopy(Buffer, tileSetPointer, Tileset_bytes, 0, TilesetLength); // Build sequence collection this.Sequences = new List <Sequence>(); offset = sequencePacketPointer; for (int i = 0; Bits.GetShort(Buffer, offset) != 0x0000; i++) { Sequence tSequence = new Sequence(); tSequence.ReadFromBuffer(Buffer, offset); Sequences.Add(tSequence); offset += 2; } // Build mold collection this.Molds = new List <Mold>(); offset = moldPacketPointer; ushort end = 0; for (int i = 0; Bits.GetShort(Buffer, offset) != 0x0000; i++) { if (Bits.GetShort(Buffer, offset + 2) == 0x0000) { end = animationLength; } else { end = Bits.GetShort(Buffer, offset + 2); } Mold tMold = new Mold(); tMold.ReadFromBuffer(Buffer, offset, end); Molds.Add(tMold); offset += 2; } }
private void Read(BinaryReader br, Dictionary <string, BinaryReader> sequenceGroups) { Header = new Header { ID = ID.Idst, Version = Version.Goldsource, Name = br.ReadFixedLengthString(Encoding.ASCII, 64), Size = br.ReadInt32(), EyePosition = br.ReadVector3(), HullMin = br.ReadVector3(), HullMax = br.ReadVector3(), BoundingBoxMin = br.ReadVector3(), BoundingBoxMax = br.ReadVector3(), Flags = br.ReadInt32() }; // Read all the nums/offsets from the header var sections = new int[(int)Section.NumSections][]; for (var i = 0; i < (int)Section.NumSections; i++) { var sec = (Section)i; int indexNum; if (sec == Section.Texture || sec == Section.Skin) { indexNum = 3; } else { indexNum = 2; } sections[i] = new int[indexNum]; for (var j = 0; j < indexNum; j++) { sections[i][j] = br.ReadInt32(); } } // Bones var num = SeekToSection(br, Section.Bone, sections); var numBones = num; for (var i = 0; i < num; i++) { var bone = new Bone { Name = br.ReadFixedLengthString(Encoding.ASCII, 32), Parent = br.ReadInt32(), Flags = br.ReadInt32(), Controllers = br.ReadIntArray(6), Position = br.ReadVector3(), Rotation = br.ReadVector3(), PositionScale = br.ReadVector3(), RotationScale = br.ReadVector3() }; Bones.Add(bone); } // Bone controllers num = SeekToSection(br, Section.BoneController, sections); for (var i = 0; i < num; i++) { var boneController = new BoneController { Bone = br.ReadInt32(), Type = br.ReadInt32(), Start = br.ReadSingle(), End = br.ReadSingle(), Rest = br.ReadInt32(), Index = br.ReadInt32() }; BoneControllers.Add(boneController); } // Hitboxes num = SeekToSection(br, Section.Hitbox, sections); for (var i = 0; i < num; i++) { var hitbox = new Hitbox { Bone = br.ReadInt32(), Group = br.ReadInt32(), Min = br.ReadVector3(), Max = br.ReadVector3() }; Hitboxes.Add(hitbox); } // Sequence groups num = SeekToSection(br, Section.SequenceGroup, sections); for (var i = 0; i < num; i++) { var group = new SequenceGroup { Label = br.ReadFixedLengthString(Encoding.ASCII, 32), Name = br.ReadFixedLengthString(Encoding.ASCII, 64) }; br.ReadBytes(8); // unused SequenceGroups.Add(group); } // Sequences num = SeekToSection(br, Section.Sequence, sections); for (var i = 0; i < num; i++) { var sequence = new Sequence { Name = br.ReadFixedLengthString(Encoding.ASCII, 32), Framerate = br.ReadSingle(), Flags = br.ReadInt32(), Activity = br.ReadInt32(), ActivityWeight = br.ReadInt32(), NumEvents = br.ReadInt32(), EventIndex = br.ReadInt32(), NumFrames = br.ReadInt32(), NumPivots = br.ReadInt32(), PivotIndex = br.ReadInt32(), MotionType = br.ReadInt32(), MotionBone = br.ReadInt32(), LinearMovement = br.ReadVector3(), AutoMovePositionIndex = br.ReadInt32(), AutoMoveAngleIndex = br.ReadInt32(), Min = br.ReadVector3(), Max = br.ReadVector3(), NumBlends = br.ReadInt32(), AnimationIndex = br.ReadInt32(), BlendType = br.ReadIntArray(2), BlendStart = br.ReadSingleArray(2), BlendEnd = br.ReadSingleArray(2), BlendParent = br.ReadInt32(), SequenceGroup = br.ReadInt32(), EntryNode = br.ReadInt32(), ExitNode = br.ReadInt32(), NodeFlags = br.ReadInt32(), NextSequence = br.ReadInt32() }; var seqGroup = SequenceGroups[sequence.SequenceGroup]; // Only load seqence group 0 for now (others are in other files) if (sequence.SequenceGroup == 0) { var pos = br.BaseStream.Position; sequence.Blends = LoadAnimationBlends(br, sequence, numBones); br.BaseStream.Position = pos; } else if (sequenceGroups.ContainsKey(seqGroup.Name)) { var reader = sequenceGroups[seqGroup.Name]; sequence.Blends = LoadAnimationBlends(reader, sequence, numBones); } Sequences.Add(sequence); } // Textures num = SeekToSection(br, Section.Texture, sections); var firstTextureIndex = Textures.Count; for (var i = 0; i < num; i++) { var texture = new Texture { Name = br.ReadFixedLengthString(Encoding.ASCII, 64), Flags = (TextureFlags)br.ReadInt32(), Width = br.ReadInt32(), Height = br.ReadInt32(), Index = br.ReadInt32() }; Textures.Add(texture); } // Texture data for (var i = firstTextureIndex; i < firstTextureIndex + num; i++) { var t = Textures[i]; br.BaseStream.Position = t.Index; t.Data = br.ReadBytes(t.Width * t.Height); t.Palette = br.ReadBytes(256 * 3); Textures[i] = t; } // Skins var skinSection = sections[(int)Section.Skin]; var numSkinRefs = skinSection[0]; var numSkinFamilies = skinSection[1]; br.BaseStream.Seek(skinSection[2], SeekOrigin.Begin); for (var i = 0; i < numSkinFamilies; i++) { var skin = new SkinFamily { Textures = br.ReadShortArray(numSkinRefs) }; Skins.Add(skin); } // Body parts num = SeekToSection(br, Section.BodyPart, sections); for (var i = 0; i < num; i++) { var part = new BodyPart { Name = br.ReadFixedLengthString(Encoding.ASCII, 64), NumModels = br.ReadInt32(), Base = br.ReadInt32(), ModelIndex = br.ReadInt32() }; var pos = br.BaseStream.Position; part.Models = LoadModels(br, part); br.BaseStream.Position = pos; BodyParts.Add(part); } // Attachments num = SeekToSection(br, Section.Attachment, sections); for (var i = 0; i < num; i++) { var attachment = new Attachment { Name = br.ReadFixedLengthString(Encoding.ASCII, 32), Type = br.ReadInt32(), Bone = br.ReadInt32(), Origin = br.ReadVector3(), Vectors = br.ReadVector3Array(3) }; Attachments.Add(attachment); } // Transitions // Sounds & Sound groups aren't used }
/// <inheritdoc/> public void LoadBinaryData(byte[] inData) { using (var ms = new MemoryStream(inData)) using (var br = new BinaryReader(ms)) { br.ReadUInt32(); // Signature Version = br.ReadUInt32(); Name = br.ReadMD20String(br.ReadUInt32(), br.ReadUInt32()); Flags = br.ReadUInt32(); // TODO: Implement Flags // Global Sequences UInt32 count = br.ReadUInt32(); UInt32 offset = br.ReadUInt32(); long headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { UInt32 value = br.ReadUInt32(); GlobalSequences.Add(value); } br.BaseStream.Position = headerpos; // Sequences count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Sequence seq = new M2Sequence(); seq.AnimationID = br.ReadUInt16(); seq.SubAnimationID = br.ReadUInt16(); seq.Length = br.ReadUInt32(); seq.MovingSpeed = br.ReadSingle(); seq.Flags = br.ReadUInt32(); seq.Probability = br.ReadInt16(); seq.Padding = br.ReadUInt16(); seq.MinimumRepetitions = br.ReadUInt32(); seq.MaximumRepetitions = br.ReadUInt32(); seq.BlendTime = br.ReadUInt32(); seq.BoundsMinimumExtend = new C3Vector(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); seq.BoundsMaximumExtend = new C3Vector(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); seq.BoundRadius = br.ReadSingle(); seq.NextAnimation = br.ReadInt16(); seq.aliasNext = br.ReadUInt16(); Sequences.Add(seq); } br.BaseStream.Position = headerpos; //SequencesLookups count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { SequencesLookups.Add(br.ReadInt16()); } br.BaseStream.Position = headerpos; // Bones count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Bone bone = new M2Bone(); bone.KeyBoneID = br.ReadInt32(); bone.Flags = br.ReadUInt32(); bone.ParentBone = br.ReadInt16(); bone.SubmeshID = br.ReadUInt16(); bone.CompressData[0] = br.ReadUInt16(); bone.CompressData[1] = br.ReadUInt16(); //translation M2Track translation = new M2Track(); translation.readM2Track(br); bone.translation = translation; // rotation M2Track rotation = new M2Track(); rotation.readM2Track(br); bone.rotation = rotation; // Scale M2Track scale = new M2Track(); scale.readM2Track(br); bone.scale = scale; bone.pivot = new C3Vector(br.ReadUInt32(), br.ReadUInt32(), br.ReadUInt32()); Bones.Add(bone); } br.BaseStream.Position = headerpos; // key_bone_lookup count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { KeyBoneLookup.Add(br.ReadInt16()); } br.BaseStream.Position = headerpos; // Vetices count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Vertex temp = new M2Vertex(); temp.Pos = new C3Vector(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); for (int a = 0; a < 4; a++) { temp.BoneWeights.Add(br.ReadByte()); } for (int a = 0; a < 4; a++) { temp.BoneIndices.Add(br.ReadByte()); } temp.Normal = new C3Vector(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); temp.TexCords.Add(new C2Vector(br.ReadSingle(), br.ReadSingle())); temp.TexCords.Add(new C2Vector(br.ReadSingle(), br.ReadSingle())); } br.BaseStream.Position = headerpos; // Number of Skin profiles NumberSkinProfiles = br.ReadUInt32(); // Colors count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Color temp = new M2Color(); // Color M2Track color = new M2Track(); color.readM2Track(br); temp.Color = color; // Alpha M2Track alpha = new M2Track(); alpha.readM2Track(br); temp.Alpha = alpha; Color.Add(temp); } br.BaseStream.Position = headerpos; // Textures count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Texture temp = new M2Texture(); temp.Type = br.ReadUInt32(); temp.Flags = br.ReadUInt32(); UInt32 tCount = br.ReadUInt32(); UInt32 tOffset = br.ReadUInt32(); long tHeaderpos = br.BaseStream.Position; br.BaseStream.Position = tOffset; temp.Filename = ""; for (int a = 0; a < tCount; a++) { temp.Filename += br.ReadChar(); } br.BaseStream.Position = tHeaderpos; Texture.Add(temp); } br.BaseStream.Position = headerpos; // Texture Weights count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Track temp = new M2Track(); temp.readM2Track(br); TextureWeights.Add(temp); } br.BaseStream.Position = headerpos; // UV Animations count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2TextureTransform temp = new M2TextureTransform(); M2Track translation = new M2Track(); translation.readM2Track(br); temp.Translation = translation; M2Track rotation = new M2Track(); rotation.readM2Track(br); temp.Rotation = rotation; M2Track scaling = new M2Track(); scaling.readM2Track(br); temp.Scaling = scaling; UvAnimations.Add(temp); } br.BaseStream.Position = headerpos; // Texture Replacements count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { TextureReplacements.Add(br.ReadInt16()); } br.BaseStream.Position = headerpos; // Materials count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { M2Material temp = new M2Material(); temp.Flags = br.ReadUInt16(); temp.BlendMode = br.ReadUInt16(); Materials.Add(temp); } br.BaseStream.Position = headerpos; // Bone Lookups count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { BoneLookups.Add(br.ReadUInt16()); } br.BaseStream.Position = headerpos; // Texture Units count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { TextureUnits.Add(br.ReadUInt16()); } br.BaseStream.Position = headerpos; // Texture Weights Lookups count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { TextureWeightsLookups.Add(br.ReadUInt16()); } br.BaseStream.Position = headerpos; // Animation Lookups count = br.ReadUInt32(); offset = br.ReadUInt32(); headerpos = br.BaseStream.Position; br.BaseStream.Position = offset; for (int i = 0; i < count; i++) { UvAnimationLookups.Add(br.ReadInt16()); } br.BaseStream.Position = headerpos; } }
/// <summary> /// Adds a new sequence to the list /// </summary> public void AddSequence() { Sequences.Add(new SequenceViewModel(this)); }
public void AddSequence(IMessageSequence sequence) { Sequences.Add(sequence); }
private void OnAddSequence(object x) { if (x == null) { return; } var seqType = (SequenceType)x; Sequence seq = null; switch (seqType) { case SequenceType.LastScores: var lastScores = new LastScores() { SequenceName = "LastScores", duration = 3.0m }; seq = new Sequence() { LastScores = lastScores }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.LastScores); Sequences.Add(new SequenceItemViewModel(seq.LastScores)); break; case SequenceType.Combo: var combo = new Combo() { SequenceName = "Combo", duration = 3.0m }; seq = new Sequence() { Combo = combo }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.Combo); Sequences.Add(new SequenceItemViewModel(seq.Combo)); break; case SequenceType.TextLayer: var txtLayr = new TextLayer() { SequenceName = "TextLayer", duration = 3.0m }; seq = new Sequence() { text_layer = txtLayr }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.text_layer); Sequences.Add(new SequenceItemViewModel(seq.text_layer)); break; case SequenceType.PanningLayer: var panning_layer = new PanningLayer() { SequenceName = "panning_layer", duration = 3.0m }; seq = new Sequence() { panning_layer = panning_layer }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.panning_layer); Sequences.Add(new SequenceItemViewModel(seq.panning_layer)); break; case SequenceType.RandomText: var rndText = new RandomText() { SequenceName = "RandomText", duration = 3.0m }; seq = new Sequence() { RandomText = rndText }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.RandomText); Sequences.Add(new SequenceItemViewModel(seq.RandomText)); break; case SequenceType.Animation: var attAnim = new AttractAnimation() { AnimName = "Animation", duration = 3.0m }; seq = new Sequence() { AttractAnimation = attAnim }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.AttractAnimation); Sequences.Add(new SequenceItemViewModel(seq.AttractAnimation)); break; case SequenceType.HighScores: var hiScore = new HighScores() { SequenceName = "HighScores", duration = 1.0m }; seq = new Sequence() { HighScores = hiScore }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.HighScores); Sequences.Add(new SequenceItemViewModel(seq.HighScores)); break; case SequenceType.Credits: var credits = new Credits() { SequenceName = "Credits", duration = 3.0m }; seq = new Sequence() { Credits = credits }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.Credits); Sequences.Add(new SequenceItemViewModel(seq.Credits)); break; case SequenceType.MarkupLayer: var markup = new MarkupLayer() { SequenceName = "MarkupLayer", duration = 3.0m }; seq = new Sequence() { MarkupLayer = markup }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.MarkupLayer); Sequences.Add(new SequenceItemViewModel(seq.MarkupLayer)); break; case SequenceType.ScriptedText: var scriptedText = new ScriptedText() { Name = "ScriptedText", duration = 3.0m }; seq = new Sequence() { ScriptedText = scriptedText }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.ScriptedText); Sequences.Add(new SequenceItemViewModel(seq.ScriptedText)); break; case SequenceType.GroupLayer: var groupLayer = new GroupLayer() { Name = "GroupLayer", duration = 3.0m }; seq = new Sequence() { GroupLayer = groupLayer }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.GroupLayer); Sequences.Add(new SequenceItemViewModel(seq.GroupLayer)); break; case SequenceType.MoveLayer: var moveLayer = new MoveLayer() { SequenceName = "MoveLayer", duration = 3.0m }; seq = new Sequence() { MoveLayer = moveLayer }; this.SelectedSequenceFile.SequenceYaml.Sequences.Add(seq.MoveLayer); Sequences.Add(new SequenceItemViewModel(seq.MoveLayer)); break; default: break; } }