private static bool VerifyTransformRecords ( IEnumerable <TransformSerializer> sourceRecords, IEnumerable <string> validParentNames, List <TransformSerializer> validRecords, List <DynamicsSetup.ParseMessage> errors ) { var newValidRecords = new List <TransformSerializer>(sourceRecords.Count()); foreach (var sourceRecord in sourceRecords) { DynamicsSetup.ParseMessage error = null; var isValidRecord = VerifyTransformRecord(sourceRecord, validParentNames, out error); if (isValidRecord) { if (newValidRecords.Any(item => item.name == sourceRecord.name)) { error = new DynamicsSetup.ParseMessage(sourceRecord.name + " : 名前が重複します"); isValidRecord = false; } } if (isValidRecord) { newValidRecords.Add(sourceRecord); } else { errors.Add(error); } } validRecords.AddRange(newValidRecords); return(sourceRecords.Count() == newValidRecords.Count); }
private static bool VerifyTransformRecord ( TransformSerializer transformSerializer, IEnumerable <string> validParentNames, out DynamicsSetup.ParseMessage error ) { error = null; var objectName = transformSerializer.name; if (objectName.Length == 0) { // Todo: Need more details... error = new DynamicsSetup.ParseMessage("コライダー名が指定されていないものがあります"); } var parentName = transformSerializer.parentName; if (parentName.Length == 0) { error = new DynamicsSetup.ParseMessage(objectName + " : 親名が指定されていません"); } else if (!validParentNames.Contains(parentName)) { error = new DynamicsSetup.ParseMessage(objectName + " : 親が見つかりません: " + parentName); } return(error == null); }
private static bool VerifyColliderRecords ( IEnumerable <IColliderSerializer> colliderRecords, GameObject rootObject, IEnumerable <string> validParentNames, List <IColliderSerializer> validRecords, List <DynamicsSetup.ParseMessage> errors ) { var newValidRecords = new List <IColliderSerializer>(colliderRecords.Count()); foreach (var sourceRecord in colliderRecords) { DynamicsSetup.ParseMessage error = null; var objectName = sourceRecord.GetBaseInfo().transform.name; var isValidRecord = true; if (!VerifyTransformRecord(sourceRecord.GetBaseInfo().transform, validParentNames, out error)) { isValidRecord = false; } var linkedRendererName = sourceRecord.GetLinkedRendererName(); if (!string.IsNullOrEmpty(linkedRendererName) && rootObject.FindChildComponentByName <Renderer>(linkedRendererName) == null) { error = new DynamicsSetup.ParseMessage(objectName + " : linkedRendererが見つかりません: " + linkedRendererName); isValidRecord = false; } if (newValidRecords.Any(item => item.GetBaseInfo().transform.name == objectName)) { error = new DynamicsSetup.ParseMessage(objectName + " : 名前が重複します"); isValidRecord = false; } if (isValidRecord) { newValidRecords.Add(sourceRecord); } else { errors.Add(error); } } validRecords.AddRange(newValidRecords); return(colliderRecords.Count() == newValidRecords.Count); }
#pragma warning restore 0649 // Parsing and verification private static IEnumerable <IColliderSerializer> SerializeColliderRecords ( IEnumerable <TextRecordParsing.Record> sourceRecords, List <DynamicsSetup.ParseMessage> errorRecords ) { var serializerClasses = new Dictionary <string, System.Type> { { SphereColliderToken, typeof(SphereColliderSerializer) }, { CapsuleColliderToken, typeof(CapsuleColliderSerializer) }, { PanelColliderToken, typeof(PanelColliderSerializer) }, }; var colliderSerializers = new List <IColliderSerializer>(sourceRecords.Count()); foreach (var sourceRecord in sourceRecords) { IColliderSerializer newColliderInfo = null; DynamicsSetup.ParseMessage error = null; var baseInfo = DynamicsSetup.SerializeObjectFromStrings <ColliderSerializerBaseInfo>(sourceRecord.Items, null, ref error); if (baseInfo != null) { System.Type serializerType; if (serializerClasses.TryGetValue(baseInfo.colliderType, out serializerType)) { newColliderInfo = DynamicsSetup.SerializeObjectFromStrings( serializerType, sourceRecord.Items, "linkedRenderer", ref error) as IColliderSerializer; } else { error = new DynamicsSetup.ParseMessage("Invalid collider type: " + baseInfo.colliderType, sourceRecord.Items); } } if (newColliderInfo != null) { colliderSerializers.Add(newColliderInfo); } else { errorRecords.Add(error); } } return(colliderSerializers); }
// Verification private static bool VerifyPivotRecords ( IEnumerable <PivotSerializer> sourceRecords, IEnumerable <string> validParentNames, List <PivotSerializer> validRecords, List <DynamicsSetup.ParseMessage> errors ) { var newValidRecords = new List <PivotSerializer>(sourceRecords.Count()); foreach (var sourceRecord in sourceRecords) { DynamicsSetup.ParseMessage error = null; if (sourceRecord.name.Length == 0) { // Todo: Need more details... error = new DynamicsSetup.ParseMessage("名前が指定されていない基点オブジェクトがあります"); } var parentName = sourceRecord.parentName; if (parentName.Length == 0) { error = new DynamicsSetup.ParseMessage(sourceRecord.name + " : 親名が指定されていません"); } else if (!validParentNames.Contains(parentName)) { error = new DynamicsSetup.ParseMessage(sourceRecord.name + " : 親が見つかりません: " + parentName); } if (error == null) { newValidRecords.Add(sourceRecord); } else { errors.Add(error); } } validRecords.AddRange(newValidRecords); return(sourceRecords.Count() == newValidRecords.Count()); }
private static IEnumerable <SpringBoneSerializer> SerializeSpringBoneRecords ( IEnumerable <TextRecordParsing.Record> sourceRecords, List <DynamicsSetup.ParseMessage> errorRecords ) { var validRecords = new List <SpringBoneSerializer>(sourceRecords.Count()); foreach (var sourceRecord in sourceRecords) { var itemQueue = sourceRecord.ToQueue(); SpringBoneBaseSerializer newBaseRecord = null; DynamicsSetup.ParseMessage error = null; try { newBaseRecord = itemQueue.DequeueObject <SpringBoneBaseSerializer>(); } catch (System.Exception exception) { error = new DynamicsSetup.ParseMessage("Error building SpringBoneBaseSerializer", sourceRecord.Items, exception.ToString()); } if (newBaseRecord != null) { // The rest of the queue should be collider names var colliderNames = new List <string>(itemQueue).Where(item => item.Length > 0); var newRecord = new SpringBoneSerializer { baseData = newBaseRecord, colliderNames = colliderNames.ToArray() }; validRecords.Add(newRecord); } else { errorRecords.Add(error); } } return(validRecords); }
#pragma warning restore 0649 // Object serialization private static IEnumerable <PivotSerializer> SerializePivotRecords ( IEnumerable <TextRecordParsing.Record> sourceRecords, List <DynamicsSetup.ParseMessage> errorRecords ) { var validRecords = new List <PivotSerializer>(sourceRecords.Count()); foreach (var sourceRecord in sourceRecords) { DynamicsSetup.ParseMessage error = null; var newRecord = DynamicsSetup.SerializeObjectFromStrings <PivotSerializer>(sourceRecord.Items, null, ref error); if (newRecord != null) { validRecords.Add(newRecord); } else { errorRecords.Add(error); } } return(validRecords); }
private static bool VerifySpringBoneRecords ( IEnumerable <SpringBoneSerializer> sourceRecords, IEnumerable <string> validBoneNames, IEnumerable <string> validPivotNames, IEnumerable <string> validColliderNames, List <SpringBoneSerializer> validRecords, out bool hasMissingColliders, List <DynamicsSetup.ParseMessage> errors ) { hasMissingColliders = false; var newValidRecords = new List <SpringBoneSerializer>(sourceRecords.Count()); foreach (var sourceRecord in sourceRecords) { DynamicsSetup.ParseMessage error = null; var baseData = sourceRecord.baseData; if (baseData.boneName.Length == 0) { // Todo: Need more details... error = new DynamicsSetup.ParseMessage("名前が指定されていない基点オブジェクトがあります"); } else if (!validBoneNames.Contains(baseData.boneName)) { error = new DynamicsSetup.ParseMessage(baseData.boneName + " : オブジェくトが見つかりません"); } var pivotName = baseData.pivotName; if (pivotName.Length == 0) { error = new DynamicsSetup.ParseMessage(baseData.boneName + " : 基点名が指定されていません"); } else if (!validPivotNames.Contains(pivotName)) { error = new DynamicsSetup.ParseMessage(baseData.boneName + " : 基点オブジェクトが見つかりません: " + pivotName); } var missingColliders = sourceRecord.colliderNames .Where(name => !validColliderNames.Contains(name)); if (missingColliders.Any()) { // Missing colliders are just a warning hasMissingColliders = true; Debug.LogWarning( baseData.boneName + " : コライダーが見つかりません:\n" + string.Join(" ", missingColliders.ToArray())); } if (error == null) { newValidRecords.Add(sourceRecord); } else { errors.Add(error); } } validRecords.AddRange(newValidRecords); return(sourceRecords.Count() == newValidRecords.Count()); }