private void HandleSocketState(Dictionary <EventType, List <GameEvent> > gameEvents) { BoardPlayerLayer.BoardPlayerLayer currentPlayerLayer = this.NodeLevel.GetLayerFromPlayer(this.OwnerCardEntity.Card.CurrentOwner); if (gameEvents.TryGetValue(EventType.SOCKET_CARD, out List <GameEvent> gameEventsSocket)) { GameEvent socketEvent = gameEventsSocket.FirstOrDefault(); if (socketEvent != null) { StarEntity starEntity = socketEvent.Entity as StarEntity; if (this.ToStarEntities.Contains(starEntity)) { this.ExecuteBehavior(starEntity); this.NbBehaviorUse--; this.NodeLevel.BoardNotifLayer.NotifyNotifBehaviorUseChanged(this.NbBehaviorUse); this.mustNotifyBehaviorEnd = true; return; } } } if (gameEvents.TryGetValue(EventType.PICK_CARD, out List <GameEvent> gameEventsPicks)) { GameEvent nullPickEvent = gameEventsPicks.FirstOrDefault(pElem => pElem.Layer == currentPlayerLayer && pElem.Entity == null); GameEvent entityPickEvent = gameEventsPicks.FirstOrDefault(pElem => pElem.Layer == currentPlayerLayer && pElem.Entity != null); if (nullPickEvent != null) { CardEntity cardToAdd = NodeLevel.UnpickCard(currentPlayerLayer, nullPickEvent.Details); this.FromCardEntities.Add(cardToAdd); this.State = ResurrectState.PICK_CARD; } if (entityPickEvent != null) { CardEntity cardToRemove = entityPickEvent.Entity as CardEntity; this.FromCardEntities.Remove(cardToRemove); this.NodeLevel.PickCard(currentPlayerLayer, cardToRemove); this.CardBehaviorOwner.OnBehaviorCardPicked(this, this.NodeLevel.BoardGameLayer.CardEntityPicked); this.State = ResurrectState.SOCKET_CARD; } } if (gameEvents.TryGetValue(EventType.NEXT_BEHAVIOR, out List <GameEvent> gameEventsNextBehavior)) { if (gameEventsNextBehavior.Any()) { this.IsActive = false; this.mustNotifyBehaviorEnd = true; return; } } }