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() { 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); }; }