Exemple #1
0
        public GameObject ImportSdf(string filename, Transform parent, Vector3 localPosition, Quaternion rotation)
        {
            if (_sdfCache.ContainsKey(filename))
            {
                var obj = Instantiate(_sdfCache[filename], parent);
                obj.transform.localPosition = localPosition;
                obj.transform.localRotation = rotation;
                return(obj);
            }

            var sdf = SdfObjectParser.LoadSdf(filename);

            var sdfObject = new GameObject(sdf.Name);

            sdfObject.transform.parent        = parent;
            sdfObject.transform.localPosition = localPosition;
            sdfObject.transform.rotation      = rotation;

            var partDict = new Dictionary <string, GameObject> {
                { "WORLD", sdfObject }
            };

            foreach (var sdfPart in sdf.Parts)
            {
                var partObj = ImportGeo(sdfPart.Name + ".geo", null, _3DObjectPrefab);
                partObj.transform.parent        = partDict[sdfPart.ParentName].transform;
                partObj.transform.localPosition = sdfPart.Position;
                partObj.transform.localRotation = Quaternion.identity;
                partDict.Add(sdfPart.Name, partObj);
            }

            _sdfCache.Add(filename, sdfObject);
            return(sdfObject);
        }
Exemple #2
0
        public GameObject ImportSdf(string filename, Transform parent, Vector3 localPosition, Quaternion rotation, bool canWreck, out Sdf sdf, out GameObject wreckedPart)
        {
            wreckedPart = null;
            sdf         = null;

            if (!_sdfCache.TryGetValue(filename, out sdf))
            {
                sdf = SdfObjectParser.LoadSdf(filename, canWreck);
                _sdfCache.Add(filename, sdf);
            }

            GameObject sdfObject = new GameObject(sdf.Name);

            sdfObject.transform.parent        = parent;
            sdfObject.transform.localPosition = localPosition;
            sdfObject.transform.rotation      = rotation;

            Dictionary <string, GameObject> partDict = new Dictionary <string, GameObject> {
                { "WORLD", sdfObject }
            };

            foreach (SdfPart sdfPart in sdf.Parts)
            {
                GameObject partObj = LoadSdfPart(sdfPart, partDict[sdfPart.ParentName].transform);
                if (partObj == null)
                {
                    continue;
                }

                partObj.SetActive(true);
                partDict.Add(sdfPart.Name, partObj);
            }

            if (canWreck && sdf.WreckedPart != null)
            {
                wreckedPart = LoadSdfPart(sdf.WreckedPart, partDict[sdf.WreckedPart.ParentName].transform);
                if (wreckedPart != null)
                {
                    wreckedPart.SetActive(false);
                    Rigidbody rigidBody = sdfObject.AddComponent <Rigidbody>();
                    rigidBody.isKinematic = true;
                }
            }

            return(sdfObject);
        }