//public string despGeneral="";
		
		public UnitStat(){
			stun=new Stun();
			crit=new Critical();
			slow=new Slow();
			dot=new Dot();
			buff=new Buff();
		}
		public void Process(){
			if(processed) return;
			
			processed=true;
			
			damage=Random.Range(srcUnit.GetDamageMin(), srcUnit.GetDamageMax());
			damage/=(float)srcUnit.GetShootPointCount();	//divide the damage by number of shootPoint
			
			
			float critChance=srcUnit.GetCritChance();
			if(tgtUnit.immuneToCrit) critChance=-1f;
			if(Random.Range(0f, 1f)<critChance){
				critical=true;
				damage*=srcUnit.GetCritMultiplier();
			}
			
			
			if(damage>=tgtUnit.shield){
				damageShield=tgtUnit.shield;
				damageHP=damage-tgtUnit.shield;
			}
			else{
				damageShield=damage;
				damageHP=0;
			}
			
			if(damageHP>=tgtUnit.HP){
				destroy=true;
				return;
			}
			
			stunned=srcUnit.GetStun().IsApplicable();
			if(tgtUnit.immuneToStun) stunned=false;
			
			slowed=srcUnit.GetSlow().IsValid();
			if(tgtUnit.immuneToSlow) slowed=false;
			
			if(srcUnit.GetDot().GetTotalDamage()>0) dotted=true;
			
			
			if(stunned) stun=srcUnit.GetStun().Clone();
			if(slowed) slow=srcUnit.GetSlow().Clone();
			if(dotted) dot=srcUnit.GetDot().Clone();
			
		}
        //stats processing for attack from fps-weapon
        public void Process_SrcWeapon()
        {
            if(srcWeapon.GetInstantKill().IsApplicable(tgtUnit.HP, tgtUnit.fullHP)){
                damage=tgtUnit.HP;
                instantKill=true;
                destroy=true;
                return;
            }

            damage=Random.Range(srcWeapon.GetDamageMin(), srcWeapon.GetDamageMax());
            damage/=(float)srcWeapon.GetShootPointCount();	//divide the damage by number of shootPoint

            if(damage>=tgtUnit.HP){
                destroy=true;
                return;
            }

            if(srcWeapon.GetDot().GetTotalDamage()>0) dotted=true;
            if(dotted) dot=srcWeapon.GetDot().Clone();
        }
Exemplo n.º 4
0
		public static Dot ModifyDotWithPerkBonus(Dot dot, int prefabID, int type=0){
			Dot dotMod=new Dot();
			if(type==0) dotMod=GetTowerDotMultiplier(prefabID);
			else if(type==1) dotMod=GetFPSWeaponDotMultiplier(prefabID);
			else if(type==2) dotMod=GetAbilityDotMultiplier(prefabID);
			dot.duration*=(1+dotMod.duration);
			//dot.interval*=(1+dotMod.interval);
			dot.value*=(1+dotMod.value);
			return dot;
		}
Exemplo n.º 5
0
 private Dot ModifyDotWithPerkBonus(Dot dot)
 {
     return IsTower() ? PerkManager.ModifyDotWithPerkBonus(dot.Clone(), unitT.prefabID) : dot;
 }
Exemplo n.º 6
0
 IEnumerator DotRoutine(Dot dot)
 {
     int count=(int)Mathf.Floor(dot.duration/dot.interval);
     for(int i=0; i<count; i++){
         yield return new WaitForSeconds(dot.interval);
         if(dead) break;
         DamageHP(dot.value);
         if(HP<=0){ Dead();	break; }
     }
 }
Exemplo n.º 7
0
 public void ApplyDot(Dot dot)
 {
     StartCoroutine(DotRoutine(dot));
 }
		//stats processing for attack from fps-weapon
		public void Process_SrcWeapon(){
			if(srcWeapon.GetInstantKill().IsApplicable(tgtUnit.HP, tgtUnit.fullHP)){
				damage=tgtUnit.HP;
				damageHP=tgtUnit.HP;
				instantKill=true;
				destroy=true;
				return;
			}
			
			damage=Random.Range(srcWeapon.GetDamageMin(), srcWeapon.GetDamageMax());
			damage/=(float)srcWeapon.GetShootPointCount();	//divide the damage by number of shootPoint
			
			float critChance=srcWeapon.GetCritChance();
			if(tgtUnit.immuneToCrit) critChance=-1f;
			if(Random.Range(0f, 1f)<critChance){
				critical=true;
				damage*=srcWeapon.GetCritMultiplier();
				//new TextOverlay(impactPoint, "Critical", new Color(1f, .6f, 0f, 1f));
			}
			
			float dmgModifier=DamageTable.GetModifier(tgtUnit.armorType, srcWeapon.damageType);
			damage*=dmgModifier;
			
			if(damage>=tgtUnit.shield){
				damageShield=tgtUnit.shield;
				damageHP=damage-tgtUnit.shield;
			}
			else{
				damageShield=damage;
				damageHP=0;
			}
			
			
			if(Random.Range(0f, 1f)<srcWeapon.GetShieldPierce() && damageShield>0){
				damageHP+=damageShield;
				damageShield=0;
				pierceShield=true;
				//new TextOverlay(impactPoint,"Shield Pierced", new Color(0f, 1f, 1f, 1f));
			}
			if(srcWeapon.DamageShieldOnly()) damageHP=0; 
			
			if(damageHP>=tgtUnit.HP){
				destroy=true;
				return;
			}
			
			if(Random.Range(0f, 1f)<srcWeapon.GetShieldBreak() && tgtUnit.fullShield>0) breakShield=true;
			
			stunned=srcWeapon.GetStun().IsApplicable();
			if(tgtUnit.immuneToStun) stunned=false;
			
			slowed=srcWeapon.GetSlow().IsValid();
			if(tgtUnit.immuneToSlow) slowed=false;
			
			if(srcWeapon.GetDot().GetTotalDamage()>0) dotted=true;
			
			
			if(stunned) stun=srcWeapon.GetStun().Clone();
			if(slowed) slow=srcWeapon.GetSlow().Clone();
			if(dotted) dot=srcWeapon.GetDot().Clone();
		}
		public Dot Clone(){
			Dot clone=new Dot();
			clone.effectID=effectID;
			clone.duration=duration;
			clone.interval=interval;
			clone.value=value;
			return clone;
		}