Example #1
0
		public static void SendMessage(Connection c, SharedClass1.Messages m, params object[] e)
		{
			var i = new Message(((int)m).ToString());

			foreach (var z in e)
			{
				i.Add(z);
			}

			c.Send(i);
		}
		void UserWalkTo(SharedClass1.RemoteEvents.UserWalkToArguments e)
		{
			var MemoryStream_UInt8 = e.bytestream.Select(i => (byte)i).ToArray();
			var ms = new MemoryStream(MemoryStream_UInt8);
			var mr = new BinaryReader(ms);

			var x = mr.ReadDouble();
			var y = mr.ReadDouble();

			this.CoPlayers.Where(k => k.Identity.user == e.user).ForEach(k => k.Guard.WalkTo(x, y));
		}
		void UserGuardLookAt(SharedClass1.RemoteEvents.UserGuardLookAtArguments e)
		{
			this.Map.GuardSprites.Where(k => k.ConstructorIndexForSync == e.index).ForEach(k => k.Direction = e.arc);
			
		}
		void UserGuardWalkTo(SharedClass1.RemoteEvents.UserGuardWalkToArguments e)
		{
			var MemoryStream_UInt8 = e.bytestream.Select(i => (byte)i).ToArray();
			var ms = new MemoryStream(MemoryStream_UInt8);
			var mr = new BinaryReader(ms);

			var index = mr.ReadInt32();
			var x = mr.ReadDouble();
			var y = mr.ReadDouble();


			var Targets = this.Map.GuardSprites.Where(k => k.ConstructorIndexForSync == index).ToArray();

			//Map.WriteLine("got UserGuardWalkTo " + MemoryStream_UInt8.Length + " " + new { index, Targets.Length });


			Targets.ForEach(k => k.WalkTo(x, y));

		}
		void UserLookAt(SharedClass1.RemoteEvents.UserLookAtArguments e)
		{
			this.CoPlayers.Where(k => k.Identity.user == e.user).ForEach(k => k.Guard.Direction = e.arc);

		}
		private void PlayerAdvertise(SharedClass1.RemoteEvents.UserPlayerAdvertiseArguments e)
		{
			CoPlayer c = CoPlayers.SingleOrDefault(k => k.Identity.user == e.user);

			#region does that coplayer already exist?
			if (c == null)
			{
				// the player has just joined

				c = new CoPlayer { Identity = e }.AddTo(CoPlayers);



				//c.WalkToTeleported +=
				//    delegate
				//    {
				//        this.Map.WriteLine(c.Identity.name + " has teleported");
				//    };

				//c.WalkToDone +=
				//    delegate
				//    {
				//        this.Map.WriteLine(c.Identity.name + " has stopped");
				//    };

				//c.WalkToStart +=
				//    delegate
				//    {
				//        this.Map.WriteLine(c.Identity.name + " started walking");
				//    };
			}
			#endregion

			if (c.Guard == null)
			{
				Map.WriteLine("coplayer " + e.name + " spawned as a new guard");


				c.Guard = this.Map.CreateGuard().AddTo(this.Map.EgoView.BlockingSprites);
				c.Guard.MinimapZIndex = SpriteInfoExtended.MinimapZIndex_OnTop;
				c.Guard.MinimapColor = 0xff0000ff;
				c.Guard.MinimapInactiveColor = 0x80000080;

				c.Guard.TakeDamage +=
					(damage, DamageOwner) =>
					{
						// we will broadcast damage by our weapons
						if (DamageOwner != Map.EgoWeaponIdentity)
							return;

						// we should not mirror remoted damage
						if (DisableAddDamageToCoPlayer)
							return;

						// we have been shot
						Messages.AddDamageToCoPlayer(c.Identity.user, damage);
					};

				c.Guard.TakeDamageDone +=
					(damage, DamageOwner) =>
					{
						if (c.Guard.Health <= 0)
						{
							c.Guard.MinimapColor = 0xff00007f;
							c.Guard = null;

							Map.WriteLine("coplayer " + e.name + " died and left a corpse");

							if (DamageOwner == Map.EgoWeaponIdentity)
							{
								// ego killed a coplayer

								// killing a coplayer will result in revealing end level
								if (this.Map.HalfOfTheTreasureCollected != null)
									this.Map.HalfOfTheTreasureCollected();
							}
							else
							{
								// coplayer killed a coplayer
							}

						}
					};

				this.Map.EgoView.UpdatePOV(true);
			}

			var MemoryStream_UInt8 = e.vector.Select(i => (byte)i).ToArray();
			var ms = new MemoryStream(MemoryStream_UInt8);
			var mr = new BinaryReader(ms);

			c.Guard.Health = mr.ReadDouble();
			c.Kills = mr.ReadInt32();
			c.Score = mr.ReadInt32();

			c.Guard.Direction = mr.ReadDouble();
			c.Guard.Position = new Point(mr.ReadDouble(), mr.ReadDouble());

			//this.Map.WriteLine("present: " + e.name);

		}