/// <summary>New user joined to the game as observer.</summary>
 /// <param name="realm">Realm.</param>
 /// <param name="user">User.</param>
 /// <returns>Aceept user to the game?</returns>
 public override bool Enter(IRealm realm, User user)
 {
     user["player"] = new Player {
         X = 64 * 3,
         Name = "Player_" + DateTime.Now.Millisecond,
         ClientSessionId = user.Session
     };
     realm.AddEntity(user["player"]);
     return true;
 }
        /// <summary>User input.</summary>
        /// <param name="realm">Realm.</param>
        /// <param name="user">User.</param>
        /// <param name="state">Keys.</param>
        public override void Input(IRealm realm, User user, InputState state)
        {
            var player = (Player)user["player"];
            var aimAngle = state.Get<float>("aimAngle");
            var fire = state.Get<bool>("fire");
            var aimAngleRad = aimAngle / 180.0f * Math.PI;

            if (fire) {
                var vectorX = (float)Math.Cos(aimAngleRad);
                var vectorY = (float)Math.Sin(aimAngleRad);
                var bullet = new Bullet {
                    X = player.X + vectorX * 25, Y = player.Y + vectorY * 25,
                    VectorX = vectorX * 50,
                    VectorY = vectorY * 50
                };
                realm.AddEntity(bullet);
            }
        }
        /// <summary>Realm has been started.</summary>
        /// <param name="realm">Realm.</param>
        public override void Start(IRealm realm)
        {
            // Creates decorations
            realm.AddEntity(new Decoration { X = 64 * 3, Y = 64 * 3 });
            realm.AddEntity(new Decoration { X = 64 * 6, Y = 64 * 3 });

            // Creates ground
            realm.AddEntity(Ground.CreateBlock(64 * 1, 64 * 2));
            realm.AddEntity(Ground.CreateBlock(64 * 0, 64 * 10));
            realm.AddEntity(Ground.CreateBlock(64 * 1, 64 * 1));
            realm.AddEntity(Ground.CreateBlock(64 * 1, 64 * 5));
            realm.AddEntity(Ground.CreateBlock(64 * 2, 64 * 5));
            realm.AddEntity(Ground.CreateBlock(64 * 3, 64 * 5));
            realm.AddEntity(Ground.CreateBlock(64 * 3, 64 * 6));
            realm.AddEntity(Ground.CreateBlock(64 * 4, 64 * 6));
            realm.AddEntity(Ground.CreateBlock(64 * 5, 64 * 6));
            realm.AddEntity(Ground.CreateBlock(64 * 6, 64 * 8));
            realm.AddEntity(Ground.CreateBlock(64 * 7, 64 * 8));
            realm.AddEntity(Ground.CreateBlock(64 * 8, 64 * 8));
            realm.AddEntity(Ground.CreateBlock(64 * 6, 64 * 5));
            realm.AddEntity(Ground.CreateBlock(64 * 0, 64 * 1));
            for (var i = 0; i < 20; ++i) {
                realm.AddEntity(Ground.CreateBlock(64 * i, 64 * 9));
                realm.AddEntity(Ground.CreateBlock(64 * 12, 64 * i));
            }

            realm.AddEntity(new Ball { X = 64 * 3, Y = 64 * 3 });
            realm.AddEntity(new Gate { X = 64 * 6, Y = 64 * 4 });

            /*_realm.AddEntity(new Ground(new[] {
                new Point(10, 100), new Point(290, 250), new Point(420, 450),  new Point(580, 350), new Point(620, 750), new Point(30, 790)
            }));*/
        }