Пример #1
0
    public Actor(int maxHp, int armor, int defence, string image, string element)
    {
        this._maxHp        = new ListenableProperty <int>(maxHp);
        this._armor        = new ListenableProperty <int>(armor);
        this._defence      = new ListenableProperty <int>(defence);
        this._healthPoint  = new ListenableRangeProperty <int>(maxHp, maxHp, 0);
        this._frozen       = new ListenableProperty <bool>(false);
        this._alive        = new ListenableProperty <bool>(true);
        this._attackEnable = new ListenableProperty <bool>(true);
        this._focusAble    = new ListenableProperty <bool>(true);

        this._buffList = new FilteredListenableList <IBuff>();
        this._image    = new ListenableProperty <string>(image);
        this._element  = new ListenableProperty <string>(element);

        this._turnStartListeners = new ListenableList <IActorTurnStartListener>();

        this._attackDecoratorList      = new ListenableList <IStrategyDecorator <AttackInfo> >();
        this._underAttackDecoratorList = new ListenableList <IStrategyDecorator <AttackInfo> >();

        this._buffList.SetSorting(new IBuffComparator());
        this._attackDecoratorList.SetSorting(new IDecoratorComparator());
        this._underAttackDecoratorList.SetSorting(new IDecoratorComparator());
        this._turnStartListeners.SetSorting(new ITurnStartListenerComparator());
    }
Пример #2
0
    public void RunAction(Actor source, Actor target, Card card, BattleContext manager)
    {
        if (target is PlayerInstance)
        {
            PlayerInstance player = (PlayerInstance)target;

            ListenableList <ElementCardInstance> handheldList = player.HandheldSet;
            List <ElementCardInstance>           changeList   = new List <ElementCardInstance>();

            // if drop count greater than 0
            if (_count > 0)
            {
                for (int cnt = 0; cnt < _count; cnt++)
                {
                    changeList.Add(handheldList.Get(cnt));
                }

                //if drop count smaller than 0, drop all
            }
            else if (_count < 0)
            {
                changeList.AddRange(handheldList.GetAll());
            }

            //move card from handheld to graveard
            foreach (ElementCardInstance item in changeList)
            {
                handheldList.RemoveItem(item);
            }
            player.Graveyard.AddItems(changeList);
        }
    }
Пример #3
0
 // Unregister listener
 void OnDestroy()
 {
     if (null != _enemyList)
     {
         this._enemyList.RemoveListener(this);
     }
     _enemyList = null;
 }
Пример #4
0
    public void Bind(ListenableList <EnemyInstance> enemyList)
    {
        this._enemyList = enemyList;
        this._enemyList.AddListener(this);

        foreach (EnemyInstance enemyInstance in enemyList.GetAll())
        {
            OnItemAdd(enemyInstance);
        }
    }
Пример #5
0
    // Binding UI and ViewModel
    public void Bind(ListenableList <ElementCardInstance> cardList)
    {
        this._cardList = cardList;
        this._cardList.AddListener(this);

        // Update Cards
        foreach (ElementCardInstance card in cardList.GetAll())
        {
            OnItemAdd(card);
        }
    }
Пример #6
0
    public void ComboCardPolymery()
    {
        ComboCardUIController.SetVisible(false);
        Debug.Log("play combo");

        BattleContext context = DataManager.Instance.BattleContext;

        if (null != context)
        {
            UltimateCardPlayEvent cardEvent = new UltimateCardPlayEvent();

            cardEvent.Card    = ComboCardUIController.GetCardInstance();
            cardEvent.Targets = null;

            bool isPlayable = false;
            ListenableList <ElementCardInstance> handHeldSet = context.Player.HandheldSet;
            int totalCnt = handHeldSet.GetCount();
            for (int i = 0; i < totalCnt; i++)
            {
                for (int j = 0; j < totalCnt; j++)
                {
                    if (cardEvent.Card.IsCardPlayable(handHeldSet.Get(i), handHeldSet.Get(j)))
                    {
                        isPlayable          = true;
                        cardEvent.LeftCard  = handHeldSet.Get(i);
                        cardEvent.RightCard = handHeldSet.Get(j);
                        EventManager.TriggerEvent(BattleManager.PLAY_ULTIMATE_CARD, cardEvent);
                        break;
                    }
                    else if (cardEvent.Card.IsCardPlayable(handHeldSet.Get(j), handHeldSet.Get(i)))
                    {
                        isPlayable          = true;
                        cardEvent.LeftCard  = handHeldSet.Get(j);
                        cardEvent.RightCard = handHeldSet.Get(i);
                        EventManager.TriggerEvent(BattleManager.PLAY_ULTIMATE_CARD, cardEvent);
                        break;
                    }
                }
            }

            Debug.Log("IsCombo Card Played: " + isPlayable.ToString());
        }
    }
Пример #7
0
    public EnemyInstance(MonsterModel model) : base(model.HealthPoint, 0, 0, model.Img, model.Element)
    {
        this._monsterModel = model;
        this._cards        = new ListenableList <MonsterCardInstance>();
        this._cardQueue    = new ListenableList <MonsterCardInstance>();

        ObjectBuilder builder = new ObjectBuilder(model.Strategy.Name);

        foreach (JKeyValuePair pair in model.Strategy.Properties)
        {
            builder.SetProperty(pair.Key, pair.Value);
        }
        this._strategy = (IAIStrategy)builder.Build();

        foreach (JMonsterCardProperties cardData in model.MonsterCards)
        {
            this._cards.AddItem(new MonsterCardInstance(Constants.language_zh_tw, cardData));
        }
    }
Пример #8
0
    public void RunAction(Actor source, Actor target, Card card, BattleContext manager)
    {
        if (target is PlayerInstance)
        {
            PlayerInstance player = (PlayerInstance)target;
            ListenableList <ElementCardInstance> handheldSet = player.HandheldSet;
            ListenableList <ElementCardInstance> cardDeck    = player.CardDeck;

            List <ElementCardInstance> filteredList = null;

            // filter
            if (null != _element)
            {
                filteredList = cardDeck.GetAll().FindAll(item => item.Element.Equals(_element));
            }
            else
            {
                filteredList = cardDeck.GetAll();
            }

            // random
            List <ElementCardInstance> drawList = new List <ElementCardInstance>();
            if (filteredList.Count > 0)
            {
                for (int cnt = 0; cnt < _drawCount; cnt++)
                {
                    int random = Random.Range(0, filteredList.Count - 1);
                    drawList.Add(filteredList[random]);
                    filteredList.RemoveAt(random);
                }
            }

            // update
            foreach (ElementCardInstance instance in drawList)
            {
                cardDeck.RemoveItem(instance);
                handheldSet.AddItem(instance);
            }
        }
    }
Пример #9
0
    private ListenableList <ElementCardInstance> _handheldSet;    //墓地

    public PlayerInstance(string language, JCharacterProperties properties) : base(properties.MaxHp, properties.Armor, properties.Defence, properties.Image, properties.Element)
    {
        this._jCharacterProperties = properties;

        this._power     = new ListenableProperty <int>(properties.Power);
        this._drawCount = new ListenableProperty <int>(properties.DrawCount);
        this._name      = new ListenableProperty <string>(null);

        this._ultimateCards = new ListenableList <UltimateCardInstance>();
        this._cardDeck      = new ListenableList <ElementCardInstance>();
        this._graveyard     = new ListenableList <ElementCardInstance>();
        this._handheldSet   = new ListenableList <ElementCardInstance>();

        foreach (JCharacterLocale local in properties.locales)
        {
            if (language.Equals(local.language))
            {
                this._name.Property = local.data.Name;
                break;
            }
        }
    }