コード例 #1
0
    void AutoFill()
    {
        int donateCnt = donateOriginalConsumables.Length;
        int randomCnt = originalConsumables.Length;
        int maxCnt    = items.Count - 2;

        //добавляем с обязательного массива всё что влезет
        int cnt1 = Mathf.Min(maxCnt, donateCnt);

        for (int i = 0; i < cnt1; i++)
        {
            var             cons = donateOriginalConsumables[i];
            ConsumableStack cs   = new ConsumableStack(cons, cons.DefaultStats);
            if (cs.ConsumableStats is IStackCountConstraintable)
            {
                cs.Count = (cs.ConsumableStats as IStackCountConstraintable).MaxCount;
            }
            AddToInventory(cs);
        }

        //если осталось место, добавляем рандомно всё что в необязательном массиве
        int cnt2 = Mathf.Clamp(maxCnt - cnt1, 0, maxCnt);

        for (int i = 0; i < cnt2; i++)
        {
            Consumable      cons = originalConsumables[Random.Range(0, randomCnt)];
            ConsumableStack cs   = new ConsumableStack(cons, cons.DefaultStats);
            if (cs.ConsumableStats is IStackCountConstraintable)
            {
                cs.Count = (cs.ConsumableStats as IStackCountConstraintable).MaxCount;
            }
            AddToInventory(cs);
        }
    }
コード例 #2
0
    public void SetSquadValues(Squad squad)
    {
        isEmpty = false;

        var inv = squad.Inventory;

        helmetStack      = new EquipmentStack(inv.Helmet);
        bodyStack        = new EquipmentStack(inv.Body);
        shieldStack      = new EquipmentStack(inv.Shield);
        weaponStack      = new EquipmentStack(inv.Weapon);
        firstConsumable  = new ConsumableStack(inv.FirstConsumable);
        secondConsumable = new ConsumableStack(inv.SecondConsumable);

        inventory = new EquipmentStack[inv.Length];
        for (int i = 0; i < inv.Length; i++)
        {
            inventory[i] = inv[i];
        }

        count  = squad.UnitCount;
        health = new float[count];
        var poss = squad.UnitPositions;

        for (int i = 0; i < count; i++)
        {
            health[i] = poss[i].Unit.Health;
        }
    }
コード例 #3
0
 public ConsumableStack(ConsumableStack stack) : this()
 {
     if (stack != null)
     {
         this.Consumable      = stack.consumable;
         this.consumableStats = stack.consumableStats;
         this.count           = stack.count;
     }
 }
コード例 #4
0
    public void AddToInventory(ConsumableStack stack)
    {
        if (inventory.Count >= items.Count)
        {
            throw new System.Exception("больше нет места в инвентаре");
        }

        inventory.Add(stack);
        RefreshUI();
    }
コード例 #5
0
    static AExecutableBehaviour GetBehaviourConsumable(ConsumableStack stack, AiSquadController controller)
    {
        if (stack.Consumable is ConsumablePilumsVolley)
        {
            return(new PilumsVolleyBehaviour(controller, stack));
        }

        else
        {
            return(null);
        }
    }
コード例 #6
0
    void ResetIcon(ConsumableStack stack)
    {
        if (stack.Consumable == null)
        {
            return;
        }

        var mp = stack.Consumable.MainPropertie;

        mp.ResetIcon();
        stack.Consumable.MainPropertie = mp;
    }
コード例 #7
0
 public void RemoveFtomInventory(ConsumableStack stack)
 {
     if (!inventory.Remove(
             inventory.Find(
                 (st) => { return(st.Consumable.Id == stack.Consumable.Id && st.Count == stack.Count); }
                 )
             ))
     {
         throw new System.Exception("Алё. Таких предметов в магазине нет!");
     }
     else
     {
         RefreshUI();
     }
 }
コード例 #8
0
    ConsumableStack GetConsumable(ConsumableContainer[] equipments)
    {
        ConsumableStack res = null;

        if (equipments.Length > 0)
        {
            float t      = GameManager.Instance.CurrentLevel.WholeLevelT;
            float val    = consumableLevelDependency.Evaluate(t);
            int   index  = Mathf.RoundToInt(consumableLevelDependency.Evaluate(t) * (equipments.Length - 1));
            int   l2     = equipments[index].randomConsumables.Length;
            var   consum = equipments[index].randomConsumables[UnityEngine.Random.Range(0, l2)];
            res = new ConsumableStack(consum, consum.DefaultStats);
        }

        return(res);
    }
コード例 #9
0
    public void Merge(object data)
    {
        var d = data as DSPlayerSquad;

        inventory = d.inventory;
        count     = d.count;
        health    = d.health;

        helmetStack      = new EquipmentStack(d.Helmet);
        bodyStack        = new EquipmentStack(d.Body);
        shieldStack      = new EquipmentStack(d.Shield);
        weaponStack      = new EquipmentStack(d.Weapon);
        firstConsumable  = new ConsumableStack(d.FirstConsumable);
        secondConsumable = new ConsumableStack(d.SecondConsumable);

        //призагрузке надо пройтись по спрайтам и обновить. так как они сериальзуются по id а не по содержимому
        ResetIcons();
    }
コード例 #10
0
    public void Reset()
    {
        isEmpty = true;

        helmetStack = null;
        bodyStack   = null;
        shieldStack = null;
        weaponStack = null;

        firstConsumable  = null;
        secondConsumable = null;

        inventory = null;

        if (Squad.playerSquadInstance != null)
        {
            count = Squad.playerSquadInstance.FULL_SQUAD_UNIT_COUNT;
        }
        else
        {
            count = 30;
        }
        health = new float[count];
    }
コード例 #11
0
 public PilumsVolleyBehaviour(AiSquadController controller, ConsumableStack stack) : base(controller)
 {
     this.stack = stack;
     stack.Consumable.CallbackUsedCount += Volley_CallbackUsedCount;
 }
コード例 #12
0
 public ConsumableStack(ConsumableStack stack, int count) : this(stack)
 {
     this.count = count;
 }
コード例 #13
0
    private void Initiate()
    {
        if (typeOfSkill == Type.SKILL)
        {
            switch (skillNum)
            {
            case SkillNum.FIRS:
                currentSkill = playerInventory.FirstSkill;
                break;

            case SkillNum.SECOND:
                currentSkill = playerInventory.SecondSkill;
                break;
            }

            if (currentSkill.Skill != null)
            {
                img.sprite = currentSkill.Skill.MainPropertie.Icon;
                useType    = currentSkill.Skill.UseType;
            }
        }
        else
        {
            switch (skillNum)
            {
            case SkillNum.FIRS:
                currentConsumable = playerInventory.FirstConsumable;
                break;

            case SkillNum.SECOND:
                currentConsumable = playerInventory.SecondConsumable;
                break;
            }
            if (currentConsumable.Consumable != null)
            {
                useType    = currentConsumable.Consumable.UseType;
                img.sprite = currentConsumable.Consumable.MainPropertie.Icon;
                currentConsumable.Consumable.CallbackUsedCount += DecrementUsedConsumableCount;
            }
        }

        if ((currentSkill != null && currentSkill.Skill == null) || (currentConsumable != null && currentConsumable.Consumable == null))
        {
            Destroy(cell);
            return;
        }
        else
        {
            if (typeOfSkill == Type.CONSUMABLE)
            {
                if (currentConsumable.Count < 0)
                {
                    countText.enabled = false;
                }
                else
                {
                    countText.text = currentConsumable.Count.ToString(StringFormats.intNumber);
                }
            }
            else
            {
                countText.enabled = false;
            }
        }
    }