Esempio n. 1
0
 void send_message(SPClientMessage msg)
 {
     lock (_msg_send_queue) {
         _msg_send_queue.Clear();
         _msg_send_queue.Enqueue(msg.to_json().ToString());
     }
 }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
    public static SPClientMessage from_json(JSONObject jso)
    {
        SPClientMessage rtv = new SPClientMessage();

        JSONArray bullets = jso.GetArray(SN.BULLETS);
        foreach(JSONValue v in bullets) {
            rtv._bullets.Add(SPBulletObject.from_json(v.Obj));
        }

        rtv._player = SPPlayerObject.from_json(jso.GetObject(SN.PLAYER));

        return rtv;
    }