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); } }
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); }
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; }
protected virtual IEnumerator DoCreateModel(proto_server.s2c_object_init_message ao_data) { yield return(1); }
protected virtual void CreateModel(proto_server.s2c_object_init_message ao_data) { CoreEnv.CoreDriver.StartCoroutine(DoCreateModel(ao_data)); }