public void ProcessMessage(ActiveObject obj, proto_server.s2c_object_init_message ao_data)
 {
     ProcessProperty(obj, ao_data.properties);
     ProcessYawPitch(obj, ao_data.yawpitch);
     ProcessMovemont(obj, ao_data.movemont);
     ProcesssControlBits(obj, ao_data.control);
 }
        public void AddActiveObject(int id, proto_server.s2c_object_init_message ao_data)
        {
            if (_ActiveObjectMap.ContainsKey(id))
            {
                LogHelper.ERROR("ActiveObjectManager", "AddActiveObject id={0} allready exist!", id);
                return;
            }

            //LogHelper.DEBUG("HandleMsgActiveObjectRemoveAdd", "Add uid={0} id={1} name={2} local={3}",
            //    ao_data.uid, id, ao_data.properties.name, IsLocalPlayer(ao_data.properties.name));

            ao_data.properties.mesh = LocalPlayerDef.DefaultPrefab; // 用临时资源

            Player player = null;

            if (IsLocalPlayer(ao_data.properties.name))
            {
                // 如果是localplayer,暂时用本地设定的坐标,目前同步下来的是000
                ao_data.movemont.pos.x = LocalPlayerDef.DefaultPos.x * 10;
                ao_data.movemont.pos.y = LocalPlayerDef.DefaultPos.y * 10;
                ao_data.movemont.pos.z = LocalPlayerDef.DefaultPos.z * 10;
                player = CreateLocalPlayer(this, id, ao_data);
                _World._LocalPlayerServerID = id;
                _LocalPlayer = player as LocalPlayer;
            }
            else
            {
                player = CreatePlayer(this, id, ao_data);
            }

            if (player != null)
            {
                _ActiveObjectMap[id] = player;
            }
        }
        public Player CreatePlayer(ActiveObjectManager manager, int id, proto_server.s2c_object_init_message ao_data)
        {
            Player player = new Player(_World);

            player.Init(manager, id, ao_data);

            return(player);
        }
        public LocalPlayer CreateLocalPlayer(ActiveObjectManager manager, int id, proto_server.s2c_object_init_message ao_data)
        {
            LocalPlayer localPlayer = new LocalPlayer(_World);

            localPlayer.Init(manager, id, ao_data);

            return(localPlayer);
        }
        protected override IEnumerator DoCreateModel(proto_server.s2c_object_init_message ao_data)
        {
            Vector3 pos = new Vector3(ao_data.movemont.pos.x / 10, ao_data.movemont.pos.y / 10, ao_data.movemont.pos.z / 10);

            _GameObject = ResourceManager.Instance.LoadPrefabAssetFromResource(ao_data.properties.mesh);
            _GameObject.AddComponent <CameraController>();
            _GameObject.transform.position = pos;
            _GameObject.name             = "LocalPlayer_" + _ID.ToString();
            _GameObject.transform.parent = _ActiveObjectManager._PlayerSetObject.transform;

            _Component        = _GameObject.AddComponent <LocalPlayerController>();
            _Component.player = this;

            _GameObject.AddComponent <Uniblocks.ExampleInventory>();
            var debugger = _GameObject.AddComponent <Uniblocks.Debugger>();

            debugger.Flashlight = _GameObject.transform.Find("Flashlight").gameObject;
            debugger.Torch      = _GameObject.transform.Find("Torch").gameObject;
            var cameraEventsSender = _GameObject.AddComponent <Uniblocks.CameraEventsSender>();

            cameraEventsSender.Range = 10;
            _GameObject.AddComponent <Uniblocks.ColliderEventsSender>();

            _GameObject.AddComponent <Uniblocks.ChunkLoader>();
            _PlayerAnimator = _GameObject.GetComponent <Animator>();

            _PlayerCharaContrl = _GameObject.GetComponent <CharacterController>();

            UpdatePosition();

            Vector3    rayStartPos = new Vector3(pos.x, pos.y + 100, pos.z);
            Ray        ray         = new Ray(rayStartPos, Vector3.down);
            RaycastHit hit;
            int        count = 60;

            while (!Physics.Raycast(ray, out hit) || count > 0)
            {
                count--;
                yield return(1);
            }

            _GameObject.transform.position = hit.point + new Vector3(0, 1, 0);
            yield return(1);

            // 等待玩家落入指定范围内
            if (Math.Abs(_GameObject.transform.position.y - pos.y) > 1)
            {
                yield return(1);
            }

            _IsReady = true;

            if (_World._OnLocalPlayerCreatedCallback != null)
            {
                _World._OnLocalPlayerCreatedCallback(this);
            }
        }
示例#6
0
        public virtual void Init(ActiveObjectManager manager, int id, proto_server.s2c_object_init_message ao_data)
        {
            _ActiveObjectManager = manager;
            _ID = id;

            manager._ObjectMessageHandler.ProcessMessage(this, ao_data);

            CreateModel(ao_data);
        }
示例#7
0
        protected override IEnumerator DoCreateModel(proto_server.s2c_object_init_message ao_data)
        {
            Vector3 pos = new Vector3(ao_data.movemont.pos.x / 10, ao_data.movemont.pos.y / 10, ao_data.movemont.pos.z / 10);

            _GameObject = ResourceManager.Instance.LoadPrefabAssetFromResource(ao_data.properties.mesh);
            _GameObject.transform.position = pos;
            _GameObject.name             = "Player_" + _ID.ToString();
            _GameObject.transform.parent = _ActiveObjectManager._PlayerSetObject.transform;

            _Component        = _GameObject.AddComponent <PlayerController>();
            _Component.player = this;

            _PlayerAnimator = _GameObject.GetComponent <Animator>();

            _PlayerCharaContrl = _GameObject.GetComponent <CharacterController>();

            Vector3    rayStartPos = new Vector3(pos.x, pos.y + 100, pos.z);
            Ray        ray         = new Ray(rayStartPos, Vector3.down);
            RaycastHit hit;
            int        count = 60;

            while (!Physics.Raycast(ray, out hit) || count > 0)
            {
                count--;
                yield return(1);
            }

            _GameObject.transform.position = hit.point + new Vector3(0, 1, 0);
            yield return(1);

            // 等待玩家落入指定范围内
            if (Math.Abs(_GameObject.transform.position.y - pos.y) > 1)
            {
                yield return(1);
            }

            _IsReady = true;
        }
示例#8
0
 protected virtual IEnumerator DoCreateModel(proto_server.s2c_object_init_message ao_data)
 {
     yield return(1);
 }
示例#9
0
 protected virtual void CreateModel(proto_server.s2c_object_init_message ao_data)
 {
     CoreEnv.CoreDriver.StartCoroutine(DoCreateModel(ao_data));
 }