Esempio n. 1
0
        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;
                }
            }
        }