コード例 #1
0
        protected override void HandleSeqMessage(BinaryMessage message)
        {
            var reader = message.GetReader();

            switch (message.Type)
            {
            case RMSG_NEWWDG:
                Receive(reader.ReadWidgetCreateEvent());
                break;

            case RMSG_WDGMSG:
                Receive(reader.ReadWidgetMessageEvent());
                break;

            case RMSG_DSTWDG:
                Receive(reader.ReadWidgetDestroyEvent());
                break;

            case RMSG_MAPIV:
            {
                int type = reader.ReadByte();
                switch (type)
                {
                case 0:
                    Receive(reader.ReadMapInvalidateGridEvent());
                    break;

                case 1:
                    Receive(reader.ReadMapInvalidateRegionEvent());
                    break;

                case 2:
                    Receive(new MapInvalidate());
                    break;
                }
                break;
            }

            case RMSG_GLOBLOB:
                bool isIncremental = reader.ReadByte() != 0;
                while (reader.HasRemaining)
                {
                    var type = reader.ReadCString();
                    var args = reader.ReadList();
                    switch (type)
                    {
                    case "tm":
                        Receive(new UpdateGameTime {
                            Time          = (int)args[0],
                            IsIncremental = isIncremental
                        });
                        break;

                    case "astro":
                        Receive(new UpdateAstronomy {
                            Day       = (float)args[0],
                            MoonPhase = (float)args[1],
                            Year      = (float)args[2],
                            IsNight   = (byte)args[3] != 0,
                            MoonColor = (Color)args[4]
                        });
                        break;

                    case "light":
                        Receive(new UpdateLighting {
                            Ambient   = (Color)args[0],
                            Diffuse   = (Color)args[1],
                            Specular  = (Color)args[2],
                            Angle     = (float)args[3],
                            Elevation = (float)args[4]
                        });
                        break;

                    case "sky":
                        if (args.Length > 0)
                        {
                            // TODO: add actual data to sky update message
                            Receive(new SkyUpdate());
                        }
                        else
                        {
                            Receive(new SkyClear());
                        }
                        break;

                    case "wth":
                        // TODO: add actual data to weather update message
                        Receive(new UpdateWeather());
                        break;
                    }
                }
                break;

            case RMSG_PAGINAE:
                Receive(reader.ReadGameActionsUpdateEvent());
                break;

            case RMSG_RESID:
                Receive(reader.ReadResourceLoadEvent());
                break;

            case RMSG_PARTY:
                while (reader.HasRemaining)
                {
                    int type = reader.ReadByte();
                    switch (type)
                    {
                    case PD_LIST:
                        Receive(reader.ReadPartyUpdateEvent());
                        break;

                    case PD_LEADER:
                        Receive(reader.ReadPartyLeaderChangeEvent());
                        break;

                    case PD_MEMBER:
                        Receive(reader.ReadPartyMemberUpdateEvent());
                        break;
                    }
                }
                break;

            case RMSG_SFX:
                Receive(reader.ReadPlaySoundEvent());
                break;

            case RMSG_CATTR:
                Receive(reader.ReadCharAttributesUpdateEvent());
                break;

            case RMSG_MUSIC:
                Receive(new PlayMusic());
                break;

            case RMSG_SESSKEY:
                reader.ReadSessionKeyEvent();
                break;

            default:
                throw new Exception("Unknown rmsg type: " + message.Type);
            }
        }
コード例 #2
0
        protected override void HandleSeqMessage(BinaryMessage message)
        {
            var reader = message.GetReader();

            switch (message.Type)
            {
            case RMSG_NEWWDG:
                Receive(reader.ReadWidgetCreateEvent());
                break;

            case RMSG_WDGMSG:
                Receive(reader.ReadWidgetMessageEvent());
                break;

            case RMSG_DSTWDG:
                Receive(reader.ReadWidgetDestroyEvent());
                break;

            case RMSG_MAPIV:
            {
                int invalidationType = reader.ReadByte();
                switch (invalidationType)
                {
                case 0:
                    Receive(reader.ReadMapInvalidateGridEvent());
                    break;

                case 1:
                    Receive(reader.ReadMapInvalidateRegionEvent());
                    break;

                case 2:
                    Receive(new MapInvalidate());
                    break;
                }
                break;
            }

            case RMSG_GLOBLOB:
                while (reader.HasRemaining)
                {
                    switch (reader.ReadByte())
                    {
                    case GMSG_TIME:
                        Receive(reader.ReadGameTimeUpdateEvent());
                        break;

                    case GMSG_ASTRO:
                        Receive(reader.ReadAstronomyUpdateEvent());
                        break;

                    case GMSG_LIGHT:
                        Receive(reader.ReadAmbientLightUpdateEvent());
                        break;
                    }
                }
                break;

            case RMSG_PAGINAE:
                Receive(reader.ReadGameActionsUpdateEvent());
                break;

            case RMSG_RESID:
                Receive(reader.ReadResourceLoadEvent());
                break;

            case RMSG_PARTY:
                while (reader.HasRemaining)
                {
                    int type = reader.ReadByte();
                    switch (type)
                    {
                    case PD_LIST:
                        Receive(reader.ReadPartyUpdateEvent());
                        break;

                    case PD_LEADER:
                        Receive(reader.ReadPartyLeaderChangeEvent());
                        break;

                    case PD_MEMBER:
                        Receive(reader.ReadPartyMemberUpdateEvent());
                        break;
                    }
                }
                break;

            case RMSG_SFX:
                Receive(reader.ReadPlaySoundEvent());
                break;

            case RMSG_CATTR:
                Receive(reader.ReadCharAttributesUpdateEvent());
                break;

            case RMSG_MUSIC:
                Receive(new PlayMusic());
                break;

            case RMSG_TILES:
                Receive(reader.ReadTilesetsLoadEvent());
                break;

            case RMSG_BUFF:
            {
                var type = reader.ReadCString();
                switch (type)
                {
                case "clear":
                    Receive(new BuffClearAll());
                    break;

                case "rm":
                    Receive(reader.ReadBuffRemoveEvent());
                    break;

                case "set":
                    Receive(reader.ReadBuffUpdateEvent());
                    break;
                }
                break;
            }

            default:
                throw new Exception("Unknown rmsg type: " + message.Type);
            }
        }