コード例 #1
0
ファイル: Program.cs プロジェクト: Metapyziks/Sphaira
        public static int Main(String[] args)
        {
            Trace.Listeners.Add(new DebugListener());

            _sTimer = new Stopwatch();

            NetWrapper.RegisterMessageHandler("WorldInfo", msg => {
                _sSkySeed     = msg.ReadInt32();
                _sRadius      = msg.ReadFloat();
                _sDensity     = msg.ReadFloat();
                _sTimerOffset = msg.ReadDouble() + NetWrapper.AverageRoundTripTime * 0.5;
                _sMyID        = msg.ReadUInt16();

                _sTimer.Restart();
            });

            NetWrapper.RegisterMessageHandler("PlayerInfo", msg => {
                var count   = msg.ReadUInt16();
                var players = new ushort[count];

                for (int i = 0; i < count; ++i)
                {
                    var id = players[i] = msg.ReadUInt16();

                    if (id != _sMyID && !_sPlayers.ContainsKey(id))
                    {
                        _sPlayers.Add(id, new PlayerInfo(id));
                    }
                }

                var removed = _sPlayers.Keys.Where(x => x == _sMyID || !players.Contains(x)).ToArray();

                foreach (var id in removed)
                {
                    _sPlayers.Remove(id);
                }
            });

            NetWrapper.RegisterMessageHandler("PlayerPos", msg => {
                var id = msg.ReadUInt16();

                if (_sPlayers.ContainsKey(id))
                {
                    var player      = _sPlayers[id];
                    player.Position = new Vector3(msg.ReadFloat(), msg.ReadFloat(), msg.ReadFloat());
                }
            });

            _sSkySeed = 0;
            _sMyID    = 0xffff;
            _sPlayers = new Dictionary <ushort, PlayerInfo>();

            var qualities = new[] {
                "Basic",
                "FxAA",
                "FxAA + Bloom"
            };

            Console.WriteLine("Select a display quality:");
            for (int i = 0; i < qualities.Length; ++i)
            {
                Console.WriteLine("{0}. {1}", i + 1, qualities[i]);
            }

            while (!int.TryParse(Console.ReadKey(true).KeyChar.ToString(), out _sQuality) ||
                   _sQuality < 1 || _sQuality > qualities.Length)
            {
                ;
            }

            _sQuality -= 1;

            Console.WriteLine("Selected {0}", qualities[_sQuality]);
            Console.WriteLine();

            Console.Write("Server hostname [default localhost]: ");
            var hostname = Console.ReadLine();

            NetWrapper.Connect(hostname.Length > 0 ? hostname : "localhost", 14242);
            NetWrapper.SendMessage("WorldInfo", NetDeliveryMethod.ReliableOrdered, 0);

            while (_sSkySeed == 0)
            {
                if (!NetWrapper.CheckForMessages())
                {
                    Thread.Sleep(16);
                }
            }

            using (Toolkit.Init(new ToolkitOptions {
                Backend = PlatformBackend.PreferNative
            })) {
                using (var app = new Program()) {
                    app.Run();
                }
            }

            NetWrapper.Disconnect();

            return(0);
        }