예제 #1
0
        public static void SpawnObject(int objectId)
        {
            if (objectId == 0)
            {
                return;
            }

            ProjectData.ObjectsAreChanged = true;

            var        transforms = new Dictionary <int, TransformDT>();
            GameObject gameObject = GameStateData.GetPrefabGameObject(objectId);
            int        id         = gameObject.GetComponent <ObjectId>().Id;

            transforms.Add(id, _spawnView.transform.ToTransformDT());

            SpawnInitParams param = new SpawnInitParams
            {
                IdObject   = objectId,
                IdLocation = ProjectData.SceneId,
                Transforms = transforms
            };

            if (ParentManager.Instance != null && ParentManager.Instance.ParentCommand == ParentCommand.SetNew)
            {
                param.ParentId = ParentManager.Instance.GetSelectedParent().Id;
            }

            ICommand command = new SpawnCommand(param);

            command.Execute();
        }
예제 #2
0
        private static void CreateSpawnEntity(ObjectDto o, int locationId, int?parentId = null)
        {
            bool         embedded     = false;
            PrefabObject prefabObject = WorldData.WorldStructure.Objects.GetById(o.ObjectId);

            if (prefabObject != null)
            {
                embedded = prefabObject.Embedded;
            }

            SpawnInitParams param = new SpawnInitParams
            {
                IdLocation = locationId,
                IdInstance = o.InstanceId,
                IdObject   = o.ObjectId,
                IdServer   = 0,
                Name       = o.InstanceId.ToString(),
                ParentId   = parentId
            };

            if (o.Data != null)
            {
                param.Transforms = o.Data.Transform;
            }

            Spawner.Instance.SpawnAsset(param);
        }
예제 #3
0
        public void SpawnAsset(SpawnInitParams paramObject, int idPhoton)
        {
            Contexts contexts = Contexts.sharedInstance;
            var      entity   = contexts.game.CreateEntity();

            entity.AddSpawnAsset(paramObject, idPhoton);
        }
예제 #4
0
        /// <summary>
        /// Spawn object with full defined transform
        /// </summary>
        /// <param name="objectId">Object Id</param>
        /// <param name="targetTransform">Transform which define object's position, rotation and scale</param>
        public void SpawnObject(int objectId, Transform targetTransform)
        {
            if (objectId == 0)
            {
                return;
            }

            ProjectData.ObjectsAreChanged = true;

            var transforms    = new Dictionary <int, TransformDT>();
            var prefabGo      = GameStateData.GetPrefabGameObject(objectId);
            var rootId        = prefabGo.GetComponent <ObjectId>().Id;
            var rootTransform = targetTransform.ToTransformDT();

            transforms.Add(rootId, rootTransform);

            var spawnParams = new SpawnInitParams()
            {
                IdObject   = objectId,
                IdLocation = ProjectData.SceneId,
                Transforms = transforms
            };

            if (ParentManager.Instance != null && ParentManager.Instance.ParentCommand == ParentCommand.SetNew)
            {
                spawnParams.ParentId = ParentManager.Instance.GetSelectedParent().Id;
            }

            ICommand command = new SpawnCommand(spawnParams);

            command.Execute();
        }
예제 #5
0
        public SpawnInitParams GetSpawnInitParams()
        {
            Dictionary <int, TransformDT> transforms = new Dictionary <int, TransformDT>();
            var objectsIds = RootGameObject.GetComponentsInChildren <ObjectId>();

            foreach (var objectId in objectsIds)
            {
                if (!transforms.ContainsKey(objectId.Id))
                {
                    transforms.Add(objectId.Id, objectId.gameObject.transform.ToTransformDT());
                }
            }

            var spawn = new SpawnInitParams
            {
                ParentId   = _parentId,
                IdLocation = WorldData.WorldLocationId,
                IdInstance = Id,
                IdObject   = IdObject,
                IdServer   = IdServer,
                Name       = Name,
                Transforms = transforms
            };

            return(spawn);
        }
예제 #6
0
        public void SpawnAssetRpc(string paramObject, int idPhoton)
        {
            SpawnInitParams param    = paramObject.JsonDeserialize <SpawnInitParams>();
            Contexts        contexts = Contexts.sharedInstance;
            var             entity   = contexts.game.CreateEntity();

            entity.AddSpawnAsset(param, idPhoton);
        }
예제 #7
0
 public void SpawnAsset(SpawnInitParams param)
 {
     if (Settings.Instance().Multiplayer)
     {
         int idPhoton = PhotonNetwork.AllocateViewID();
         photonView.RPC("SpawnAssetRpc", PhotonTargets.All, param.ToJson(), idPhoton);
     }
     else
     {
         SpawnAsset(param, 0);
     }
 }
예제 #8
0
        public void SaveObject(SpawnInitParams param)
        {
            int id = 0;

            if (param.IdLocation != 0)
            {
                id = GameStateData.GetNextObjectIdInLocation();
            }

            _saveId      = id;
            _saveIdGroup = param.IdLocation;
        }
예제 #9
0
        public void SpawnAsset(SpawnInitParams paramObject, int idPhoton)
        {
            if (GameStateData.GetWrapperCollection().Exist(paramObject.IdInstance))
            {
                Debug.Log($"Object with id {paramObject.IdInstance} already exist!");
                return;
            }

            Contexts contexts = Contexts.sharedInstance;
            var      entity   = contexts.game.CreateEntity();

            entity.AddSpawnAsset(paramObject, idPhoton);
        }
예제 #10
0
        /// <summary>
        ///     Initialize object in platform
        /// </summary>
        /// <param name="idObject">Object type id. Used for save.</param>
        /// <param name="spawnInitParams">Parameters for spawn</param>
        /// <param name="spawnedGameObject">Game object for init</param>
        public static void InitObject(int idObject, SpawnInitParams spawnInitParams, GameObject spawnedGameObject, Config config)
        {
            //var photonView = AddPhoton(spawnedGameObject, spawnInitParams.spawnAsset.IdPhoton);
            PhotonView photonView     = AddPhoton(spawnedGameObject, 0);
            GameObject gameObjectLink = spawnedGameObject;
            int        idLocation     = spawnInitParams.IdLocation;
            int        idServer       = spawnInitParams.IdServer;
            int        idInstance     = spawnInitParams.IdInstance;
            bool       embedded       = spawnInitParams.Embedded;
            string     name           = spawnInitParams.Name;
            var        parentId       = spawnInitParams.ParentId;

            ObjectController parent = null;

            if (parentId != null)
            {
                parent = GameStateData.GetObjectInLocation(parentId.Value);
            }

            WrappersCollection wrappersCollection = null;

            if (idLocation != 0)
            {
                wrappersCollection = GameStateData.GetWrapperCollection();
            }

            InitObjectParams initObjectParams = new InitObjectParams
            {
                Id                 = idInstance,
                IdObject           = idObject,
                IdLocation         = idLocation,
                IdServer           = idServer,
                Asset              = gameObjectLink,
                Name               = name,
                Photonview         = photonView,
                RootGameObject     = spawnedGameObject,
                WrappersCollection = wrappersCollection,
                Parent             = parent,
                Embedded           = embedded,
                Config             = config
            };

            var newController = new ObjectController(initObjectParams);

            ObjectControllerCreated?.Invoke(newController);
        }
예제 #11
0
    private void InitObjectsOnScene()
    {
        var owdObjects = FindObjectsOfType <TMObjectDescriptor>();

        foreach (var owdObject in owdObjects)
        {
            SpawnInitParams spawn = new SpawnInitParams
            {
                Name       = owdObject.Name,
                IdLocation = 1,
                IdInstance = 0,
                IdObject   = 0,
                IdServer   = 0
            };

            Helper.InitObject(0, spawn, owdObject.gameObject, null);
        }
    }
예제 #12
0
        private static void CreateSpawnEntity(ObjectDto o, int locationId, int?parentId = null)
        {
            bool         embedded     = false;
            PrefabObject prefabObject = ProjectData.ProjectStructure.Objects.GetById(o.ObjectId);

            if (prefabObject != null)
            {
                embedded = prefabObject.Embedded;
            }
            else
            {
                Debug.LogError("Object is not contains in project structure");
            }

            SpawnInitParams param = new SpawnInitParams
            {
                IdLocation = locationId,
                IdInstance = o.InstanceId,
                IdObject   = o.ObjectId,
                IdServer   = o.Id,
                Name       = o.Name,
                ParentId   = parentId,
                Embedded   = embedded
            };

            if (o.Data != null)
            {
                param.Transforms = o.Data.Transform;
                param.Joints     = o.Data.JointData;
            }

            Spawner.Instance.SpawnAsset(param);

            foreach (ObjectDto dto in o.SceneObjects)
            {
                CreateSpawnEntity(dto, locationId, o.InstanceId);
            }
        }
예제 #13
0
        /// <summary>
        /// Spawn object in position
        /// </summary>
        /// <param name="objectId">Object Id</param>
        /// <param name="position">Object's spawn position</param>
        public void SpawnObject(int objectId, Vector3 position)
        {
            if (objectId == 0)
            {
                return;
            }

            ProjectData.ObjectsAreChanged = true;

            var transforms    = new Dictionary <int, TransformDT>();
            var prefabGo      = GameStateData.GetPrefabGameObject(objectId);
            var rootId        = prefabGo.GetComponent <ObjectId>().Id;
            var rootTransform = new TransformDT()
            {
                PositionDT = new Vector3DT(position),
                RotationDT = new QuaternionDT(Quaternion.identity),
                ScaleDT    = new Vector3DT(Vector3.one)
            };

            transforms.Add(rootId, rootTransform);

            var spawnParams = new SpawnInitParams()
            {
                IdObject   = objectId,
                IdLocation = ProjectData.SceneId,
                Transforms = transforms
            };

            if (ParentManager.Instance != null && ParentManager.Instance.ParentCommand == ParentCommand.SetNew)
            {
                spawnParams.ParentId = ParentManager.Instance.GetSelectedParent().Id;
            }

            ICommand command = new SpawnCommand(spawnParams);

            command.Execute();
        }
예제 #14
0
 /// <summary>
 /// Modify object command
 /// </summary>
 /// <param name="spawnInitParams"></param>
 public SpawnCommand(SpawnInitParams spawnInitParams)
 {
     _spawnInitParams = spawnInitParams;
     CommandsManager.AddCommand(this);
 }
예제 #15
0
 public void SpawnAsset(SpawnInitParams param)
 {
     SpawnAsset(param, 0);
 }