Exemple #1
0
        private void AddSkillBuffToUnit(Soldier s)
        {
            if (s == null || !s.Alive())
            {
                return;
            }

            List <AttributeEffect> attributeEffects = new List <AttributeEffect>();

            for (int i = 0; i < base.attributeEffects.Count; i++)
            {
                int buffId = base.attributeEffects[i];

                AttributeEffect ae = GenerateAttributeEffect(buffId);

                // Notice skill the buff has been detached for some reason, maybe the unit has been dead
                ae.RegisterNoticeGiverDestroyMethod((b) =>
                {
                    if (attributeEffectOwnerDic.ContainsKey(b.taker.id))
                    {
                        attributeEffectOwnerDic[b.taker.id].Remove(b);
                        if (attributeEffectOwnerDic[b.taker.id].Count == 0)
                        {
                            attributeEffectOwnerDic.Remove(b.taker.id);
                        }
                    }
                });

                ae.Attach(owner, s);

                attributeEffects.Add(ae);
            }

            attributeEffectOwnerDic.Add(s.id, attributeEffects);
        }
        private void Moving(int deltaTime)
        {
            PathAgent agent = owner.pathAgent;

            agent.Move(deltaSpeed);

            long distance = FixVector3.SqrDistance(targetPosition, owner.position);

            if (distance <= FixVector3.one.magnitude)
            {
                state = State.DashEnd;
                waitingChangeState = false;

                LogicUnit target = owner.target;

                if (target != null && target.Alive() && target.id == owner.target.id)
                {
                    AttributeEffect ae = GenerateAttributeEffect(attributeEffects[0]);
                    ae.Attach(owner, target);
                }

                DebugUtils.Log(DebugUtils.Type.AI_Skill, string.Format("YueGuangChongCi: arrive target position, change state to {0}", state));
            }
            else
            {
                DebugUtils.Log(DebugUtils.Type.AI_Skill, string.Format("YueGuangChongCi: distance = {0}, step = {1}", distance, stepLength));
            }
        }
Exemple #3
0
        //--
        private void Work()
        {
            List <Soldier> allSoldier = new List <Soldier>();

            allSoldier.AddRange(FindOpponentSoldiers(owner.mark, position, (s) =>
            {
                return(WithinCircleAreaPredicate(position, attackRadius, s.position));
            }));

            for (int i = 0; i < allSoldier.Count; i++)
            {
                if (allSoldier[i] != null && allSoldier[i].Alive())
                {
                    for (int j = 0; j < attributeEffects.Count; j++)
                    {
                        AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                        if (hitResId != 0)
                        {
                            ae.SetEffectInfo(hitResId, "FootEffectPoint");
                        }
                        ae.Attach((Soldier)owner, allSoldier[i]);
                        workTime++;
                    }
                }
            }
        }
Exemple #4
0
        public override void LogicUpdate(int deltaTime)
        {
            base.LogicUpdate(deltaTime);

            if (state == SkillState.Fire)
            {
                state = SkillState.FrontSwing;
            }
            else if (state == SkillState.FrontSwing)
            {
                state = SkillState.FrontSwing;

                if (hitTimer >= skillActionHitTime)
                {
                    state = SkillState.HitPoint;
                }
            }
            else if (state == SkillState.HitPoint)
            {
                // Find Opponents
                List <Soldier> soldiers = FindOpponentSoldiers(mark, owner.position, (s) =>
                {
                    return(WithinSectorAreaPredicate(owner.position, owner.direction, radius, s.position));
                });

                List <LogicUnit> npcs = FindNeutralUnits(owner.position, (npc) =>
                {
                    return(WithinSectorAreaPredicate(owner.position, owner.direction, radius, npc.position));
                });

                // Affect Opponents
                for (int j = 0; j < attributeEffects.Count; j++)
                {
                    for (int i = 0; i < soldiers.Count; i++)
                    {
                        AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                        ae.Attach(owner, soldiers[i]);
                    }

                    for (int i = 0; i < npcs.Count; i++)
                    {
                        AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                        ae.Attach(owner, npcs[i]);
                    }
                }

                state = SkillState.BackSwing;
            }
            else if (state == SkillState.BackSwing)
            {
                if (hitTimer >= skillActionDuration)
                {
                    ReleaseEnd();
                }
            }

            hitTimer += deltaTime;
        }
Exemple #5
0
 private void AttributEffectAttach()
 {
     for (int i = 0; i < attributEffects.Count; i++)
     {
         AttributeEffect ae = GenerateAttributeEffect(attributEffects[i]);
         ae.Attach((Soldier)owner, (Soldier)target);
     }
     DebugUtils.Log(DebugUtils.Type.AI_Projectile, "MoFaBaoLieDanArrow + AttributEffectAttach + " + attributEffects.Count);
 }
        public override void Fire()
        {
            base.Fire();

            for (int i = 0; i < attributeEffects.Count; i++)
            {
                AttributeEffect ae = GenerateAttributeEffect(attributeEffects[i]);
                ae.Attach(owner, owner);
                attributeEffect.Add(ae);
            }
        }
Exemple #7
0
        private void Work()
        {
            for (int i = 0; i < attributeEffects.Count; i++)
            {
                if (owner != null && owner.Alive() && owner.target.type == LogicUnitType.Soldier)
                {
                    AttributeEffect ae = GenerateAttributeEffect(attributeEffects[i]);
                    ae.Attach((Soldier)owner, (Soldier)owner.target);
                }
            }

            ReleaseEnd();
        }
Exemple #8
0
 public void AddDebuff(int debuffId)
 {
     if (effectedSoldier != null && effectedSoldier.Count > 0)
     {
         for (int i = 0; i < effectedSoldier.Count; i++)
         {
             AttributeEffect debuff = GenerateAttributeEffect(debuffId);
             debuff.Attach(this, effectedSoldier[i]);
             DebugUtils.Log(DebugUtils.Type.InstitutesSkill, string.Format("Add debuff,metaID {0} debuff attach the Solider ID {1} unit", debuff.metaId, effectedSoldier[i].id));
             playerSkillDeBuffs.Add(debuff);
         }
     }
 }
Exemple #9
0
        private void Work()
        {
            if (owner != null && owner.Alive())
            {
                for (int i = 0; i < attributeEffects.Count; i++)
                {
                    AttributeEffect ae = GenerateAttributeEffect(attributeEffects[i]);
                    ae.Attach((Soldier)owner, (Soldier)owner);
                    tempBuffList.Add(ae);
                }

                workTime++;
            }
        }
        public override void LogicUpdate(int deltaTime)
        {
            base.LogicUpdate(deltaTime);

            attackStateDurationTimer += deltaTime;
            if (attackStateDurationTimer <= skillActionDuration)
            {
                if (hitTimer > skillActionHitTime)
                {
                    // Find Opponent
                    List <Soldier> soldiers = FindOpponentSoldiers(mark, owner.position, (s) =>
                    {
                        return(WithinSectorAreaPredicate(owner.position, owner.direction, radius, s.position));
                    });

                    List <LogicUnit> npcs = FindNeutralUnits(owner.position, (npc) =>
                    {
                        return(WithinSectorAreaPredicate(owner.position, owner.direction, radius, npc.position));
                    });

                    for (int j = 0; j < attributeEffects.Count; j++)
                    {
                        for (int i = 0; i < soldiers.Count; i++)
                        {
                            AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                            ae.Attach(owner, soldiers[i]);
                        }

                        for (int i = 0; i < npcs.Count; i++)
                        {
                            AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                            ae.Attach(owner, npcs[i]);
                        }
                    }

                    hitTimer = 0;
                }
                else
                {
                    // back swing...
                }

                hitTimer += deltaTime;
            }
            else
            {
                // skill completely finished
                ReleaseEnd();
            }
        }
        public override void Fire()
        {
            base.Fire();

            List <Soldier> s = FindFriendlySoldiers(mark, position, radius);

            for (int i = 0; i < s.Count; i++)
            {
                for (int j = 0; j < attributeEffects.Count; j++)
                {
                    AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                    ae.Attach(owner, s[i]);
                }
            }
        }
        public override void Fire()
        {
            base.Fire();

            for (int i = 0; i < attributeEffects.Count; i++)
            {
                AttributeEffect buff = GenerateAttributeEffect(attributeEffects[i]);
                buff.Attach(owner, owner);
                buffList.Add(buff);
            }

            state = State.InstallBattery;
            timer = 0;

            // replace owner's projectile id to battery bullet
            owner.projectileId = battryBulletMetaId;
        }
Exemple #13
0
        public override void Fire()
        {
            base.Fire();

            state = State.Fire;

            RenderMessage rm = new RenderMessage();

            rm.type      = RenderMessage.Type.SoldierWalk;
            rm.ownerId   = owner.id;
            rm.direction = owner.direction.vector3;
            PostRenderMessage(rm);

            spriteAttributeEffect = GenerateAttributeEffect(attributeEffects[0]);
            spriteAttributeEffect.Attach(owner, owner);

            owner.FindChasePath(owner.target.position);
        }
Exemple #14
0
        //When town create new solider use this.
        public void AddSoliderInEffectedSoldier(Soldier solider)
        {
            for (int i = 0; i < usedInstituteSkills.Count; i++)
            {
                List <int> buffsID;

                buffsID = GetBuffsID(usedInstituteSkills[i].BuffsID.Split('|'));

                AttributeEffect buff = GenerateAttributeEffect(buffsID[0]);
                buff.Attach(this, solider);
                buff.RegisterNoticeGiverDestroyMethod(SoldierDieRemoveBuff);
                playerSkillBuffs.Add(buff);

                AttributeEffect debuff = GenerateAttributeEffect(buffsID[1]);
                debuff.Attach(this, solider);
                debuff.RegisterNoticeGiverDestroyMethod(SoldierDieRemoveDebuff);
                playerSkillDeBuffs.Add(debuff);
            }

            effectedSoldier.Add(solider);
        }
Exemple #15
0
        private void AttackState(int deltaTime)
        {
            attackStateDurationTimer += deltaTime;
            if (attackStateDurationTimer <= skillActionDuration)
            {
                if (hitTimer == 0)
                {
                    spriteAttributeEffect.Detach();

                    RenderMessage rm = new RenderMessage();
                    rm.ownerId = owner.id;
                    rm.type    = RenderMessage.Type.SoldierReleaseSkill;
                    rm.arguments.Add("index", index);
                    rm.arguments.Add("metaId", metaId);

                    PostRenderMessage(rm);
                }
                else if (!isHit && hitTimer > skillActionHitTime)
                {
                    attackAttributeEffect = GenerateAttributeEffect(attributeEffects[1]);
                    attackAttributeEffect.Attach(owner, owner.target);

                    isHit = true;
                }
                else
                {
                    // back swing...
                }

                hitTimer += deltaTime;
            }
            else
            {
                // skill completely finished
                ReleaseEnd();
            }
        }
        public void Hit()
        {
            // Find Opponent
            List <Soldier> soldiers = FindOpponentSoldiers(mark, position, (s) =>
            {
                return(WithinCircleAreaPredicate(position, radius, s.position));
            });

            List <LogicUnit> npcs = FindNeutralUnits(position, (s) =>
            {
                return(WithinCircleAreaPredicate(position, radius, s.position));
            });

            // Affect Opponent
            for (int j = 0; j < attributeEffects.Count; j++)
            {
                for (int i = 0; i < soldiers.Count; i++)
                {
                    AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                    ae.Attach(owner, soldiers[i]);
                }

                for (int i = 0; i < npcs.Count; i++)
                {
                    AttributeEffect ae = GenerateAttributeEffect(attributeEffects[j]);
                    ae.Attach(owner, npcs[i]);
                }
            }

            ReleaseEnd();

            RenderMessage rm = new RenderMessage();

            rm.type    = RenderMessage.Type.SkillHit;
            rm.ownerId = id;
            PostRenderMessage(rm);
        }