예제 #1
0
        private void InitializeEvents()
        {
            Events.ServerPlayerHello +=
                e =>
            {
                MyIdentity = e;

                ShowMessage("Howdy, " + e.name);
            };


            Action <int, string> CreateRemoteEgo =
                (user, name) =>
            {
                // could use event instead
                // dictonary.valueset +=
                CoPlayerNames[user] = name;

                // create remote ego
                RemoteEgos[user] = new Worm
                {
                    Color    = 0xff,
                    Canvas   = Map.Canvas,
                    Wrapper  = Map.Wrapper,
                    Location = new Point(),
                    ThisNetworkInstanceCannotEat = true
                }.AddTo(Map.Worms).Grow();

                //ShowMessage("remote worm created - " + Map.Worms.Count);
            };

            Events.ServerPlayerJoined +=
                e =>
            {
                CreateRemoteEgo(e.user, e.name);


                ShowMessage("Player joined - " + e.name);

                Messages.PlayerAdvertise(MyIdentity.name);
                Messages.TeleportTo((int)Map.Ego.Location.x, (int)Map.Ego.Location.y);

                for (int i = 1; i < Map.Ego.Parts.Count; i++)
                {
                    // there is no apple, but we just need to gain in size

                    Messages.EatApple((int)Map.Ego.Location.x, (int)Map.Ego.Location.y);
                }
            };



            #region ServerPlayerLeft
            Events.ServerPlayerLeft +=
                e =>
            {
                if (CoPlayerNames.ContainsKey(e.user))
                {
                    CoPlayerNames.Remove(e.user);
                }

                if (Cursors.ContainsKey(e.user))
                {
                    Cursors[e.user].Orphanize();
                    Cursors.Remove(e.user);
                }

                if (RemoteEgos.ContainsKey(e.user))
                {
                    var w = RemoteEgos[e.user];

                    while (w.Parts.Count > 0)
                    {
                        w.Shrink();
                    }

                    Map.Worms.Remove(w);
                    RemoteEgos.Remove(e.user);
                }

                ShowMessage("Player left - " + e.name);
            };
            #endregion

            Events.UserPlayerAdvertise +=
                e =>
            {
                if (CoPlayerNames.ContainsKey(e.user))
                {
                    return;
                }

                CreateRemoteEgo(e.user, e.name);

                // ShowMessage("Player already here - " + e.name);
            };


            #region MouseMove
            Events.UserMouseMove +=
                e =>
            {
                var s = default(ShapeWithMovement);

                if (Cursors.ContainsKey(e.user))
                {
                    s = Cursors[e.user];
                }
                else
                {
                    s = new ShapeWithMovement
                    {
                        filters = new[] { new DropShadowFilter() },
                        alpha   = 0.5
                    };


                    var g = s.graphics;

                    g.beginFill((uint)e.color);
                    g.moveTo(0, 0);
                    g.lineTo(14, 14);
                    g.lineTo(0, 20);
                    g.lineTo(0, 0);
                    g.endFill();

                    Cursors[e.user] = s;
                };

                s.AttachTo(this).MoveTo(e.x, e.y);
            };


            Events.UserMouseOut +=
                e =>
            {
                if (Cursors.ContainsKey(e.color))
                {
                    Cursors[e.color].Orphanize();
                }
            };
            #endregion

            Events.UserVectorChanged +=
                e =>
            {
                if (RemoteEgos.ContainsKey(e.user))
                {
                    RemoteEgos[e.user].Vector = new Point(e.x, e.y);
                }
            };

            Events.ServerSendMap +=
                e =>
            {
                OnServerSendMap();
            };

            Events.UserLevelHasEnded +=
                e =>
            {
                // update rankings

                OnLevelHasEnded();
            };

            Events.UserSendMap +=
                e =>
            {
                // we got a new map, do we need it?

                foreach (var v in Map.Apples)
                {
                    v.Control.Orphanize();
                }

                Map.Apples.Clear();

                // now add apples as the new map says
                var integers_as_bytes = e.buttons.Select(i => (byte)i).ToArray();

                var m = new MemoryStream(integers_as_bytes);

                var AppleCount = m.ReadByte();

                for (int i = 0; i < AppleCount; i++)
                {
                    new Apple
                    {
                        Wrapper  = Map.Wrapper,
                        Location = new Point(m.ReadByte(), m.ReadByte())
                    }.AddTo(Map.Apples).AttachTo(Map.Canvas);
                }

                //ShowMessage("got map: " + integers_as_bytes.Length);
            };

            Events.UserTeleportTo +=
                e =>
            {
                //ShowMessage(new { teleport = e.user, e.x, e.y }.ToString());

                if (RemoteEgos.ContainsKey(e.user))
                {
                    var w = RemoteEgos[e.user];

                    w.Color    = 0xff;
                    w.IsAlive  = true;
                    w.Location = new Point(e.x, e.y);
                    w.Grow();
                    w.Shrink();
                }
            };

            Events.UserEatApple +=
                e =>
            {
                if (RemoteEgos.ContainsKey(e.user))
                {
                    var w = RemoteEgos[e.user];

                    w.Grow();


                    foreach (var v in from i in Map.Apples
                             where i.Location.IsEqual(new Point(e.x, e.y))
                             select i)
                    {
                        v.Control.Orphanize();
                        Map.Apples.Remove(v);

                        Sounds.sound20.ToSoundAsset().play();
                    }
                }
            };

            #region EatThisWorm
            Events.UserEatThisWormBegin +=
                e =>
            {
                if (!RemoteEgos.ContainsKey(e.user))
                {
                    return;
                }

                var user = RemoteEgos[e.user];

                if (!AllEgos.Any(i => i.Key == e.food))
                {
                    return;
                }

                var food = AllEgos.Single(i => i.Key == e.food).Value;


                food.WormWhoIsGoingToEatMe = user;
                food.Color = 0x8f8f8f;

                // whatif async end never comes?
            };

            Events.UserEatThisWormEnd +=
                e =>
            {
                if (!RemoteEgos.ContainsKey(e.user))
                {
                    return;
                }

                var user = RemoteEgos[e.user];

                if (!AllEgos.Any(i => i.Key == e.food))
                {
                    return;
                }

                var food = AllEgos.Single(i => i.Key == e.food).Value;

                food.IsAlive = false;

                // do the eating
                while (food.Parts.Count > 1)
                {
                    food.Shrink();
                    user.Grow();
                }

                food.WormWhoIsGoingToEatMe = null;

                if (food == Map.Ego)
                {
                    // we now decide how long must we be dead

                    DeathDelay.AtDelayDo(
                        delegate
                    {
                        food.IsAlive = true;
                        food.Color   = 0x00ff00;

                        Messages.TeleportTo((int)Map.Ego.Location.x, (int)Map.Ego.Location.y);
                    }
                        );
                }
            };
            #endregion
        }
예제 #2
0
		private void InitializeEvents()
		{
			Events.ServerPlayerHello +=
				e =>
				{
					MyIdentity = e;

					ShowMessage("Howdy, " + e.name);
				};


			Action<int, string> CreateRemoteEgo =
				(user, name) =>
				{
					// could use event instead
					// dictonary.valueset +=
					CoPlayerNames[user] = name;

					// create remote ego
					RemoteEgos[user] = new Worm
					{
						Color = 0xff,
						Canvas = Map.Canvas,
						Wrapper = Map.Wrapper,
						Location = new Point(),
						ThisNetworkInstanceCannotEat = true
					}.AddTo(Map.Worms).Grow();

					//ShowMessage("remote worm created - " + Map.Worms.Count);
				};

			Events.ServerPlayerJoined +=
			  e =>
			  {
				  CreateRemoteEgo(e.user, e.name);


				  ShowMessage("Player joined - " + e.name);

				  Messages.PlayerAdvertise(MyIdentity.name);
				  Messages.TeleportTo((int)Map.Ego.Location.x, (int)Map.Ego.Location.y);

				  for (int i = 1; i < Map.Ego.Parts.Count; i++)
				  {
					  // there is no apple, but we just need to gain in size

					  Messages.EatApple((int)Map.Ego.Location.x, (int)Map.Ego.Location.y);
				  }
			  };



			#region ServerPlayerLeft
			Events.ServerPlayerLeft +=
				  e =>
				  {
					  if (CoPlayerNames.ContainsKey(e.user))
					  {
						  CoPlayerNames.Remove(e.user);
					  }

					  if (Cursors.ContainsKey(e.user))
					  {
						  Cursors[e.user].Orphanize();
						  Cursors.Remove(e.user);
					  }

					  if (RemoteEgos.ContainsKey(e.user))
					  {
						  var w = RemoteEgos[e.user];

						  while (w.Parts.Count > 0)
							  w.Shrink();

						  Map.Worms.Remove(w);
						  RemoteEgos.Remove(e.user);
					  }

					  ShowMessage("Player left - " + e.name);
				  };
			#endregion

			Events.UserPlayerAdvertise +=
				e =>
				{
					if (CoPlayerNames.ContainsKey(e.user))
						return;

					CreateRemoteEgo(e.user, e.name);

					// ShowMessage("Player already here - " + e.name);
				};


			#region MouseMove
			Events.UserMouseMove +=
					e =>
					{
						var s = default(ShapeWithMovement);

						if (Cursors.ContainsKey(e.user))
							s = Cursors[e.user];
						else
						{
							s = new ShapeWithMovement
							{
								filters = new[] { new DropShadowFilter() },
								alpha = 0.5
							};


							var g = s.graphics;

							g.beginFill((uint)e.color);
							g.moveTo(0, 0);
							g.lineTo(14, 14);
							g.lineTo(0, 20);
							g.lineTo(0, 0);
							g.endFill();

							Cursors[e.user] = s;
						};

						s.AttachTo(this).MoveTo(e.x, e.y);
					};
			

			Events.UserMouseOut +=
			   e =>
			   {
				   if (Cursors.ContainsKey(e.color))
				   {
					   Cursors[e.color].Orphanize();
				   }
			   };
			#endregion

			Events.UserVectorChanged +=
				e =>
				{
					if (RemoteEgos.ContainsKey(e.user))
					{
						RemoteEgos[e.user].Vector = new Point(e.x, e.y);
					}
				};

			Events.ServerSendMap +=
				e =>
				{
					
					OnServerSendMap();

				};

			Events.UserLevelHasEnded +=
				e =>
				{
					// update rankings

					OnLevelHasEnded();
				};

			Events.UserSendMap +=
				e =>
				{
					// we got a new map, do we need it?

					foreach (var v in Map.Apples)
					{
						v.Control.Orphanize();
					}

					Map.Apples.Clear();

					// now add apples as the new map says
					var integers_as_bytes = e.buttons.Select(i => (byte)i).ToArray();

					var m = new MemoryStream(integers_as_bytes);

					var AppleCount = m.ReadByte();

					for (int i = 0; i < AppleCount; i++)
					{
						new Apple
						{
							Wrapper = Map.Wrapper,
							Location = new Point(m.ReadByte(), m.ReadByte())
						}.AddTo(Map.Apples).AttachTo(Map.Canvas);
					}

					//ShowMessage("got map: " + integers_as_bytes.Length);
				};

			Events.UserTeleportTo +=
				e =>
				{
					//ShowMessage(new { teleport = e.user, e.x, e.y }.ToString());

					if (RemoteEgos.ContainsKey(e.user))
					{
						var w = RemoteEgos[e.user];

						w.Color = 0xff;
						w.IsAlive = true;
						w.Location = new Point(e.x, e.y);
						w.Grow();
						w.Shrink();
					}
				};

			Events.UserEatApple +=
				e =>
				{
					if (RemoteEgos.ContainsKey(e.user))
					{
						var w = RemoteEgos[e.user];

						w.Grow();


						foreach (var v in from i in Map.Apples
										  where i.Location.IsEqual(new Point(e.x, e.y))
										  select i)
						{
							v.Control.Orphanize();
							Map.Apples.Remove(v);

							Sounds.sound20.ToSoundAsset().play();

						}

					}
				};

			#region EatThisWorm
			Events.UserEatThisWormBegin +=
				e =>
				{
					if (!RemoteEgos.ContainsKey(e.user))
						return;

					var user = RemoteEgos[e.user];

					if (!AllEgos.Any(i => i.Key == e.food))
						return;

					var food = AllEgos.Single(i => i.Key == e.food).Value;

					
					food.WormWhoIsGoingToEatMe = user;
					food.Color = 0x8f8f8f;

					// whatif async end never comes?

				};

			Events.UserEatThisWormEnd +=
				e =>
				{
					if (!RemoteEgos.ContainsKey(e.user))
						return;

					var user = RemoteEgos[e.user];

					if (!AllEgos.Any(i => i.Key == e.food))
						return;

					var food = AllEgos.Single(i => i.Key == e.food).Value;

					food.IsAlive = false;

					// do the eating 
					while (food.Parts.Count > 1)
					{
						food.Shrink();
						user.Grow();
					}

					food.WormWhoIsGoingToEatMe = null;

					if (food == Map.Ego)
					{
						// we now decide how long must we be dead

						DeathDelay.AtDelayDo(
							delegate
							{
								food.IsAlive = true;
								food.Color = 0x00ff00;

								Messages.TeleportTo((int)Map.Ego.Location.x, (int)Map.Ego.Location.y);
							}
						);
					}

				};
			#endregion

		}
        private void InitializeEvents()
        {

            var MyIdentity = default(SharedClass1.RemoteEvents.ServerPlayerHelloArguments);

            // events after init
            Events.ServerPlayerHello +=
                e =>
                {
                    MyIdentity = e;

                    ShowMessage("Howdy, " + e.name);
                };


            Events.ServerPlayerJoined +=
              e =>
              {
                  CoPlayerNames[e.user] = e.name;

                  ShowMessage("Player joined - " + e.name);


                  Messages.PlayerAdvertise(MyIdentity.name);
              };

            var Cursors = new Dictionary<int, ShapeWithMovement>();


            Events.ServerPlayerLeft +=
              e =>
              {
                  if (CoPlayerNames.ContainsKey(e.user))
                  {
                      CoPlayerNames.Remove(e.user);
                  }

                  if (Cursors.ContainsKey(e.user))
                  {
                      Cursors[e.user].Orphanize();
                      Cursors.Remove(e.user);
                  }

                  ShowMessage("Player left - " + e.name);
              };

            Events.UserPlayerAdvertise +=
                e =>
                {
                    if (CoPlayerNames.ContainsKey(e.user))
                        return;

                    CoPlayerNames[e.user] = e.name;

                    ShowMessage("Player already here - " + e.name);
                };



            Events.UserMouseMove +=
                e =>
                {
                    var s = default(ShapeWithMovement);

                    if (Cursors.ContainsKey(e.user))
                        s = Cursors[e.user];
                    else
                    {
                        s = new ShapeWithMovement
                            {
                                filters = new[] { new DropShadowFilter() },
                                alpha = 0.5
                            };


                        var g = s.graphics;

                        g.beginFill((uint)e.color);
                        g.moveTo(0, 0);
                        g.lineTo(14, 14);
                        g.lineTo(0, 20);
                        g.lineTo(0, 0);
                        g.endFill();

                        Cursors[e.user] = s;
                    };

                    s.AttachTo(this).MoveTo(e.x, e.y);
                };

            Events.UserMouseOut +=
                e =>
                {
                    if (Cursors.ContainsKey(e.color))
                    {
                        Cursors[e.color].Orphanize();
                    }
                };

            Events.UserSendMapLater +=
                e =>
                {
                    ServerSendMapEnabled = false;
                    Field.mouseChildren = false;
                };

            Events.ServerSendMap +=
                e =>
                {
                    // do not always respond
                    if (!ServerSendMapEnabled)
                    {
                        Messages.SendMapLater();

                        return;
                    }

                    SendMap();
                };

            Events.UserSendMap +=
                e =>
                {
                    RemotePlayerMustSendNewMap = false;

                    ShowMessage("Got new map:)");
                    StopCrudeMapReset();

                    Field.mouseChildren = true;

                    for (int i = 0; i < Field.Buttons.Length; i++)
                    {
                        var v = Field.Buttons[i];

                        var x = new BitField { Value = e.buttons[i] };


                        v.IsMined = x[1];
                        v.IsFlag = x[2];
                        v.Enabled = x[3];

                    }

                    foreach (var v in Field.Buttons)
                    {
                        if (v.Enabled)
                            v.Update();
                        else
                            v.RevealLocal();
                    }
                };

            Events.UserSetFlag +=
                e =>
                {
                    StopCrudeMapReset();

                    Field.Buttons[e.button].IsFlag = e.value == 1;
                    Field.Buttons[e.button].Update();
                    Field.Buttons[e.button].snd_flag.play();
                    Field.Buttons[e.button].CheckComplete();
                };

            Events.UserReveal +=
                e =>
                {
                    StopCrudeMapReset();

                    Field.Buttons[e.button].RevealOrExplode(false,
                        delegate
                        {
                            ShowMessage(CoPlayerNames[e.user] + " found a mine");
                        }
                    );

                    Field.Buttons[e.button].CheckComplete();
                };
        }
        private void InitializeEvents()
        {
            var MyIdentity = default(SharedClass1.RemoteEvents.ServerPlayerHelloArguments);

            Events.ServerPlayerHello +=
                e =>
                {
                    MyIdentity = e;

                    ShowMessage("Howdy, " + e.name);
                };

            Events.ServerPlayerJoined +=
              e =>
              {
                  ShowMessage("Player joined - " + e.name);


                  Messages.PlayerAdvertise(MyIdentity.name);
              };

            var Cursors = new Dictionary<int, ShapeWithMovement>();

            Events.ServerPlayerLeft +=
              e =>
              {
                  if (Cursors.ContainsKey(e.user))
                  {
                      Cursors[e.user].Orphanize();
                      Cursors.Remove(e.user);
                  }

                  ShowMessage("Player left - " + e.name);
              };

            Events.UserPlayerAdvertise +=
                e =>
                {
                    ShowMessage("Player already here - " + e.name);
                };

            Events.ServerSendMap +=
                e =>
                {
                    SendMap();
                };

            Events.UserSendMap +=
                e =>
                {
                    SyncMap(e.data);
                };

            Events.UserClick +=
                e =>
                {
                    DecreaseClickCountdown(false);

                    Map.UserClicksWithSound[e.x, e.y]();
                    Map.CheckForCompleteness(false);
                };



            Events.UserMouseMove +=
                e =>
                {
                    var s = default(ShapeWithMovement);

                    if (Cursors.ContainsKey(e.user))
                        s = Cursors[e.user];
                    else
                    {
                        s = new ShapeWithMovement
                        {
                            filters = new[] { new DropShadowFilter() },
                            alpha = 0.5
                        };


                        var g = s.graphics;

                        g.beginFill((uint)e.color);
                        g.moveTo(0, 0);
                        g.lineTo(14, 14);
                        g.lineTo(0, 20);
                        g.lineTo(0, 0);
                        g.endFill();

                        Cursors[e.user] = s;
                    };

                    s.AttachTo(this).MoveTo(e.x, e.y);
                };

        }