public void ClientActionReceived(MultiplayerClient client, MultiplayerAction action)
        {
            switch (action.action)
            {
            case MultiplayerAction.Action.AVATAR_MOVE:
            {
                int     objectId = Int32.Parse(action.GetParameter(0));
                Vector3 pos      = new Vector3(
                    Single.Parse(action.GetParameter(1)),
                    Single.Parse(action.GetParameter(2)),
                    Single.Parse(action.GetParameter(3)));
                Vector3 rot = new Vector3(
                    Single.Parse(action.GetParameter(4)),
                    Single.Parse(action.GetParameter(5)),
                    Single.Parse(action.GetParameter(6)));

                if (objectId == client.id)
                {
                    Avatar avatar = world.avatarManager.GetAvatarByObjectId(objectId);

                    avatar.position = pos;
                    avatar.rotation = rot;

                    server.SendToEveryone(action, client.id);
                }
                break;
            }

            case MultiplayerAction.Action.TILE_CREATE:
            {
                byte         tileType = byte.Parse(action.GetParameter(0));
                TilePosition pos      = new TilePosition(
                    Int32.Parse(action.GetParameter(1)),
                    Int32.Parse(action.GetParameter(2)),
                    Int32.Parse(action.GetParameter(3)));

                CreateTile(pos, tileType);
                break;
            }

            case MultiplayerAction.Action.TILE_CLICKED:
            {
                TilePosition pos = new TilePosition(
                    Int32.Parse(action.GetParameter(0)),
                    Int32.Parse(action.GetParameter(1)),
                    Int32.Parse(action.GetParameter(2)));
                this.TileClicked(pos);
                break;
            }

            case MultiplayerAction.Action.TILE_HIT:
            {
                string itemId = action.GetParameter(0);

                TilePosition pos = new TilePosition(
                    Int32.Parse(action.GetParameter(1)),
                    Int32.Parse(action.GetParameter(2)),
                    Int32.Parse(action.GetParameter(3)));

                this.TileHit(pos, world.itemManager.GetItemDefinitionById(itemId));
                break;
            }
            }
        }
예제 #2
0
        public void ClientActionReceived(MultiplayerClient client, MultiplayerAction action)
        {
            switch (action.action)
            {
            case MultiplayerAction.Action.INITIAL_DATA:
                initializationDataReceived = true;
                initializationData         = action.extraData;
                break;

            case MultiplayerAction.Action.AVATAR_MOVE:
            {
                int     objectId = Int32.Parse(action.GetParameter(0));
                Vector3 pos      = new Vector3(
                    Single.Parse(action.GetParameter(1)),
                    Single.Parse(action.GetParameter(2)),
                    Single.Parse(action.GetParameter(3)));
                Vector3 rot = new Vector3(
                    Single.Parse(action.GetParameter(4)),
                    Single.Parse(action.GetParameter(5)),
                    Single.Parse(action.GetParameter(6)));

                Avatar avatar = world.avatarManager.GetAvatarByObjectId(objectId);
                avatar.position = pos;
                avatar.rotation = rot;
                break;
            }

            case MultiplayerAction.Action.AVATAR_CREATE:
            {
                int     objectId           = Int32.Parse(action.GetParameter(0));
                string  avatarDefinitionId = action.GetParameter(1);
                Vector3 pos = new Vector3(
                    Single.Parse(action.GetParameter(2)),
                    Single.Parse(action.GetParameter(3)),
                    Single.Parse(action.GetParameter(4)));
                Vector3 rot = new Vector3(
                    Single.Parse(action.GetParameter(5)),
                    Single.Parse(action.GetParameter(6)),
                    Single.Parse(action.GetParameter(7)));

                Avatar avatar = world.avatarManager.CreateAvatar(world.avatarManager.GetAvatarDefinitionById(avatarDefinitionId), objectId, pos, true);
                avatar.rotation = rot;
                break;
            }

            case MultiplayerAction.Action.AVATAR_DESTROY:
            {
                int objectId = Int32.Parse(action.GetParameter(0));
                world.avatarManager.DestroyAvatar(world.avatarManager.GetAvatarByObjectId(objectId));
                break;
            }

            case MultiplayerAction.Action.TILE_INVALIDATED:
            {
                MemoryStream ms = new MemoryStream(action.extraData);
                BinaryReader br = new BinaryReader(ms);

                int  n    = br.ReadInt32();
                Tile tile = new Tile();

                for (int i = 0; i < n; i++)
                {
                    TilePosition pos = SerializationUtils.ReadTilePosition(br);
                    tile.Deserialize(br.ReadUInt32());

                    if (tile.tileType != world.tileManager.GetTileType(pos))
                    {
                        world.tileManager.SetTileType(pos, tile.tileType);
                    }
                    if (tile.OnFire != world.tileManager.GetTileOnFire(pos))
                    {
                        world.tileManager.SetTileOnFire(pos, tile.OnFire);
                    }
                    if (tile.ExtraData != world.tileManager.GetTileExtraData(pos))
                    {
                        world.tileManager.SetTileExtraData(pos, tile.ExtraData);
                    }
                    if (tile.Energy != world.tileManager.GetTileEnergy(pos))
                    {
                        world.tileManager.SetTileEnergy(pos, tile.Energy);
                    }
                }
                break;
            }
            }
        }
        public void ClientActionReceived(MultiplayerClient client, MultiplayerAction action)
        {
            switch (action.action)
            {
                case MultiplayerAction.Action.AVATAR_MOVE:
                {
                    int objectId = Int32.Parse(action.GetParameter(0));
                    Vector3 pos = new Vector3(
                        Single.Parse(action.GetParameter(1)),
                        Single.Parse(action.GetParameter(2)),
                        Single.Parse(action.GetParameter(3)));
                    Vector3 rot = new Vector3(
                        Single.Parse(action.GetParameter(4)),
                        Single.Parse(action.GetParameter(5)),
                        Single.Parse(action.GetParameter(6)));

                    if (objectId == client.id)
                    {
                        Avatar avatar = world.avatarManager.GetAvatarByObjectId(objectId);

                        avatar.position = pos;
                        avatar.rotation = rot;
                        
                        server.SendToEveryone(action, client.id);
                    }
                    break;
                }

                case MultiplayerAction.Action.TILE_CREATE:
                {
                    byte tileType = byte.Parse(action.GetParameter(0));
                    TilePosition pos = new TilePosition(
                        Int32.Parse(action.GetParameter(1)),
                        Int32.Parse(action.GetParameter(2)),
                        Int32.Parse(action.GetParameter(3)));

                    CreateTile(pos, tileType);
                    break;
                }

                case MultiplayerAction.Action.TILE_CLICKED:
                {
                    TilePosition pos = new TilePosition(
                        Int32.Parse(action.GetParameter(0)),
                        Int32.Parse(action.GetParameter(1)),
                        Int32.Parse(action.GetParameter(2)));
                    this.TileClicked(pos);
                    break;
                }

                case MultiplayerAction.Action.TILE_HIT:
                {
                    string itemId = action.GetParameter(0);

                    TilePosition pos = new TilePosition(
                        Int32.Parse(action.GetParameter(1)),
                        Int32.Parse(action.GetParameter(2)),
                        Int32.Parse(action.GetParameter(3)));

                    this.TileHit(pos, world.itemManager.GetItemDefinitionById(itemId));
                    break;
                }
            }
        }
        public void ClientActionReceived(MultiplayerClient client, MultiplayerAction action)
        {
            switch (action.action)
            {
                case MultiplayerAction.Action.INITIAL_DATA:
                    initializationDataReceived = true;
                    initializationData = action.extraData;
                    break;

                case MultiplayerAction.Action.AVATAR_MOVE:
                {
                    int objectId = Int32.Parse(action.GetParameter(0));
                    Vector3 pos = new Vector3(
                        Single.Parse(action.GetParameter(1)),
                        Single.Parse(action.GetParameter(2)),
                        Single.Parse(action.GetParameter(3)));
                    Vector3 rot = new Vector3(
                        Single.Parse(action.GetParameter(4)),
                        Single.Parse(action.GetParameter(5)),
                        Single.Parse(action.GetParameter(6)));

                    Avatar avatar = world.avatarManager.GetAvatarByObjectId(objectId);
                    avatar.position = pos;
                    avatar.rotation = rot;
                    break;
                }

                case MultiplayerAction.Action.AVATAR_CREATE:
                {
                    int objectId = Int32.Parse(action.GetParameter(0));
                    string avatarDefinitionId = action.GetParameter(1);
                    Vector3 pos = new Vector3(
                        Single.Parse(action.GetParameter(2)),
                        Single.Parse(action.GetParameter(3)),
                        Single.Parse(action.GetParameter(4)));
                    Vector3 rot = new Vector3(
                        Single.Parse(action.GetParameter(5)),
                        Single.Parse(action.GetParameter(6)),
                        Single.Parse(action.GetParameter(7)));

                    Avatar avatar = world.avatarManager.CreateAvatar(world.avatarManager.GetAvatarDefinitionById(avatarDefinitionId), objectId, pos, true);
                    avatar.rotation = rot;
                    break;
                }

                case MultiplayerAction.Action.AVATAR_DESTROY:
                {
                    int objectId = Int32.Parse(action.GetParameter(0));
                    world.avatarManager.DestroyAvatar(world.avatarManager.GetAvatarByObjectId(objectId));
                    break;
                }

                case MultiplayerAction.Action.TILE_INVALIDATED:
                {
                    MemoryStream ms = new MemoryStream(action.extraData);
                    BinaryReader br = new BinaryReader(ms);

                    int n = br.ReadInt32();
                    Tile tile = new Tile();

                    for (int i = 0; i < n; i++)
                    {
                        TilePosition pos = SerializationUtils.ReadTilePosition(br);
                        tile.Deserialize(br.ReadUInt32());

                        if (tile.tileType != world.tileManager.GetTileType(pos))
                            world.tileManager.SetTileType(pos, tile.tileType);
                        if (tile.OnFire != world.tileManager.GetTileOnFire(pos))
                            world.tileManager.SetTileOnFire(pos, tile.OnFire);
                        if (tile.ExtraData != world.tileManager.GetTileExtraData(pos))
                            world.tileManager.SetTileExtraData(pos, tile.ExtraData);
                        if (tile.Energy != world.tileManager.GetTileEnergy(pos))
                            world.tileManager.SetTileEnergy(pos, tile.Energy);
                    }
                    break;
                }
            }
        }