Пример #1
0
        private object ResolveEntityReference(string askingChunkFourCC, DataDescriptorField templateProperty, int index, Scene scene)
        {
            switch (templateProperty.ReferenceType)
            {
                case ReferenceTypes.Room:
                    // Some things will specify a Room index of 255 for "This isn't Used", so we're going to special-case handle that.
                    if (index == 0xFF)
                        return null;

                    if (index < m_map.Rooms.Count)
                    {
                        return m_map.Rooms[index];
                    }
                    else
                    {
                        WLog.Warning(LogCategory.EntityLoading, null, "Chunk {0} requested reference for room but index is out of range. (Property Name: {1}, Index: {2})", askingChunkFourCC, templateProperty.FieldName, index);
                    }
                    return null;

                case ReferenceTypes.FourCC:
                    // Get an (ordered) list of all chunks of that type.
                    List<RawMapEntity> potentialRefs = new List<RawMapEntity>();
                    foreach (var entity in m_entityData[scene])
                    {
                        if (entity.FourCC == templateProperty.ReferenceFourCCType)
                            potentialRefs.Add(entity);
                    }

                    // There's an edge-case here where some maps omit an entity (such as Fairy01 not having a Virt chunk) but use index 0 (Fairy01's Pale chunk)
                    // and so it was finding no potentialRefs
                    if (index < potentialRefs.Count)
                    {
                        return potentialRefs[index];
                    }
                    else
                    {
                        WLog.Warning(LogCategory.EntityLoading, null, "Chunk {0} requested reference for property {1} but index ({2}) is out of range.", askingChunkFourCC, templateProperty.FieldName, index);
                    }
                    return null;
            }

            return null;
        }
Пример #2
0
        private object GetDefaultValue(DataDescriptorField templateProperty)
        {
            if(templateProperty.DefaultValue == null)
            {
                switch (templateProperty.FieldType)
                {
                    case PropertyType.Byte: return (byte)0;
                    case PropertyType.Short: return (short)0;
                    case PropertyType.Int32: return (int)0;
                    case PropertyType.Float: return (float)0;
                    case PropertyType.Bool: return (bool)false;
                    case PropertyType.FixedLengthString: return (string)"";
                    case PropertyType.String: return (string)"";
                    case PropertyType.Vector2: return Vector2.Zero;
                    case PropertyType.Vector3: return Vector3.Zero;
                    case PropertyType.Color24: return new Color24(0, 0, 0);
                    case PropertyType.Color32: return new Color32(0, 0, 0, 0);
                    case PropertyType.Int32BitField: return (int)0;
                    case PropertyType.Bits:
                    case PropertyType.ObjectReferenceArray:
                    case PropertyType.Quaternion:
                    case PropertyType.Vector3Byte:
                    case PropertyType.ObjectReferenceShort:
                    case PropertyType.ObjectReference:
                    case PropertyType.XYZRotation:
                    case PropertyType.XYRotation:
                    case PropertyType.YRotation:
                    case PropertyType.Enum:
                    case PropertyType.None:
                    default:
                        return null;
                }
            }

            switch (templateProperty.FieldType)
            {
                case PropertyType.Byte: return (byte)templateProperty.DefaultValue;
                case PropertyType.Short: return (short)templateProperty.DefaultValue;
                case PropertyType.Int32: return (int)templateProperty.DefaultValue;
                case PropertyType.Float: return (float)templateProperty.DefaultValue;
                case PropertyType.Bool: return (bool)templateProperty.DefaultValue;
                case PropertyType.FixedLengthString: return (string)templateProperty.DefaultValue;
                case PropertyType.String: return (string)templateProperty.DefaultValue;
                case PropertyType.Vector2: return (Vector2)templateProperty.DefaultValue;
                case PropertyType.Vector3: return (Vector3)templateProperty.DefaultValue;
                case PropertyType.Color24: return (Color24)templateProperty.DefaultValue;
                case PropertyType.Color32: return (Color32)templateProperty.DefaultValue;
                case PropertyType.Int32BitField: return (int)templateProperty.DefaultValue;
                case PropertyType.Bits:
                case PropertyType.ObjectReferenceArray:
                case PropertyType.Quaternion:
                case PropertyType.Vector3Byte:
                case PropertyType.ObjectReferenceShort:
                case PropertyType.ObjectReference:
                case PropertyType.XYZRotation:
                case PropertyType.XYRotation:
                case PropertyType.YRotation:
                case PropertyType.Enum:
                case PropertyType.None:
                default:
                    return (object)templateProperty.DefaultValue;
            }
        }