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)); } }
//-- 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++; } } } }
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); }
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; }
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); } }
public override void Reset() { base.Reset(); state = State.Fire; spriteAttributeEffect = null; attackAttributeEffect = null; hitTimer = 0; attackStateDurationTimer = 0; isHit = false; }
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); } } }
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(); }
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(); } }
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 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; }
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); }
//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); }
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); }
private void SoldierDieRemoveBuff(AttributeEffect buff) { playerSkillBuffs.Remove(buff); }
private void SoldierDieRemoveDebuff(AttributeEffect debuff) { playerSkillDeBuffs.Remove(debuff); }