private void SetSortKey(VerbSummaryItem pVerb, string pValue0, string pValue1) { if (pValue0 == null) { if (pValue1 == null) { pVerb.SetSortKey(pVerb.VerbName); } else { pVerb.SetSortKey(pValue1, pVerb.VerbName); } } else { if (pValue1 == null) { pVerb.SetSortKey(pValue0, pVerb.VerbName); } else { pVerb.SetSortKey(pValue0, pValue1, pVerb.VerbName); } } }
private void AppendPropSoloVerbs(VerbCollection pVerbCollection, vectorMscopethingsverbsSoloPropAnimVerb[] pVerbs) { if ((pVerbs == null) || (pVerbs.Length == 0)) { return; } List <VerbSummaryItem> propSoloVerbs = new List <VerbSummaryItem>(); foreach (vectorMscopethingsverbsSoloPropAnimVerb verbDescriptor in pVerbs) { VerbSummaryItem verb = new VerbSummaryItem(); verb.VerbName = verbDescriptor.name; verb.VerbType = "Prop Solo"; verb.ModelA = verbDescriptor.model; verb.SetSortKey(verb.ModelA, verb.VerbName); VerbSummaryItem oldItem = SearchEntry(propSoloVerbs, verb.SortKey); if (oldItem == null) { propSoloVerbs.Add(verb); } else { oldItem.Iterations++; } } pVerbCollection.PropSoloVerbs = propSoloVerbs.OrderBy(o => o.SortKey).ToList(); }
private void AppendPuppetSoloVerbs(VerbCollection pVerbCollection, vectorSoloVerb[] pVerbs) { if ((pVerbs == null) || (pVerbs.Length == 0)) { return; } List <VerbSummaryItem> puppetSoloVerbs = new List <VerbSummaryItem>(); foreach (vectorSoloVerb verbDescriptor in pVerbs) { VerbSummaryItem verb = new VerbSummaryItem(); verb.VerbName = verbDescriptor.name; verb.VerbType = "Puppet Solo"; verb.ModelA = verbDescriptor.model; verb.SetSortKey(verb.ModelA, verb.VerbName); VerbSummaryItem oldItem = SearchEntry(puppetSoloVerbs, verb.SortKey); if (oldItem == null) { puppetSoloVerbs.Add(verb); } else { oldItem.Iterations++; } } if (CompactDupVerbsByName) { puppetSoloVerbs = CompactVerbs(puppetSoloVerbs, CriteriumStringModelA, null); } pVerbCollection.PuppetSoloVerbs = puppetSoloVerbs.OrderBy(o => o.SortKey).ToList(); }
private List <VerbSummaryItem> CompactVerbs(List <VerbSummaryItem> pVerbs, string pCriterium0, string pCriterium1) { if (pVerbs == null) { return(null); } if (pVerbs.Count == 0) { return(pVerbs); } List <VerbSummaryItem> outputList = new List <VerbSummaryItem>(); while (pVerbs.Count > 0) { List <int> compactIndexes = new List <int>(); string verbName = null; for (int index = pVerbs.Count - 1; index >= 0; --index) { VerbSummaryItem verb = pVerbs[index]; if (verbName == null) { verbName = verb.VerbName.ToLower(); } else { if (verb.VerbName.ToLower() != verbName) { continue; } } compactIndexes.Add(index); } if (compactIndexes.Count == 1) { outputList.Add(pVerbs[pVerbs.Count - 1]); pVerbs.RemoveAt(pVerbs.Count - 1); continue; } outputList.Add(CompactVerb(pVerbs, compactIndexes, pCriterium0, pCriterium1)); foreach (int index in compactIndexes) { pVerbs.RemoveAt(index); } } return(outputList.OrderBy(o => o.SortKey).ToList()); }
private void AppendHeldVerbs(VerbCollection pVerbCollection, vectorHeldPropVerb[] pVerbs) { if ((pVerbs == null) || (pVerbs.Length == 0)) { return; } List <VerbSummaryItem> heldPropsVerbs = new List <VerbSummaryItem>(); foreach (vectorHeldPropVerb verbDescriptor in pVerbs) { VerbSummaryItem verb = new VerbSummaryItem(); int elementCount = verbDescriptor.ItemsElementName.Length; for (int index = 0; index < elementCount; ++index) { string value = verbDescriptor.Items[index]; switch (verbDescriptor.ItemsElementName[index]) { case ItemsChoiceType.name: verb.VerbName = value; break; case ItemsChoiceType.modelA: verb.ModelA = value; break; case ItemsChoiceType.modelB: verb.ModelB = value; break; } } verb.VerbType = "Held Prop"; verb.SetSortKey(verb.ModelB, verb.ModelA, verb.VerbName); VerbSummaryItem oldItem = SearchEntry(heldPropsVerbs, verb.SortKey); if (oldItem == null) { heldPropsVerbs.Add(verb); } else { oldItem.Iterations++; } } if (CompactDupVerbsByName) { heldPropsVerbs = CompactVerbs(heldPropsVerbs, CriteriumStringModelB, CriteriumStringModelA); } pVerbCollection.HeldPropsVerbs = heldPropsVerbs.OrderBy(o => o.SortKey).ToList(); }
private string GetCriteriumValue(VerbSummaryItem pVerb, string pCriterium) { if ((pVerb == null) || (pCriterium == null)) { return(null); } if (pCriterium == CriteriumStringModelA) { return(pVerb.ModelA); } if (pCriterium == CriteriumStringModelB) { return(pVerb.ModelB); } return(null); }
private VerbSummaryItem CompactVerb(List <VerbSummaryItem> pVerbs, List <int> pCompactIndexes, string pCriterium0, string pCriterium1) { VerbSummaryItem verb = new VerbSummaryItem() { VerbName = pVerbs[pCompactIndexes[0]].VerbName, VerbType = pVerbs[pCompactIndexes[0]].VerbType, Iterations = 0 }; List <string> criterium0Values = new List <string>(); List <string> criterium1Values = new List <string>(); for (int count = 0; count < pCompactIndexes.Count; ++count) { int verbIndex = pCompactIndexes[count]; VerbSummaryItem dupVerb = pVerbs[verbIndex]; if (dupVerb.Iterations > verb.Iterations) { verb.Iterations = dupVerb.Iterations; } string criteriumValue0 = GetCriteriumValue(dupVerb, pCriterium0); if ((criteriumValue0 != null) && (!criterium0Values.Contains(criteriumValue0))) { criterium0Values.Add(criteriumValue0); } string criteriumValue1 = GetCriteriumValue(dupVerb, pCriterium1); if ((criteriumValue1 != null) && (!criterium1Values.Contains(criteriumValue1))) { criterium1Values.Add(criteriumValue1); } } string newCriterium0Value = SetNewCriteriumValue(verb, pCriterium0, criterium0Values); string newCriterium1Value = SetNewCriteriumValue(verb, pCriterium1, criterium1Values); SetSortKey(verb, newCriterium0Value, newCriterium1Value); return(verb); }
private string SetNewCriteriumValue(VerbSummaryItem pVerb, string pCriterium, List <string> pCriteriumValues) { if (pCriterium == null) { return(null); } string newCriteriumValue = (pCriteriumValues.Count == 1) ? pCriteriumValues[0] : GetNewCriteriumValues(pCriteriumValues); if (pCriterium == CriteriumStringModelA) { pVerb.ModelA = newCriteriumValue; } else if (pCriterium == CriteriumStringModelB) { pVerb.ModelB = newCriteriumValue; } return(newCriteriumValue); }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - private VerbCollection CreateVerbsSummaryFromStateMachine(VerbCollection pVerbCollection) { string stateMachineFilePath; string stateMachineContents = null; switch (AddonSource.SourceType) { case AddonPackageSourceType.Archiver: stateMachineFilePath = StateMachineFilename; stateMachineContents = AddonSource.Archiver.ExtractArchivedFileToString(stateMachineFilePath); if (stateMachineContents == null) { return(pVerbCollection); } break; case AddonPackageSourceType.Folder: stateMachineFilePath = Path.Combine(AddonSource.SourcePath, StateMachineFilename); if (!File.Exists(stateMachineFilePath)) { return(pVerbCollection); } stateMachineContents = File.ReadAllText(stateMachineFilePath); break; } if (string.IsNullOrEmpty(stateMachineContents)) { return(pVerbCollection); } string errorText; StateMachine stateMachine = StateMachine.LoadFromString(stateMachineContents, out errorText); if (stateMachine == null) { return(pVerbCollection); } const string gaitPrefix = "gaits/"; int gaitPrefixLen = gaitPrefix.Length; const string gesturePrefix = "gestures/"; int gesturePrefixLen = gesturePrefix.Length; List <Tuple <string, string> > animationFiles = null; List <VerbSummaryItem> gaits = null; List <VerbSummaryItem> gestures = null; foreach (StateMachineNameMap nameMap in stateMachine.NameMap) { if (nameMap.Items == null) { continue; } foreach (object item in nameMap.Items) { Type transitionType = item.GetType(); if (transitionType == typeof(StateMachineNameMapState)) { break; } if (transitionType == typeof(StateMachineNameMapAnimTransition)) { StateMachineNameMapAnimTransition transition = (StateMachineNameMapAnimTransition)item; VerbSummaryItem gaitAnimation = new VerbSummaryItem(); string animationFilepath = null; for (int index = 0; index < transition.ItemsElementName.Length; ++index) { switch (transition.ItemsElementName[index]) { case TransitionsItemsChoiceType.menuPath: gaitAnimation.VerbName = (string)transition.Items[index]; break; case TransitionsItemsChoiceType.name: animationFilepath = ((string)transition.Items[index])?.ToLower(); break; } } if ((gaitAnimation.VerbName?.ToLower() ?? "").StartsWith(gaitPrefix)) { gaitAnimation.VerbName = gaitAnimation.VerbName?.Remove(0, gaitPrefixLen); gaitAnimation.VerbType = "Gait Animation"; if (animationFiles == null) { animationFiles = GetAnimationFiles(); } gaitAnimation.ModelA = GetAnimationPuppetModel(animationFilepath, animationFiles); gaitAnimation.SetSortKey(gaitAnimation.ModelA, gaitAnimation.VerbName); if (gaits == null) { gaits = new List <VerbSummaryItem>(); } VerbSummaryItem oldItem = SearchEntry(gaits, gaitAnimation.SortKey); if (oldItem == null) { gaits.Add(gaitAnimation); } else { oldItem.Iterations++; } } continue; } if (transitionType == typeof(StateMachineNameMapGestureTransition)) { StateMachineNameMapGestureTransition transition = (StateMachineNameMapGestureTransition)item; string name = transition.menuPath; if ((transition.menuPath?.ToLower() ?? "").StartsWith(gesturePrefix)) { name = name.Remove(0, gesturePrefixLen); } VerbSummaryItem gestureAnimation = new VerbSummaryItem() { VerbName = name, VerbType = "Gesture Animation" }; string animationFilepath = transition.name; if (animationFiles == null) { animationFiles = GetAnimationFiles(); } gestureAnimation.ModelA = GetAnimationPuppetModel(animationFilepath, animationFiles); gestureAnimation.SetSortKey(gestureAnimation.ModelA, gestureAnimation.VerbName); if (gestures == null) { gestures = new List <VerbSummaryItem>(); } VerbSummaryItem oldItem = SearchEntry(gestures, gestureAnimation.SortKey); if (oldItem == null) { gestures.Add(gestureAnimation); } else { oldItem.Iterations++; } } } } if (CompactDupVerbsByName) { gaits = CompactVerbs(gaits, CriteriumStringModelA, null); gestures = CompactVerbs(gestures, CriteriumStringModelA, null); } if (gaits != null) { pVerbCollection.Gaits = gaits.OrderBy(o => o.SortKey).ToList(); } if (gestures != null) { pVerbCollection.Gestures = gestures.OrderBy(o => o.SortKey).ToList(); } return(pVerbCollection); }
private void AppendPuppetMutualVerbs(VerbCollection pVerbCollection, vectorMutualVerb[] pVerbs, vectorMutualStemVerb[] pStemVerbs) { bool anyMutualVerb = (pVerbs != null) && (pVerbs.Length > 0); bool anyMutualStemVerb = ((pStemVerbs != null) && (pStemVerbs.Length > 0)); if (!anyMutualVerb && !anyMutualStemVerb) { return; } List <VerbSummaryItem> puppetMutualVerbs = null; if (anyMutualVerb) { puppetMutualVerbs = new List <VerbSummaryItem>(); foreach (vectorMutualVerb verbDescriptor in pVerbs) { VerbSummaryItem verb = new VerbSummaryItem(); verb.VerbName = verbDescriptor.name; verb.VerbType = "Puppets Interaction"; verb.ModelA = verbDescriptor.modelA; verb.ModelB = verbDescriptor.modelB; verb.SetSortKey(verb.ModelA, verb.ModelB, verb.VerbName); VerbSummaryItem oldItem = SearchEntry(puppetMutualVerbs, verb.SortKey); if (oldItem == null) { puppetMutualVerbs.Add(verb); } else { oldItem.Iterations++; } } } if (anyMutualStemVerb) { if (puppetMutualVerbs == null) { puppetMutualVerbs = new List <VerbSummaryItem>(); } foreach (vectorMutualStemVerb verbDescriptor in pStemVerbs) { VerbSummaryItem verb = new VerbSummaryItem(); verb.VerbName = verbDescriptor.name; verb.VerbType = "Puppets Interaction"; verb.SetSortKey(null, null, verb.VerbName); VerbSummaryItem oldItem = SearchEntry(puppetMutualVerbs, verb.SortKey); if (oldItem == null) { puppetMutualVerbs.Add(verb); } else { oldItem.Iterations++; } } } if (CompactDupVerbsByName) { puppetMutualVerbs = CompactVerbs(puppetMutualVerbs, CriteriumStringModelA, CriteriumStringModelB); } pVerbCollection.PuppetMutualVerbs = puppetMutualVerbs.OrderBy(o => o.SortKey).ToList(); }