コード例 #1
0
ファイル: ClientVC.cs プロジェクト: NickPowers43/SW
    public ClientVC(NetworkReader nr)
        : base(new Vec2i(0,0), 0)
    {
        this.data = new VesselTile[VesselChunk.DATA_COUNT];

        index.x = nr.ReadInt32();
        index.y = nr.ReadInt32();

        version = nr.ReadUInt32();
        tileCount = nr.ReadInt32();

        for (int i = 0; i < tileCount; i++) {
            //read in vessel tile
            Vec2i tileI;

            tileI.x = nr.ReadInt32();
            tileI.y = nr.ReadInt32();
            FloorType floor0 = (FloorType)nr.ReadByte();
            FloorType floor1 = (FloorType)nr.ReadByte();
            WallTypeMask wallMask = (WallTypeMask)nr.ReadByte();
            bool wallNode = nr.ReadBoolean();

            VesselTile tile = new VesselTile(wallMask, wallNode, floor0, floor1, (uint)VesselTile.FLAGS.NONE);

            SetTile(tileI, tile);
        }
    }
コード例 #2
0
 public override void OnDeserialize(NetworkReader reader, bool initialState)
 {
     if (reader.ReadPackedUInt32() != 0)
     {
         this.m_Slot = reader.ReadByte();
         this.m_ReadyToBegin = reader.ReadBoolean();
     }
 }
コード例 #3
0
 public override void Deserialize(NetworkReader reader)
 {
   this.scripts = new CRCMessageEntry[(int) reader.ReadUInt16()];
   for (int index = 0; index < this.scripts.Length; ++index)
     this.scripts[index] = new CRCMessageEntry()
     {
       name = reader.ReadString(),
       channel = reader.ReadByte()
     };
 }
コード例 #4
0
 public override void Deserialize(NetworkReader reader)
 {
     int num = reader.ReadUInt16();
     this.scripts = new CRCMessageEntry[num];
     for (int i = 0; i < this.scripts.Length; i++)
     {
         this.scripts[i] = new CRCMessageEntry { 
             name = reader.ReadString(),
             channel = reader.ReadByte()
         };
     }
 }
コード例 #5
0
ファイル: CRCMessage.cs プロジェクト: randomize/VimConfig
        public override void Deserialize(NetworkReader reader)
        {
            int num = reader.ReadUInt16();

            this.scripts = new CRCMessageEntry[num];
            for (int i = 0; i < this.scripts.Length; i++)
            {
                this.scripts[i] = new CRCMessageEntry {
                    name = reader.ReadString(), channel = reader.ReadByte()
                };
            }
        }
コード例 #6
0
        public void Receive_ClientRecieveTransmission(NetworkReader reader)
        {
            Int32 transmissionId  = reader.ReadInt32();
            Int32 recBuffer_count = reader.ReadInt32();

            System.Byte[] recBuffer = new System.Byte[recBuffer_count];
            for (int recBuffer_index = 0; recBuffer_index < recBuffer_count; recBuffer_index++)
            {
                recBuffer[recBuffer_index] = reader.ReadByte();
            }
            ClientRecieveTransmission(transmissionId, recBuffer);
        }
コード例 #7
0
        public override void OnDeserialize(NetworkReader reader, bool initialState)
        {
            var dirty = reader.ReadPackedUInt32();

            if (dirty == 0)
            {
                return;
            }

            m_Slot         = reader.ReadByte();
            m_ReadyToBegin = reader.ReadBoolean();
        }
コード例 #8
0
        /// <summary>
        /// Read up to 40 bytes of a NetworkReader into a bitstream. This resets the bitstream before copying.
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="bitstream"></param>
        public static void Read(this NetworkReader reader, ref Bitstream bitstream)
        {
            bitstream.Reset();
            // Copy the reader into our buffer so we can extra the packed bits. UNET uses a byte reader so we can't directly read bit fragments out of it.
            int count = System.Math.Min(40, reader.Length);

            for (int i = (int)reader.Position; i < count; ++i)
            {
                byte b = reader.ReadByte();
                bitstream.WriteByte(b);
            }
        }
コード例 #9
0
 public override void Deserialize(NetworkReader reader)
 {
     int num = (int)reader.ReadUInt16();
     this.scripts = new CRCMessageEntry[num];
     for (int i = 0; i < this.scripts.Length; i++)
     {
         CRCMessageEntry cRCMessageEntry = default(CRCMessageEntry);
         cRCMessageEntry.name = reader.ReadString();
         cRCMessageEntry.channel = reader.ReadByte();
         this.scripts[i] = cRCMessageEntry;
     }
 }
コード例 #10
0
        public void SerializeDeltaWritesNetIdAndComponentIndex()
        {
            SyncVarNetworkBehaviour <EmptyBehaviour> field = new SyncVarNetworkBehaviour <EmptyBehaviour>(serverComponent);
            NetworkWriter writer = new NetworkWriter();

            field.OnSerializeDelta(writer);

            NetworkReader reader = new NetworkReader(writer.ToArraySegment());

            Assert.That(reader.ReadUInt(), Is.EqualTo(serverComponent.netId));
            Assert.That(reader.ReadByte(), Is.EqualTo(serverComponent.ComponentIndex));
        }
コード例 #11
0
        private static void ReadBlock(ref byte[] values, NetworkReader reader, int blockIndex)
        {
            var fullBlockMask = new FullBlockMask();

            var maskIndex = 0;

            while (true)
            {
                var  blockBytes = reader.ReadByte();
                uint mask, xor;
                do
                {
                    (mask, xor) = GetMask(maskIndex++);
                }while ((blockBytes & mask ^ xor) != 0);

                fullBlockMask[maskIndex - 1] = blockBytes;

                if ((blockBytes & highestBitInByte) != 0)
                {
                    break;
                }
            }

            var bitesSkipped = 0;

            for (var i = 0; i < 32; i++)
            {
                if ((blockValuesMask & highestBitInInt >> i) == 0)
                {
                    bitesSkipped++;
                    continue;
                }
                if ((fullBlockMask.integer & highestBitInInt >> i) != 0)
                {
                    var valueIndex = (blockIndex * valuesPerBlock) + i - bitesSkipped;
                    ResizeOrInitIfNeeded(ref values, valueIndex);
                    values[valueIndex] = reader.ReadByte();
                }
            }
        }
コード例 #12
0
ファイル: DeadBody.cs プロジェクト: smith076/SanAndreasUnity
            public static BoneSyncData DeSerialize(NetworkReader reader)
            {
                var boneSyncData = new BoneSyncData();

                boneSyncData.boneId   = reader.ReadByte();
                boneSyncData.position = reader.ReadVector3();
                boneSyncData.rotation = reader.ReadVector3();
                if (boneSyncData.boneId == 0)
                {
                    boneSyncData.velocity = reader.ReadVector3();
                }
                return(boneSyncData);
            }
コード例 #13
0
        // public void PopulateMessage(NetworkBehaviour behaviour, NetworkWriter writer)
        // {
        //     this.NetworkId = behaviour.NetworkId;
        //     this.BehaviourIndex = behaviour.BehaviourIndex;
        //     this.DataLength = writer.Position;
        //
        //     reader.Replace(writer.RawBuffer);
        //     reader.ReadBytes(this.Data, this.DataLength);
        // }

        public override void Deserialize(NetworkReader reader)
        {
            base.Deserialize(reader);

            this.NetworkId      = (long)reader.ReadPackedUInt64();
            this.BehaviourIndex = (int)reader.ReadPackedUInt32();
            this.DataLength     = (int)reader.ReadPackedUInt32();

            for (int i = 0; i < this.DataLength; i++)
            {
                this.Data[i] = reader.ReadByte();
            }
        }
コード例 #14
0
        public void Deserialize([NotNull] NetworkReader reader)
        {
            var arr = SerializationBuffers.Get();

            var length = reader.ReadUInt16();

            for (var i = 0; i < length; i++)
            {
                arr[i] = reader.ReadByte();
            }

            Data = new ArraySegment <byte>(arr, 0, length);
        }
コード例 #15
0
    // Alternative to reading in a Byte array with the UNET reader - which allocates a new Array to do it. This SHOULD produce less garbage.

    /// <summary>
    /// Alternative to HLAPI NetworkReader ReadBytes(), which creates a new byte[] every time. This reuses a byte[] and reads the bytes in
    /// one at a time, hopefully eliminating GC.
    /// </summary>
    /// <param name="reader"></param>
    /// <param name="count"></param>
    /// <returns>Returns the same byte array as the on in the arguments.</returns>
    public static byte[] ReadBytesNonAlloc(this NetworkReader reader, byte[] targetbytearray, int count = -1)
    {
        if (count == -1)
        {
            count = targetbytearray.Length;
        }

        for (int i = 0; i < count; i++)
        {
            targetbytearray[i] = reader.ReadByte();
        }
        return(targetbytearray);
    }
コード例 #16
0
 // Token: 0x06000AD9 RID: 2777 RVA: 0x000358D4 File Offset: 0x00033AD4
 public void Deserialize(NetworkReader reader)
 {
     this.origin          = reader.ReadVector3();
     this.rotation        = reader.ReadQuaternion();
     this.rootObject      = reader.ReadGameObject();
     this.modelChildIndex = (short)(reader.ReadByte() - 1);
     this.scale           = reader.ReadSingle();
     this.color           = reader.ReadColor32();
     this.start           = reader.ReadVector3();
     this.genericUInt     = reader.ReadPackedUInt32();
     this.genericFloat    = reader.ReadSingle();
     this.genericBool     = reader.ReadBoolean();
 }
コード例 #17
0
        /// <summary>
        /// Reads a compressed quaternion from a reader.
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static Quaternion ReadCompressedQuaternion(NetworkReader reader)
        {
            byte  largest = reader.ReadByte();
            short a = 0, b = 0, c = 0;

            if (!Quaternions.UseLargestOnly(largest))
            {
                a = reader.ReadInt16();
                b = reader.ReadInt16();
                c = reader.ReadInt16();
            }
            return(Quaternions.DecompressQuaternion(largest, a, b, c));
        }
コード例 #18
0
        // Token: 0x060018E1 RID: 6369 RVA: 0x0006B220 File Offset: 0x00069420
        public void Read(NetworkReader reader)
        {
            this.gameResultType    = (GameResultType)reader.ReadByte();
            this.gameModeIndex     = (int)reader.ReadPackedUInt32();
            this.seed              = reader.ReadUInt64();
            this.snapshotTime      = reader.ReadFixedTimeStamp();
            this.runStopwatchValue = reader.ReadSingle();
            reader.ReadRuleBook(this.ruleBook);
            int newSize = (int)reader.ReadByte();

            Array.Resize <RunReport.PlayerInfo>(ref this.playerInfos, newSize);
            for (int i = 0; i < this.playerInfos.Length; i++)
            {
                if (this.playerInfos[i] == null)
                {
                    this.playerInfos[i] = new RunReport.PlayerInfo();
                }
                this.playerInfos[i].Read(reader);
            }
            Array.Sort <RunReport.PlayerInfo>(this.playerInfos, delegate(RunReport.PlayerInfo a, RunReport.PlayerInfo b)
            {
                if (a.isLocalPlayer == b.isLocalPlayer)
                {
                    if (a.isLocalPlayer)
                    {
                        return(b.localPlayerIndex - a.localPlayerIndex);
                    }
                    return(0);
                }
                else
                {
                    if (!a.isLocalPlayer)
                    {
                        return(1);
                    }
                    return(-1);
                }
            });
        }
コード例 #19
0
        public static DissonanceNetworkMessage Deserialize([NotNull] this NetworkReader reader)
        {
            var arr = SerializationBuffers.Get();

            var length = reader.ReadUInt16();

            for (var i = 0; i < length; i++)
            {
                arr[i] = reader.ReadByte();
            }

            return(new DissonanceNetworkMessage(new ArraySegment <byte>(arr, 0, length)));
        }
コード例 #20
0
        public void Deserialize(NetworkReader reader)
        {
            this.damage = reader.ReadDamageInfo();
            this.target = reader.ReadHurtBoxReference().ResolveHurtBox();
            Byte flags = reader.ReadByte();
            Byte mask  = (Byte)0b0000_0001u;

            this.callDamage   = (flags & mask) > 0;
            flags           >>= 1;
            this.callHitEnemy = (flags & mask) > 0;
            flags           >>= 1;
            this.callHitWorld = (flags & mask) > 0;
        }
コード例 #21
0
ファイル: Messages.cs プロジェクト: gabrielhasen/Portfolio
        public override void Deserialize(NetworkReader reader)
        {
            int numScripts = reader.ReadUInt16();

            scripts = new CRCMessageEntry[numScripts];
            for (int i = 0; i < scripts.Length; ++i)
            {
                var entry = new CRCMessageEntry();
                entry.name    = reader.ReadString();
                entry.channel = reader.ReadByte();
                scripts[i]    = entry;
            }
        }
コード例 #22
0
        public override void Deserialize(NetworkReader reader)
        {
            int num = reader.ReadUInt16();

            scripts = new CRCMessageEntry[num];
            for (int i = 0; i < scripts.Length; i++)
            {
                CRCMessageEntry cRCMessageEntry = default(CRCMessageEntry);
                cRCMessageEntry.name    = reader.ReadString();
                cRCMessageEntry.channel = reader.ReadByte();
                scripts[i] = cRCMessageEntry;
            }
        }
コード例 #23
0
        public static NetworkBehaviour.NetworkBehaviourSyncVar ReadNetworkBehaviourSyncVar(this NetworkReader reader)
        {
            uint netId          = reader.ReadUInt();
            byte componentIndex = default;

            // if netId is not 0, then index is also sent to read before returning
            if (netId != 0)
            {
                componentIndex = reader.ReadByte();
            }

            return(new NetworkBehaviour.NetworkBehaviourSyncVar(netId, componentIndex));
        }
コード例 #24
0
 public override void Deserialize(NetworkReader reader)
 {
     this.scripts = new CRCMessageEntry[(int)reader.ReadUInt16()];
     for (int index = 0; index < this.scripts.Length; ++index)
     {
         this.scripts[index] = new CRCMessageEntry()
         {
             name    = reader.ReadString(),
             channel = reader.ReadByte()
         }
     }
     ;
 }
コード例 #25
0
ファイル: LineData.cs プロジェクト: jacko12549/EvoS
        public static LineInstance DeSerializeLine(NetworkReader reader)
        {
            var lineInstance = new LineInstance();
            var num1         = reader.ReadSByte();
            var flag         = reader.ReadBoolean();

            lineInstance.isChasing = flag;
            lineInstance.m_positions.Clear();
            for (var index = 0; index <= (int)num1; ++index)
            {
                var num2    = reader.ReadByte();
                var num3    = reader.ReadByte();
                var gridPos = new GridPos(
                    num2,
                    num3,
                    -1 // TODO (int) Board.\u000E().\u000E(gridPos.x, gridPos.y)
                    );
                lineInstance.m_positions.Add(gridPos);
            }

            return(lineInstance);
        }
コード例 #26
0
 public void NetworkDeserialize(NetworkReader reader)
 {
     position    = reader.ReadVector3();
     rotation    = Quaternion.Euler(reader.ReadVector3());
     jumpReady   = reader.ReadBoolean();
     isPushed    = reader.ReadBoolean();
     isRunning   = reader.ReadBoolean();
     isGrounded  = reader.ReadBoolean();
     jumpTimer   = reader.ReadSingle();
     stamina     = reader.ReadSingle();
     actionId    = (ActionTypes)reader.ReadByte();
     actionTimer = reader.ReadSingle();
 }
コード例 #27
0
    public override void Deserialize(NetworkReader reader)
    {
        if (reader == null)
        {
            return;
        }

        List <Mahjong.RuleNode> ruleNodes = null;
        int count = reader.ReadByte();

        for (int i = 0; i < count; ++i)
        {
            if (ruleNodes == null)
            {
                ruleNodes = new List <Mahjong.RuleNode>();
            }

            ruleNodes.Add(new Mahjong.RuleNode((Mahjong.RuleType)reader.ReadByte(), reader.ReadByte(), reader.ReadByte()));
        }

        this.ruleNodes = ruleNodes == null ? null : ruleNodes.AsReadOnly();
    }
コード例 #28
0
        internal void Execute(INetworkConnection connection, NetworkReader reader)
        {
            byte header  = reader.ReadByte();
            var  handler = handlers[header];

            if (handler == null)
            {
                return;
            }
            var message = new NetworkDataMessage(connection, reader);

            handler(message);
        }
コード例 #29
0
ファイル: SyncDictionary.cs プロジェクト: uweenukr/Mirage
        public void OnDeserializeDelta(NetworkReader reader)
        {
            // This list can now only be modified by synchronization
            IsReadOnly = true;
            bool raiseOnChange = false;

            int changesCount = (int)reader.ReadPackedUInt32();

            for (int i = 0; i < changesCount; i++)
            {
                var operation = (Operation)reader.ReadByte();

                // apply the operation only if it is a new change
                // that we have not applied yet
                bool apply = changesAhead == 0;

                switch (operation)
                {
                case Operation.OP_ADD:
                    DeserializeAdd(reader, apply);
                    break;

                case Operation.OP_SET:
                    DeserializeSet(reader, apply);
                    break;

                case Operation.OP_CLEAR:
                    DeserializeClear(apply);
                    break;

                case Operation.OP_REMOVE:
                    DeserializeRemove(reader, apply);
                    break;
                }

                if (apply)
                {
                    raiseOnChange = true;
                }
                // we just skipped this change
                else
                {
                    changesAhead--;
                }
            }

            if (raiseOnChange)
            {
                OnChange?.Invoke();
            }
        }
コード例 #30
0
        public static UpdateTileMessage.NetMessage Deserialize(this NetworkReader reader)
        {
            var message = new UpdateTileMessage.NetMessage();

            message.Changes         = new List <UpdateTileMessage.DelayedData>();
            message.MatrixSyncNetID = reader.ReadUInt();
            while (true)
            {
                var Continue = reader.ReadBool();
                if (Continue == false)
                {
                    break;
                }

                var WorkingOn = new UpdateTileMessage.DelayedData
                {
                    Position        = reader.ReadVector3Int(),
                    TileType        = (TileType)reader.ReadInt(),
                    layerType       = (LayerType)reader.ReadInt(),
                    TileName        = reader.ReadString(),
                    MatrixSyncNetID = message.MatrixSyncNetID,
                    TransformMatrix = Matrix4x4.identity,
                    Colour          = Color.white
                };



                while (true)
                {
                    byte Operation = reader.ReadByte();

                    if (Operation == (byte)EnumOperation.NoMoreData)
                    {
                        break;
                    }

                    if (Operation == (byte)EnumOperation.Colour)
                    {
                        WorkingOn.Colour = reader.ReadColor();
                    }

                    if (Operation == (byte)EnumOperation.Matrix4x4)
                    {
                        WorkingOn.TransformMatrix = reader.ReadMatrix4x4();
                    }
                }
                message.Changes.Add(WorkingOn);
            }

            return(message);
        }
コード例 #31
0
        public void Deserialize(NetworkReader reader)
        {
            _damage = reader.ReadDamageInfo();
            _target = reader.ReadHurtBoxReference().ResolveHurtBox();

            byte       flags = reader.ReadByte();
            const byte mask  = 0b0001;

            _callDamage   = (flags & mask) > 0;
            flags       >>= 1;
            _callHitEnemy = (flags & mask) > 0;
            flags       >>= 1;
            _callHitWorld = (flags & mask) > 0;
        }
コード例 #32
0
ファイル: Days.cs プロジェクト: Nicholas10128/StarAward
    public void Desearialize(NetworkReader reader)
    {
        int count = reader.ReadInt32();

        m_Days.Clear();
        for (int i = 0; i < count; i++)
        {
            DayInfo di = new DayInfo();
            di.m_Year  = reader.ReadInt16();
            di.m_Month = reader.ReadByte();
            di.m_Day   = reader.ReadByte();
            int starsCount = reader.ReadByte();
            di.RebuildStarName(starsCount);
            di.RebuildStarCount(starsCount);
            for (int j = 0; j < starsCount; j++)
            {
                di.SetStarName(j, reader.ReadString());
                di.SetStarCount(j, reader.ReadByte());
            }
            di.OnRebuild();
            m_Days.Add(di);
        }
    }
コード例 #33
0
 /// <summary>
 /// Deserialize the snapshot without compression.
 /// </summary>
 /// <param name="reader"></param>
 public override void Deserialize(NetworkReader reader)
 {
     m_num_snapshots = (int)reader.ReadByte();
     for (int i = 0; i < m_num_snapshots; i++)
     {
         NetworkInstanceId net_id = reader.ReadNetworkId();
         Vector3           pos    = default(Vector3);
         pos.x = reader.ReadSingle();
         pos.y = reader.ReadSingle();
         pos.z = reader.ReadSingle();
         Quaternion rot = reader.ReadQuaternion();
         m_snapshots[i] = new PlayerSnapshot(net_id, pos, rot);
     }
 }
コード例 #34
0
        // Alternative to reading in a Byte array with the UNET reader - which allocates a new Array to do it. This SHOULD produce less garbage.

        /// <summary>
        /// Alternative to HLAPI NetworkReader ReadBytes(), which creates a new byte[] every time. This reuses a byte[] and reads the bytes in
        /// one at a time, hopefully eliminating GC.
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="count"></param>
        /// <returns>Returns the same byte array as the on in the arguments.</returns>
        public static byte[] ReadBytesNonAlloc(this NetworkReader reader, byte[] targetbytearray, int count = -1)
        {
            if (count == -1)
            {
                count = reader.Length;
            }

            // TODO does this write 0s once the reader is empty? It needs to.
            for (int i = 0; i < count; i++)
            {
                targetbytearray[i] = reader.ReadByte();
            }
            return(targetbytearray);
        }
コード例 #35
0
 public void Deserialize(ref SerializeContext context, ref NetworkReader reader)
 {
     this.tick       = reader.ReadInt32();
     velocity        = reader.ReadVector3Q();
     action          = (Action)reader.ReadInt32();
     actionStartTick = reader.ReadInt32();
     locoState       = (LocoState)reader.ReadInt32();
     locoStartTick   = reader.ReadInt32();
     position        = reader.ReadVector3Q();
     jumpCount       = reader.ReadInt32();
     sprinting       = reader.ReadBoolean() ? 1 : 0;
     cameraProfile   = (CameraProfile)reader.ReadByte();
     damageTick      = reader.ReadInt32();
     damageDirection = reader.ReadVector3Q();
 }
コード例 #36
0
    public override void Deserialize(NetworkReader reader)
    {
        base.Deserialize(reader);

        byte setType = reader.ReadByte();
        switch (setType) {
            case (byte)0: _actionSet = new SinglePanelActionSet(); break;
            case (byte)1: _actionSet = new ReplacementPanelActionSet(); break;
            case (byte)2: _actionSet = new CodePanelActionSet(); break;
            default: throw new Exception("Unexpected Action Set ID " + setType);
        }

        _actionSet.Deserialize(reader);

        _x = reader.ReadInt32();
        _y = reader.ReadInt32();
        _prefabIndex = reader.ReadInt32();
    }
コード例 #37
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void ReceiveTileStroke(NetworkReader reader,
                                   int connectionID)
    {
        byte tile = reader.ReadByte();
        uint[] values = UnpackBits(reader, 5, 5, 5, 5, 4, 4);

        Vector2 start = new Vector2(values[0], values[1]);
        Vector2 end = new Vector2(values[2], values[3]);
        Color color = world.palette[values[4]];
        int thickness = (int)values[5];

        if (hosting)
        {
            if (!locks.ContainsKey(tile) || locks[tile].id != connectionID) return;

            SendAll(StrokeMessage(tile, color, thickness, start, end), except: connectionID);
        }

        SpriteDrawing sprite = world.tiles[tile];

        if (thickness > 0)
        {
            sprite.DrawLine(start, end, thickness, color, Blend.Alpha);
        }
        else
        {
            sprite.Fill(start, color);
        }

        sprite.Sprite.texture.Apply();
    }
コード例 #38
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void ReceiveLockTile(NetworkReader reader)
    {
        World.Avatar avatar = ID2Avatar(reader.ReadInt32());
        byte tile = reader.ReadByte();

        if (avatar != null)
        {
            Debug.LogFormat("{0} locking {1}", avatar.id, tile);

            locks[tile] = avatar;

            if (avatar == worldView.viewer) OpenForEdit(tile);

            if (hosting) SendAll(LockTileMessage(avatar, tile));
        }
        else if (locks.ContainsKey(tile))
        {
            Debug.LogFormat("unlocking {0}", tile);

            locks.Remove(tile);

            if (hosting) SendAll(LockTileMessage(null, tile));
        }

        tilePalette.Refresh();
    }
コード例 #39
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftBracket))
        {
            paletteEditor.gameObject.SetActive(!paletteEditor.gameObject.activeSelf);
        }

        bool editing = tileEditor.gameObject.activeSelf;
        bool chatting = chatOverlay.gameObject.activeSelf;
        bool mapping = Input.GetKey(KeyCode.Tab)
                    && !chatting;

        if (editing && !chatting)
        {
            tileEditor.CheckInput();
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (chatting)
            {
                chatOverlay.Hide();
            }
            else if (editing)
            {
                tileEditor.OnClickedSave();
            }
            else if (hostID != -1)
            {
                OnApplicationQuit();
                SceneManager.LoadScene("Main");
                return;
            }
            else
            {
                Application.Quit();
                return;
            }
        }
        else if (Input.GetKeyDown(KeyCode.F12))
        {
            string selfies = Application.persistentDataPath + "/selfies";

            Directory.CreateDirectory(selfies);

            Application.CaptureScreenshot(string.Format("{0}/{1}.png", selfies, System.DateTime.Now.Ticks));
        }
        else if (Input.GetKeyDown(KeyCode.F11))
        {
            string maps = Application.persistentDataPath + "/maps";

            Directory.CreateDirectory(maps);

            mapCamera.Render();

            var old = RenderTexture.active;
            RenderTexture.active = mapTexture;
            mapTextureLocal.ReadPixels(Rect.MinMaxRect(0, 0, 1024, 1024), 0, 0);
            RenderTexture.active = old;

            File.WriteAllBytes(string.Format("{0}/{1}.png", maps, System.DateTime.Now.Ticks), mapTextureLocal.EncodeToPNG());
        }
        else if (Input.GetKeyDown(KeyCode.F2))
        {
            scale = 3 - scale;

            Screen.SetResolution(512 * scale, 512 * scale, false);
        }

        if (hostID == -1) return;


        config.hideTutorial |= !tutorialChat.activeSelf
                            && !tutorialMove.activeSelf
                            && !tutorialTile.activeSelf
                            && !tutorialWall.activeSelf;

        tutorialObject.SetActive(!config.hideTutorial);

        mapCamera.gameObject.SetActive(mapping);
        mapObject.SetActive(mapping);

        camera.orthographicSize = Mathf.Lerp(128, 32, zoom);

        if (Input.GetKeyDown(KeyCode.Return))
        {
            if (chatting)
            {
                chatOverlay.OnClickedSend();
            }
            else
            {
                chatOverlay.Show();
            }
        }

        if (!chatting && !editing)
        {
            if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W))
            {
                Move(Vector2.up);
            }
            else if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
            {
                Move(Vector2.left);
            }
            else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
            {
                Move(Vector2.right);
            }
            else if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S))
            {
                Move(Vector2.down);
            }
        }

        if (Input.GetKeyDown(KeyCode.Space) && stickypalette)
        {
            stickypalette = false;
        }

        if (!chatting 
         && !editing 
         && Input.GetKey(KeyCode.Space))
        {
            if (!tilePalette.gameObject.activeSelf)
            {
                stickypalette = Input.GetKey(KeyCode.LeftControl);

                tilePalette.Show();
            }
        }
        else if (!stickypalette)
        {
            tilePalette.Hide();
        }

        if (!UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()
         && Rect.MinMaxRect(0, 0, Screen.width, Screen.height).Contains(Input.mousePosition)
         && !editing)
        {
            bool picker = Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt);
            bool waller = !picker && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift));

            tileCursor.gameObject.SetActive(true);
            pickerCursor.SetActive(picker);
            tileCursor.sprite = this.world.tiles[tilePalette.SelectedTile];

            Vector2 mouse = Input.mousePosition;
            Vector3 world;

            RectTransformUtility.ScreenPointToWorldPointInRectangle(worldView.transform as RectTransform,
                                                                    mouse,
                                                                    camera,
                                                                    out world);

            int x = Mathf.FloorToInt(world.x / 32);
            int y = Mathf.FloorToInt(world.y / 32);

            tileCursor.transform.position = new Vector2(x * 32, y * 32);

            byte tile = tilePalette.SelectedTile;
            int location = (y + 16) * 32 + (x + 16);

            if (location >= 0
             && location < 1024)
            {
                if (waller && Input.GetMouseButtonDown(0))
                {
                    tile = this.world.tilemap[location];
                    bool wall = !this.world.walls.Contains(tile);

                    SendAll(SetWallMessage(tile, wall));

                    if (this.world.walls.Set(tile, wall))
                    {
                        tutorialWall.SetActive(false);

                        audio.PlayOneShot(placeSound);
                    }

                    worldView.RefreshWalls();
                }
                else if (!waller && Input.GetMouseButton(0))
                {
                    if (!picker && this.world.tilemap[location] != tile)
                    {
                        audio.PlayOneShot(placeSound);
                        worldView.SetTile(location, tile);

                        if (tile != 0) tutorialTile.SetActive(false);

                        SendAll(SetTileMessage(location, tile));
                    }
                    else if (picker)
                    {
                        tilePalette.SetSelectedTile(this.world.tilemap[location]);
                    }
                }
            }
        }
        else
        {
            tileCursor.gameObject.SetActive(false);
        }

        var eventType = NetworkEventType.Nothing;
        int connectionID;
        int channelId;
        int receivedSize;
        byte error;

        do
        {
            // Get events from the server/client game connection
            eventType = NetworkTransport.ReceiveFromHost(hostID,
                                                         out connectionID,
                                                         out channelId,
                                                         recvBuffer,
                                                         recvBuffer.Length,
                                                         out receivedSize,
                                                         out error);
            if ((NetworkError)error != NetworkError.Ok)
            {
                group.interactable = true;

                popups.Show("Network Error: " + (NetworkError)error,
                            delegate { });
            }

            if (eventType == NetworkEventType.ConnectEvent)
            {
                connected = true;

                if (hosting)
                {
                    OnNewClientConnected(connectionID);
                }
                else
                {
                    OnConnectedToHost(connectionID);
                }
            }
            else if (eventType == NetworkEventType.DisconnectEvent)
            {
                if (hosting)
                {
                    OnClientDisconnected(connectionID);
                }
                else
                {
                    OnDisconnectedFromHost(connectionID);
                }
            }
            else if (eventType == NetworkEventType.DataEvent)
            {
                var reader = new NetworkReader(recvBuffer);

                {
                    Type type = (Type) reader.ReadByte();

                    if (type == Type.Tilemap)
                    {
                        world.tilemap = reader.ReadBytesAndSize();
                        worldView.SetWorld(world);
                    }
                    else if (type == Type.Palette)
                    {
                        for (int i = 0; i < 16; ++i)
                        {
                            world.palette[i] = reader.ReadColor32();
                            SetPalette((byte) i, world.palette[i]);
                        }
                    }
                    else if (type == Type.PaletteEdit)
                    {
                        ReceivePaletteEdit(reader);
                    }
                    else if (type == Type.Walls)
                    {
                        world.walls.Clear();

                        foreach (var wall in reader.ReadBytesAndSize())
                        {
                            world.walls.Add(wall);
                        }

                        worldView.RefreshWalls();
                    }
                    else if (type == Type.Tileset)
                    {
                        int id = reader.ReadInt32();

                        tiledata[id] = reader.ReadBytesAndSize();
                    }
                    else if (type == Type.ReplicateAvatar)
                    {
                        ReceiveCreateAvatar(reader);
                    }
                    else if (type == Type.DestroyAvatar)
                    {
                        ReceiveDestroyAvatar(reader);
                    }
                    else if (type == Type.GiveAvatar)
                    {
                        ReceiveGiveAvatar(reader);
                    }
                    else if (type == Type.MoveAvatar)
                    {
                        World.Avatar avatar = ID2Avatar(reader.ReadInt32());
                        Vector2 dest = reader.ReadVector2();

                        if (hosting)
                        {
                            if (connectionID == avatar.id
                             && !Blocked(avatar, dest))
                            {
                                avatar.source = avatar.destination;
                                avatar.destination = dest;
                                avatar.u = 0;

                                SendAll(MoveAvatarMessage(avatar, avatar.destination), except: avatar.id);
                            }
                            else
                            {
                                Send(connectionID, MoveAvatarMessage(avatar, avatar.destination));
                            }
                        }
                        else
                        {
                            avatar.source = avatar.destination;
                            avatar.destination = dest;
                            avatar.u = 0;
                        }
                    }
                    else if (type == Type.Chat)
                    {
                        World.Avatar avatar = ID2Avatar(reader.ReadInt32());
                        string message = reader.ReadString();

                        if (hosting)
                        {
                            if (connectionID == avatar.id)
                            {
                                SendAll(ChatMessage(avatar, message), except: connectionID);

                                Chat(avatar, message);
                            }
                        }
                        else
                        {
                            Chat(avatar, message);
                        }
                    }
                    else if (type == Type.SetTile)
                    {
                        ReceiveSetTile(reader);
                    }
                    else if (type == Type.SetWall)
                    {
                        ReceiveSetWall(reader);
                    }
                    else if (type == Type.TileChunk)
                    {
                        ReceiveTileChunk(reader, connectionID);
                    }
                    else if (type == Type.LockTile)
                    {
                        ReceiveLockTile(reader);
                    }
                    else if (type == Type.AvatarChunk)
                    {
                        ReceiveAvatarChunk(reader, connectionID);
                    }
                    else if (type == Type.TileStroke)
                    {
                        ReceiveTileStroke(reader, connectionID);
                    }
                }
            }
        }
        while (eventType != NetworkEventType.Nothing);
    }
コード例 #40
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void ReceiveTileChunk(NetworkReader reader, int connectionID)
    {
        byte tile = reader.ReadByte();
        int offset = reader.ReadInt32();
        byte[] chunk = UncrunchBytes(reader.ReadBytesAndSize());

        int x = tile % 16;
        int y = tile / 16;

        bool locked = locks.ContainsKey(tile);

        // if we're the host, disallow chunks not send by someone with a lock
        if (hosting && (!locked || locks[tile].id != connectionID)) return;

        // we're editing this tile, so ignore it
        if (locked && locks[tile] == worldView.viewer) return;

        Color[] colors = world.tileset.GetPixels(x * 32, y * 32, 32, 32);

        for (int i = 0; i < chunk.Length; ++i)
        {
            colors[i + offset] = world.palette[chunk[i]];
        }

        world.tileset.SetPixels(x * 32, y * 32, 32, 32, colors);
        world.tileset.Apply();

        if (hosting)
        {
            SendAll(TileInChunksMessages(world, tile));
        }
    }
コード例 #41
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void ReceivePaletteEdit(NetworkReader reader)
    {
        byte index = reader.ReadByte();
        Color color = reader.ReadColor32();

        world.palette[index] = color;
        paletteEditor.Refresh();
        SetPalette(index, color);
    }
コード例 #42
0
 public override void Deserialize(NetworkReader reader)
 {
     this.slotId = reader.ReadByte();
     this.readyState = reader.ReadBoolean();
 }
コード例 #43
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void ReceiveSetWall(NetworkReader reader)
    {
        byte tile = reader.ReadByte();
        bool wall = reader.ReadBoolean();

        if (hosting)
        {
            SendAll(SetWallMessage(tile, wall));
        }

        if (world.walls.Contains(tile) != wall)
        {
            audio.PlayOneShot(placeSound);

            if (wall)
            {
                world.walls.Add(tile);
            }
            else
            {
                world.walls.Remove(tile);
            }
        }

        worldView.RefreshWalls();
    }
コード例 #44
0
ファイル: Test.cs プロジェクト: Ragzouken/smooltool
    private void ReceiveSetTile(NetworkReader reader)
    {
        int location = reader.ReadInt32();
        byte tile = reader.ReadByte();

        if (hosting)
        {
            SendAll(SetTileMessage(location, tile));
        }

        if (world.tilemap[location] != tile)
        {
            audio.PlayOneShot(placeSound);
            worldView.SetTile(location, tile);
        }
    }