示例#1
0
        public void AddActiveEffect(ActiveEffect activeEffect)
        {
            if (activeEffects.Contains(activeEffect))
            {
                return;
            }

            AddBotEffects(activeEffect);
            activeEffects.Add(activeEffect);
        }
示例#2
0
    void ActiveEffectDamage(CharacterModel target, ActiveEffect effect)
    {
        int damage = calculate.DoSkillDamageCalc(turnTaker, target, effect);

        bm.WriteLog(turnTaker.name + " attack " + target.name + " for " + damage + " damage.");
        target.battleAttribute.ModifyHp(-damage);
        if (target.battleAttribute.currHp < 0)
        {
            target.battleAttribute.currHp = 0;
        }
    }
示例#3
0
        public static bool IsBeneficialEffect(this ActiveEffect effect)
        {
            if (effect.Effect.EffectType != EffectTypes.LightBonusAmount)
            {
                if (effect.Effect.IsDamagingEffect())
                {
                    return(false);
                }
            }

            return(effect.Effect.Potency >= 0);
        }
    private IEnumerator Apply(ActiveEffect effect)
    {
        effect.Effect.Do(player);
        while (effect.LeftTime > 0)
        {
            yield return(new WaitForEndOfFrame());

            effect.LeftTime -= Time.deltaTime;
        }
        effect.Effect.Undo(player);
        _activeEffects.Remove(effect.Effect.GetType());
    }
示例#5
0
 public void CheckCover(List <ActiveEffect> coverEffectList)
 {
     foreach (var memBaseSkill in Skills)//技能造成的特效
     {
         if (memBaseSkill.SkillConfig.Cover != "")
         {
             ActiveEffect ef = new ActiveEffect(EffectBook.GetEffect(memBaseSkill.SkillConfig.Cover), self, true);
             ef.Repeat = true;
             BattleManager.Instance.EffectQueue.Add(ef);
             coverEffectList.Add(ef);
         }
     }
 }
示例#6
0
 private void EffectUpdateFrame()
 {
     lock (this)
     {
         if (State == TankState.Idle && ActiveEffect.IsSensorDriven)
         {
             IdleEffect.Update();
         }
         else
         {
             ActiveEffect.Update();
         }
     }
 }
示例#7
0
 private void EffectUpdate()
 {
     lock (this)
     {
         if (ActiveEffect.IsSensorDriven && State == TankState.Idle)
         {
             IdleEffect.Update();
         }
         else
         {
             ActiveEffect.Update();
         }
     }
 }
示例#8
0
        public void CheckCover()
        {
            string cover = liveMonster.Avatar.MonsterConfig.Cover;

            if (!string.IsNullOrEmpty(cover))
            {
                ActiveEffect ef = new ActiveEffect(EffectBook.GetEffect(cover), liveMonster, true);
                ef.Repeat = true;
                BattleManager.Instance.EffectQueue.Add(ef);
                coverEffectList.Add(ef);
            }

            liveMonster.SkillManager.CheckCover(coverEffectList);
        }
        public void BindView(GameObject view, ActiveEffect effect)
        {
            var buffImage = view.transform.Find("Image").GetComponent <Image>();
            var buffText  = view.transform.Find("Text").GetComponent <Text>();

            var updateSubscription = Observable.EveryUpdate().Subscribe(x =>
            {
                var timeLeft  = effect.Effect.Duration - effect.ActiveTime;
                var timeSpan  = TimeSpan.FromMilliseconds(timeLeft);
                buffText.text = $"{timeSpan.Minutes:00}:{timeSpan.Seconds:00}";
            });

            _effectSubscription.Add(effect, updateSubscription);
        }
示例#10
0
    public int DoSkillDamageCalc(CharacterModel user, CharacterModel target, ActiveEffect effect)
    {//TODO do a real calculation here
        switch (effect.formula)
        {
        case "PAtk":
            return(FormulaPAtk(GetValue(effect.formulaParam), user.battleAttribute.pAtk));

        case "MAtk":
            return(FormulaMAtk(GetValue(effect.formulaParam), user.battleAttribute.pAtk));

        default:
            Debug.Log("Formula ID " + effect.formula + " not found.");
            return(0);
        }
    }
        public bool ResolveCollision(GameObject go, MovableGameObject mover)
        {
            var currentEffect = new ActiveEffect
            {
                Bot    = mover,
                Effect = Effects.GasCloud
            };


            if (mover is BotObject bot)
            {
                if (worldStateService.GetActiveEffectByType(bot.Id, Effects.GasCloud) != default)
                {
                    if (bot.Size < engineConfig.MinimumPlayerSize)
                    {
                        worldStateService.RemoveGameObjectById(bot.Id);
                    }
                    return(bot.Size >= engineConfig.MinimumPlayerSize);
                }

                worldStateService.AddActiveEffect(currentEffect);
                bot.Size -= engineConfig.GasClouds.AffectPerTick;
                if (bot.Size < engineConfig.MinimumPlayerSize)
                {
                    worldStateService.RemoveGameObjectById(bot.Id);
                }
                return(bot.Size >= engineConfig.MinimumPlayerSize);
            }
            else
            {
                var moverStartingSize = mover.Size;
                mover.Size -= go.Size;
                go.Size    -= moverStartingSize;
                if (go.Size <= 0)
                {
                    go.Size = 0;
                    worldStateService.RemoveGameObjectById(go.Id);
                }

                if (mover.Size <= 0)
                {
                    mover.Size = 0;
                    worldStateService.RemoveGameObjectById(mover.Id);
                }

                return(mover.Size > 0);
            }
        }
示例#12
0
        private void button1_Click(object sender, EventArgs e)
        {
            currentItem = new Item();

            int id;

            if (int.TryParse(itemIDTextBox.Text, out id))
            {
                currentItem.itemID      = id;
                currentItem.name        = nameBox.Text;
                currentItem.description = descriptionTextBox.Text;

                HashSet <int>        reqs   = new HashSet <int>();
                List <ActiveEffect>  aeList = new List <ActiveEffect>();
                List <PassiveEffect> peList = new List <PassiveEffect>();

                foreach (int req in requirementsList)
                {
                    reqs.Add(req);
                }
                currentItem.requirements = reqs;

                foreach (String ae in itemActiveList)
                {
                    ActiveEffect temp = new ActiveEffect(ae);
                    aeList.Add(temp);
                }
                currentItem.activeEffects = aeList;

                foreach (String pe in itemPassiveList)
                {
                    PassiveEffect temp = new PassiveEffect(pe);
                    peList.Add(temp);
                }
                currentItem.passiveEffects = peList;
                currentItem.iconFileName   = iconSelect.SelectedValue.ToString();
                String output = currentItem.ParseToString();
                if (Item.IsValidItem(output))
                {
                    itemStringTextBox.Text = output;
                    itemList.Add(currentItem.itemID, currentItem);
                }
                else
                {
                    MessageBox.Show(this, output);
                }
            }
        }
示例#13
0
        private void SendAreaEffect(Point pos)
        {
            //播放特效
            RegionTypes rt       = BattleTargetManager.GetRegionType(SkillInfo.SkillConfig.Target[2]);
            var         cardSize = BattleManager.Instance.MemMap.CardSize;

            foreach (var memMapPoint in BattleManager.Instance.MemMap.Cells)
            {
                var pointData = memMapPoint.ToPoint();
                if (BattleLocationManager.IsPointInRegionType(rt, pos.X, pos.Y, pointData, SkillInfo.SkillConfig.Range, Self.IsLeft))
                {
                    var effectData = new ActiveEffect(EffectBook.GetEffect(SkillInfo.SkillConfig.EffectArea), pointData + new Size(cardSize / 2, cardSize / 2), false);
                    BattleManager.Instance.EffectQueue.Add(effectData);
                }
            }
        }
    public void AddEffect(IEffect effect)
    {
        var type = effect.GetType();

        if (_activeEffects.ContainsKey(type))
        {
            //reseting effect duration to max
            _activeEffects[type].LeftTime = effect.Duration;
        }
        else
        {
            var activeEffect = new ActiveEffect(effect);
            _activeEffects.Add(type, activeEffect);
            StartCoroutine(activeEffect);
        }
    }
        public bool ResolveCollision(GameObject gameObject, BotObject bot)
        {
            var currentEffect = new ActiveEffect
            {
                Bot    = bot,
                Effect = Effects.AsteroidField
            };

            /* If the effect is not registered, add it to the list. */
            if (worldStateService.GetActiveEffectByType(bot.Id, Effects.AsteroidField) == default)
            {
                worldStateService.AddActiveEffect(currentEffect);
                worldStateService.UpdateBotSpeed(bot);
            }

            return(true);
        }
示例#16
0
    void ActiveEffectBuff(CharacterModel target, ActiveEffect effect)
    {
        BattleBuff buff = BuffManager.CreateBuff(effect.formula, effect.formulaParam);

        buff.model = target;
        buff.log   = bm;
        for (int i = 0; i < target.battleAttribute.buffs.Count; i++)
        {
            if (target.battleAttribute.buffs[i].id.Equals(buff.id))
            {
                target.battleAttribute.buffs.RemoveAt(i);
                break;
            }
        }
        target.battleAttribute.buffs.Add(buff);
        buff.BuffOnGet();
    }
示例#17
0
        /// <summary>
        ///     Clears the current effect
        /// </summary>
        public void ClearEffect()
        {
            if (ActiveEffect == null)
            {
                return;
            }

            lock (ActiveEffect)
            {
                ActiveEffect.Dispose();
                ActiveEffect = null;

                _generalSettings.LastEffect = null;
                _generalSettings.Save();
            }

            _logger.Debug("Cleared active effect");
        }
        public BaseSkillLevel(BaseSkillLevel Clone)
        {
            ListActivation = new List <BaseSkillActivation>(Clone.ListActivation.Count);
            foreach (BaseSkillActivation ActiveActivation in Clone.ListActivation)
            {
                //Some effect will need to update global parameters so to clones can copy the right values.
                foreach (BaseEffect ActiveEffect in ActiveActivation.ListEffect)
                {
                    ActiveEffect.SetupParamsBeforeCopy();
                }
            }

            foreach (BaseSkillActivation ActiveActivation in Clone.ListActivation)
            {
                ListActivation.Add(new BaseSkillActivation(ActiveActivation));
            }

            _ActivationsCount = Clone.ActivationsCount;
            Price             = Clone.Price;
        }
示例#19
0
 internal void OnDeserializedMethod(StreamingContext context)
 {
     //TODO: v0.5: remove this
     if (ScriptEvents == null)
     {
         ScriptEvents = new Dictionary <LuaEngine.EDungeonMapCallbacks, ScriptEvent>();
     }
     if (MapEffect == null)
     {
         MapEffect = new ActiveEffect();
     }
     if (AllyTeams == null)
     {
         AllyTeams = new List <Team>();
     }
     if (Layers == null)
     {
         Layers = new List <MapLayer>();
     }
 }
        public bool ResolveCollision(GameObject go, MovableGameObject mover)
        {
            var currentEffect = new ActiveEffect
            {
                Bot    = mover,
                Effect = Effects.AsteroidField
            };

            if (mover is BotObject bot)
            {
                /* If the effect is not registered, add it to the list. */
                if (worldStateService.GetActiveEffectByType(mover.Id, Effects.AsteroidField) == default)
                {
                    worldStateService.AddActiveEffect(currentEffect);
                    worldStateService.UpdateBotSpeed(mover);
                }
            }
            else
            {
                var moverStartingSize = mover.Size;
                mover.Size -= go.Size;
                go.Size    -= moverStartingSize;
                if (go.Size <= 0)
                {
                    go.Size = 0;
                    worldStateService.RemoveGameObjectById(go.Id);
                }

                if (mover.Size <= 0)
                {
                    mover.Size = 0;
                    worldStateService.RemoveGameObjectById(mover.Id);
                }

                return(mover.Size > 0);
            }



            return(true);
        }
示例#21
0
        internal string GenerateMessage(dynamic data)
        {
            var message = new Data();

            switch (ActiveEffect)
            {
            case Effect.ChromaNone:
                message.Effect = ActiveEffect.GetStringValue();
                message.Param  = null;
                break;

            case Effect.ChromaStatic:
                message.Effect = ActiveEffect.GetStringValue();
                message.Param  = new { color = ((Color)data).ToBgr() };
                break;

            case Effect.ChromaCustom2:
            case Effect.ChromaCustom:
                message.Effect = ActiveEffect.GetStringValue();
                var parammatrix = data.ToMatrix();
                message.Param = (parammatrix.Length == 1) ? parammatrix[0] : parammatrix;
                break;

            case Effect.ChromaCustomKey:
                message.Effect = ActiveEffect.GetStringValue();
                message.Param  = new
                {
                    color = data.color.ToMatrix(),
                    key   = data.key.ToMatrix()
                };
                break;
            }

            var jsonString = JsonConvert.SerializeObject(message, Formatting.Indented,
                                                         new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });

            return(jsonString);
        }
示例#22
0
    protected List <Targetable> GetTargets(ActiveEffect effect, TargetType targetType)
    {
        List <Targetable> targets = new List <Targetable>();

        if (targetType == TargetType.Self)
        {
            return(new List <Targetable> {
                activeUnit
            });
        }
        if (targetType == TargetType.LinkedTowers)
        {
            Tower tower = activeUnit as Tower;
            if (tower != null)
            {
                List <Tower> connectedTowers = tower.connectedTowers;
                foreach (Tower connectedTower in connectedTowers)
                {
                    targets.Add(connectedTower);
                }
            }
        }

        if (targetType == TargetType.SingleEnemy)
        {
            return(new List <Targetable> {
                activeUnit.targetter.GetTarget()
            });
        }
        if (targetType == TargetType.AllTargets)
        {
            return(activeUnit.targetter.GetAllTargets());
        }
        if (targetType == TargetType.MultipleTargets)
        {
            ParameterModiferValue multishotValue = effect.parameterValues[Modifier.MultishotTargets];
            return(activeUnit.targetter.GetTargets(Mathf.RoundToInt(multishotValue.value)));
        }

        return(targets);
    }
示例#23
0
        public void ProcessAction(BotObject bot)
        {
            /* Bot does not have enough resources to consume for the afterburner. */
            if (bot.Size <= engineConfig.Afterburners.SizeConsumptionPerTick ||
                bot.Size <= engineConfig.MinimumPlayerSize)
            {
                return;
            }

            var currentEffect = new ActiveEffect
            {
                Bot    = bot,
                Effect = Effects.Afterburner
            };

            /* If the effect is not registered, add speed boost and add it to the list. */
            if (worldStateService.GetActiveEffectByType(bot.Id, Effects.Afterburner) == default)
            {
                worldStateService.AddActiveEffect(currentEffect);
                worldStateService.UpdateBotSpeed(bot);
            }
        }
示例#24
0
    void ActorGetSkillEffect(CharacterModel target, ActiveEffect effect)
    {//TODO add another skill effects
        switch (effect.type)
        {
        case EffectType.damage:
            ActiveEffectDamage(target, effect);
            break;

        case EffectType.buff:
            ActiveEffectBuff(target, effect);
            break;

        case EffectType.debuff:
            break;

        case EffectType.heal:
            break;

        default:
            break;
        }
        switch (effect.special)
        {
        case SpecialEffect.none:
            break;

        case SpecialEffect.lifeleech:
            break;

        case SpecialEffect.poison:
            ActiveEffectBuff(target, SpecialPoison(effect.specialVal));
            break;

        default:
            break;
        }
        bm.UpdateAllTeam();
    }
        public override void ActivatePassiveBuffs()
        {
            foreach (BaseSkillActivation Activation in Skill.ListSkillLevel[0].ListActivation)
            {
                bool IsPassive = false;

                foreach (BaseSkillRequirement ActiveRequirement in Activation.ListRequirement)
                {
                    IsPassive = ActiveRequirement.CanActivatePassive();
                }
                if (IsPassive)
                {
                    foreach (BaseEffect ActiveEffect in Activation.ListEffect)
                    {
                        if (ActiveEffect.EffectTypeName == "Unit Stat Effect")
                        {
                            ActiveEffect.ResetState();
                            ActiveEffect.ExecuteEffect();
                        }
                    }
                }
            }
        }
示例#26
0
    private Dictionary <Modifier, ParameterModiferValue> GetEffectValue(ActiveEffect effect, Targetable target)
    {
        Dictionary <Modifier, ParameterModiferValue> finalValues = new Dictionary <Modifier, ParameterModiferValue>();
        Tower tower = target as Tower;

        foreach (KeyValuePair <Modifier, ParameterModiferValue> paramValue in effect.parameterValues)
        {
            ParameterModiferValue paramMod = paramValue.Value;
            float value = effect.parameterValues[paramValue.Key].value;
            if (tower)
            {
                if (effect.rankUpParameterValues.ContainsKey(paramValue.Key))
                {
                    float rank = tower.towerInfo.currentRank;
                    value += effect.rankUpParameterValues[paramValue.Key].value * rank;
                }
            }

            finalValues.Add(paramValue.Key, new ParameterModiferValue(paramMod.modType, value));
        }

        return(finalValues);
    }
示例#27
0
        private void createActive_Click(object sender, EventArgs e)
        {
            int amount;

            if (int.TryParse(activeAmount.Text, out amount))
            {
                String resource = activeResource.SelectedValue.ToString();
                String result   = String.Format("{0}:{1}:{2}", ActiveEffect.TAG, resource, amount);

                if (ActiveEffect.IsValidActiveEffect(result))
                {
                    activeEffectsList.Add(result);
                }
            }


            string toWrite = "ACTIVEEFFECTS";

            foreach (String ie in activeEffectsList)
            {
                toWrite += "^" + ie;
            }
            WriteFile("activeEffects.txt", toWrite);
        }
示例#28
0
 public static int TicksSoFar(this ActiveEffect activeEffect)
 {
     return((int)(activeEffect.ActiveTime / activeEffect.Effect.Frequency));
 }
 private void UpdateEffectIcon(GameObject effectIcon, ActiveEffect ae)
 {
     UIHelper.UpdateSpriteComponent(effectIcon, "Image", gameDataObject.assetLibrary.getSprite(ae.effectName, ae.effectIndex));
     UIHelper.AddClickToGameObject(effectIcon, AddHoverInfoPanel, EventTriggerType.PointerEnter, ae);
     UIHelper.AddClickToGameObject(effectIcon, RemoveHoverInfoPanel, EventTriggerType.PointerExit);
 }
示例#30
0
 private void ChangeFillingOutline(ActiveEffect ActiveStatusEffect, float filling)
 {
     statusEffectObjects[ActiveStatusEffect].GetStatusEffectImage().ChangeFillingOutline(filling);
 }
示例#31
0
    public void SetEffect(EffectPlayType pType, EffectType etype, int value, int turn = 0, Target target = null, int cost = 0, TriggerType trigger = TriggerType.None, GameObject animEffect = null)
    {
        if (etype == EffectType.AttackPower || etype == EffectType.SkillPower)
        {
            SetPower(etype, value);
            return;
        }
        CardEffect effect;

        switch (pType)
        {
        case EffectPlayType.triggerEffect:
            effect = new TriggerEffect()
            {
                TriggerType = trigger
            };
            break;

        case EffectPlayType.staticEffect:
            effect = new StaticEffect();
            break;

        case EffectPlayType.playEffect:
            effect = new PlayEffect();
            break;

        case EffectPlayType.activeEffect:
            effect = new ActiveEffect(cost);
            break;

        case EffectPlayType.none:
        default:
            effect = new CardEffect();
            break;
        }
        //カード効果に応じてアニメーション設定
        if (animEffect == null)
        {
            switch (etype)
            {
            case EffectType.CostAdd:
            case EffectType.UnitCostAdd:
            case EffectType.SkillDamageAdd:
            case EffectType.AttackAdd:
            case EffectType.AttackTime:
                animEffect = null;
                break;

            case EffectType.CardDest:
            case EffectType.RandCardDest: break;

            case EffectType.CardDraft:
            case EffectType.CardDraw:
            case EffectType.GetDisZoneCard:
            case EffectType.CardUnDraft:
            case EffectType.GetDispCard: break;

            case EffectType.Counter: break;

            case EffectType.Damage:
                animEffect = Resources.Load <GameObject>(Constants.CARD_EFFECT_MAGICK_FIRE);
                break;

            case EffectType.Heal:
                animEffect = Resources.Load <GameObject>(Constants.CARD_EFFECT_HEAL);
                break;
            }
        }
        effect.effectState.Add(new EffectState(etype, value, turn, target, animEffect));
        Effect.Add(effect);
    }