private void WaitForCollectingHalfTheTreasureToRevealEndGoal() { HalfOfTheTreasureCollected = delegate { // ding ding ding - end of level revealed HalfOfTheTreasureCollected = null; Assets.Default.Sounds.revealed.play(); EgoView.Image.FadeOut( delegate { TheGoldStack.AddTo(EgoView.Sprites); // cuz we removed and then added, we have to manually update // pov info, otherwise we need to wait // until we collect another treasure // for the endlevel to show up EgoView.UpdatePOV(true); CompassContainer.FadeIn( delegate { EgoView.Image.FadeIn(); } ); } ); //this.WriteLine("game goal is now there"); }; }
private void TrackGoldSpritePickup() { #region Track gold pickup var LastPosition = new Point(); EgoView.ViewPositionChanged += delegate { if (!EnableItemPickup) { return; } if (EndLevelMode) { return; } if (EgoView.SpritesFromPointOfView == null) { return; } // only check for items each 0.5 distance travelled if ((EgoView.ViewPosition - LastPosition).length < PlayerRadiusMargin) { return; } Action Later = null; Action ItemTaken = null; int ItemsPickedUp = 0; EgoView.UpdatePOV(true); foreach (var Item in EgoView.SpritesFromPointOfView) { var Item_Sprite = Item.Sprite as SpriteInfoExtended; if (Item_Sprite != null) { if (!Item_Sprite.IsTaken) { if (Item.Distance < Item_Sprite.Range) { if (GoldSprites.Contains(Item_Sprite)) { // ding-ding-ding! Item_Sprite.IsTaken = true; this.WriteLine("gold taken: " + Item_Sprite.ConstructorIndexForSync); Later += delegate { GoldTakenCounter = (GoldTakenCounter + 1).Min(1); if (Item_Sprite != null) { if (Item_Sprite.ItemTaken != null) { ItemTaken += () => Item_Sprite.ItemTaken(); } if (Sync_TakeGold != null) { Sync_TakeGold(Item_Sprite.ConstructorIndexForSync); } } EgoView.Sprites.Remove(Item_Sprite); GoldSprites.Remove(Item_Sprite); }; } } } } } if (Later != null) { FlashColors(0xffff00); Later(); } LastPosition = EgoView.ViewPosition; if (ItemTaken != null) { ItemTaken(); } }; #endregion }