コード例 #1
0
        public void UpdateObject(ObjectDto objectDto)
        {
            GameEntity entityObject = GameStateData.GetEntity(objectDto.InstanceId);

            entityObject.name.Value = objectDto.Name;
            OnUpdateObject?.Invoke(entityObject, objectDto);
        }
コード例 #2
0
ファイル: Helper.cs プロジェクト: RobboVariwn/VarBot
        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();
        }
コード例 #3
0
ファイル: Helper.cs プロジェクト: RobboVariwn/VarBot
        public static void SpawnSceneObjects(int newSceneId, int oldSceneId)
        {
            if (newSceneId == oldSceneId)
            {
                _logger.Info($"Objects for scene {newSceneId} already loaded");
                return;
            }

            _logger.Info($"Loading objects for scene {newSceneId}");
            ParentManager.Instance.ParentCommand = ParentCommand.None;

            if (oldSceneId != 0 && LoaderAdapter.LoaderType == typeof(ApiLoader))
            {
                AMQPClient.UnSubscribeLogicChange(oldSceneId);
                AMQPClient.UnSubscribeCompilationError(oldSceneId);
                AMQPClient.UnSubscribeObjectChange(oldSceneId);
            }

            GameStateData.ClearObjects();
            ProjectData.ObjectsAreChanged = false;
            Data.ServerData.Scene location      = ProjectData.ProjectStructure.Scenes.GetProjectScene(newSceneId);
            LogicInstance         logicInstance = new LogicInstance(newSceneId);

            GameStateData.RefreshLogic(logicInstance, location.AssemblyBytes);
            CreateSpawnEntities(location.SceneObjects, newSceneId);

            if (LoaderAdapter.LoaderType == typeof(ApiLoader))
            {
                AMQPClient.SubscribeLogicChange(newSceneId);
                AMQPClient.SubscribeCompilationError(newSceneId);
                AMQPClient.SubscribeObjectChange(ProjectData.ProjectId, newSceneId);
            }
        }
コード例 #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
        private IEnumerator RestoreJointsOnNextFrame(Dictionary <int, JointData> joints)
        {
            JointBehaviour.IsTempConnectionCreated = true;

            yield return(new WaitForEndOfFrame());

            Debug.Log("<Color=Olive>Restore joints started!</Color>");

            var jointsScene = FindObjectsOfType <JointBehaviour>();

            foreach (JointBehaviour joint in jointsScene)
            {
                joint.UnLockAndDisconnectPoints();
            }

            foreach (var joint in joints)
            {
                int              instanseId       = joint.Key;
                JointData        jointData        = joint.Value;
                ObjectController objectController = GameStateData.GetObjectInLocation(instanseId);

                if (objectController == null)
                {
                    continue;
                }

                JointBehaviour jointBehaviour = objectController.RootGameObject.GetComponent <JointBehaviour>();

                if (jointBehaviour == null)
                {
                    continue;
                }

                var jointPoints = Helper.GetJointPoints(objectController.RootGameObject);

                foreach (var jointConnectionsData in jointData.JointConnetionsData)
                {
                    int                 pointId               = jointConnectionsData.Key;
                    JointPoint          myJointPoint          = jointPoints[pointId];
                    JointConnetionsData connectionData        = jointConnectionsData.Value;
                    ObjectController    otherObjectController = GameStateData.GetObjectInLocation(connectionData.ConnectedObjectInstanceId);
                    var                 otherJointPoints      = Helper.GetJointPoints(otherObjectController.RootGameObject);
                    JointPoint          otherJointPoint       = otherJointPoints[connectionData.ConnectedObjectJointPointId];
                    jointBehaviour.ConnectToJointPoint(myJointPoint, otherJointPoint);
                    myJointPoint.IsForceLocked    = connectionData.ForceLocked;
                    otherJointPoint.IsForceLocked = connectionData.ForceLocked;
                }
            }

            yield return(new WaitForEndOfFrame());

            JointBehaviour.IsTempConnectionCreated = false;
            yield return(true);
        }
コード例 #6
0
ファイル: Helper.cs プロジェクト: RobboVariwn/VarBot
        public static void ReloadSceneObjects()
        {
            _logger.Info($"Reloading objects on scene {ProjectData.SceneId}");
            ParentManager.Instance.ParentCommand = ParentCommand.None;
            GameStateData.ClearObjects();
            ProjectData.ObjectsAreChanged = false;
            Data.ServerData.Scene location      = ProjectData.ProjectStructure.Scenes.GetProjectScene(ProjectData.SceneId);
            LogicInstance         logicInstance = new LogicInstance(ProjectData.SceneId);

            GameStateData.RefreshLogic(logicInstance, location.AssemblyBytes);
            CreateSpawnEntities(location.SceneObjects, ProjectData.SceneId);
        }
コード例 #7
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);
        }
コード例 #8
0
ファイル: Helper.cs プロジェクト: RobboVariwn/VarBot
        public static void SetSpawnedObject(int objectId)
        {
            ProjectData.SelectedObjectIdToSpawn = objectId;

            if (_spawnView != null)
            {
                Object.Destroy(_spawnView);
            }

            GameObject go = GameStateData.GetPrefabGameObject(objectId);

            _spawnView = Object.Instantiate(go, GameObjects.Instance.SpawnPoint);
            SetGameObjectToSpawn(_spawnView);
        }
コード例 #9
0
ファイル: Helper.cs プロジェクト: RobboVariwn/VarBot
        /// <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);
        }
コード例 #10
0
ファイル: Helper.cs プロジェクト: RobboVariwn/VarBot
        public static void ReloadJointConnections(ObjectController objectController, JointData saveJointData)
        {
            JointBehaviour jointBehaviour = objectController.RootGameObject.GetComponent <JointBehaviour>();
            var            jointPoints    = GetJointPoints(objectController.RootGameObject);

            foreach (var jointConnectionsData in saveJointData.JointConnetionsData)
            {
                int                 pointId               = jointConnectionsData.Key;
                JointPoint          myJointPoint          = jointPoints[pointId];
                JointConnetionsData connectionData        = jointConnectionsData.Value;
                ObjectController    otherObjectController = GameStateData.GetObjectInLocation(connectionData.ConnectedObjectInstanceId);
                var                 otherJointPoints      = GetJointPoints(otherObjectController.RootGameObject);
                JointPoint          otherJointPoint       = otherJointPoints[connectionData.ConnectedObjectJointPointId];
                jointBehaviour.ConnectToJointPoint(myJointPoint, otherJointPoint);
                myJointPoint.IsForceLocked    = connectionData.ForceLocked;
                otherJointPoint.IsForceLocked = connectionData.ForceLocked;
            }
        }
コード例 #11
0
        private IEnumerator BeforeLoadSceneCoroutine(bool otherLocation)
        {
            yield return(StartCoroutine(FadeIn()));

            if (otherLocation)
            {
                GameStateData.ClearObjects();
                GameStateData.ClearLogic();
                yield return(StartCoroutine(LoadLoaderScene()));

                yield return(StartCoroutine(UnloadSceneAndResources()));
            }
            else
            {
                Helper.ReloadSceneObjects();
            }

            ResetPlayerRigPosition();
            ProjectData.OnSceneCleared();
            yield return(StartCoroutine(FadeOut()));
        }
コード例 #12
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();
        }