public static SPBulletObject from_json(JSONObject jso) { SPBulletObject rtv = new SPBulletObject(); rtv._id = (int)jso.GetNumber(SN.ID); rtv._playerid = (int)jso.GetNumber(SN.PLAYER_ID); rtv._pos = SPVector.from_json(jso.GetObject(SN.POS)); rtv._vel = SPVector.from_json(jso.GetObject(SN.VEL)); rtv._rot = SPVector.from_json(jso.GetObject(SN.ROT)); return rtv; }
void Update() { if (_socket == null || !_socket.Connected) { S3KGUI.inst._status = "not connected!"; return; } if (!PlayerInfo._logged_in) { S3KGUI.inst._status = "not logged in!"; } else if (!_id_alloced) { S3KGUI.inst._status = "allocating id..."; } else if (PlayerInfo._alive) { S3KGUI.inst._status = "logged in as: "+PlayerInfo._name; } while(true) { bool cont; string msg_str = null; lock (_msg_recieve_queue) { cont = _msg_recieve_queue.Count > 0; if (cont) msg_str = _msg_recieve_queue.Dequeue(); } if (!cont) break; SPServerMessage msg = SPServerMessage.from_json(JSONObject.Parse(msg_str)); if (!_id_alloced) { foreach (SPEvent evt in msg._events) { if (evt._type == SPEvent.TYPE_ALLOC_ID && evt._player_id == PlayerInfo._id) { PlayerInfo._id = evt._value; _id_alloced = true; } } } OnlinePlayerManager.inst.msg_recieved(msg); BulletManager.inst.msg_recieved(msg); } SPClientMessage msg_out = new SPClientMessage(); msg_out._player._pos = Util.vector3_to_spvector(gameObject.transform.position); msg_out._player._rot = Util.vector3_to_spvector(gameObject.transform.eulerAngles); if (!S3KControl.inst._has_last_position) { msg_out._player._vel._x = 0; msg_out._player._vel._y = 0; msg_out._player._vel._z = 0; } else { msg_out._player._vel._x = gameObject.transform.position.x - S3KControl.inst._last_body_position.x; msg_out._player._vel._y = gameObject.transform.position.y - S3KControl.inst._last_body_position.y; msg_out._player._vel._z = gameObject.transform.position.z - S3KControl.inst._last_body_position.z; } msg_out._player._alive = PlayerInfo._alive ? 1 : 0; msg_out._player._id = PlayerInfo._id; msg_out._player._name = PlayerInfo._name; foreach (Bullet b in BulletManager.inst._bullets) { SPBulletObject obj = new SPBulletObject(); obj._pos = Util.vector3_to_spvector(b._position); obj._vel = Util.vector3_to_spvector(b._vel); obj._rot = Util.vector3_to_spvector(b._obj.transform.eulerAngles); obj._id = b._id; obj._playerid = PlayerInfo._id; msg_out._bullets.Add(obj); } send_message(msg_out); }