Esempio n. 1
0
        public ObjectCamera(ArrayEntry bymlEntry, out string objID)
        {
            objID = string.Empty;

            foreach (var parameter in bymlEntry.IterDictionary())
            {
                if (parameter.Key == "Id")
                {
                    string id = parameter.Parse();

                    string[] idParts = id.Split('_');

                    if (idParts.Length > 1)
                    {
                        idSuffix = idParts[1];
                    }

                    objID = idParts[0];
                }
                else
                {
                    dynamic data = parameter.Parse();

                    if (data is Dictionary <string, dynamic> dict && dict.Count == 3 && dict.ContainsKey("X") && dict.ContainsKey("Y") && dict.ContainsKey("Z"))
                    {
                        data = new Vector3(
                            dict["X"] / 100,
                            dict["Y"] / 100,
                            dict["Z"] / 100
                            );
                    }

                    properties.Add(parameter.Key, data);
                }
            }
        }
Esempio n. 2
0
        private static ObjectInfo GetObjectInfo(ref ArrayEntry objectEntry, SM3DWorldZone zone)
        {
            Dictionary <string, DictionaryEntry> properties = new Dictionary <string, DictionaryEntry>();
            Dictionary <string, DictionaryEntry> links      = new Dictionary <string, DictionaryEntry>();

            ObjectInfo info = new ObjectInfo();

            foreach (DictionaryEntry entry in objectEntry.IterDictionary())
            {
                switch (entry.Key)
                {
                case "Comment":
                case "IsLinkDest":
                case "LayerConfigName":
#if ODYSSEY
                case "SrcUnitLayerList":
                case "PlacementFileName":
                case "comment":
#endif
                    break;     //ignore these

                case "Id":
                    info.ID = entry.Parse();
                    break;

                case "Links":
                    foreach (DictionaryEntry linkEntry in entry.IterDictionary())
                    {
                        links.Add(linkEntry.Key, linkEntry);
                    }
                    break;

                case "ModelName":
                    info.ModelName = entry.Parse() ?? "";
                    break;

                case "Rotate":
                    dynamic _data = entry.Parse();
                    info.Rotation = new Vector3(
                        _data["X"],
                        _data["Y"],
                        _data["Z"]
                        );
                    break;

                case "Scale":
                    _data      = entry.Parse();
                    info.Scale = new Vector3(
                        _data["X"],
                        _data["Y"],
                        _data["Z"]
                        );
                    break;

                case "Translate":
                    _data         = entry.Parse();
                    info.Position = new Vector3(
                        _data["X"] / 100f,
                        _data["Y"] / 100f,
                        _data["Z"] / 100f
                        );
                    break;

                case "UnitConfigName":
                    info.ObjectName = entry.Parse();
                    break;

                case "UnitConfig":
                    _data = entry.Parse();

                    info.DisplayTranslation = new Vector3(
                        _data["DisplayTranslate"]["X"] / 100f,
                        _data["DisplayTranslate"]["Y"] / 100f,
                        _data["DisplayTranslate"]["Z"] / 100f
                        );
                    info.DisplayRotation = new Vector3(
                        _data["DisplayRotate"]["X"],
                        _data["DisplayRotate"]["Y"],
                        _data["DisplayRotate"]["Z"]
                        );
                    info.DisplayScale = new Vector3(
                        _data["DisplayScale"]["X"],
                        _data["DisplayScale"]["Y"],
                        _data["DisplayScale"]["Z"]
                        );
                    info.ClassName = _data["ParameterConfigName"];
                    break;

                default:
                    if (!properties.ContainsKey(entry.Key))
                    {
                        properties.Add(entry.Key, entry);
                    }
                    break;
                }
            }

            info.PropertyEntries = properties;
            info.LinkEntries     = links;
            return(info);
        }