public void setPrimaryLabel() { if (primary_label == null) { return; } MyText primary_desc = primary_label.getText(LabelName.Null); string text = StaticRune.getPrimaryDescription(parent.rune); setVerboseImageLabels(primary_label, StaticRune.getPrimaryDamageType(parent.rune)); if (text.Equals("")) { primary_label.gameObject.SetActive(false); return; } else { primary_label.gameObject.SetActive(true); primary_desc.setText(text); } MyText tower_name = primary_label.getText(LabelName.Name); string my_name = StaticRune.getProperName(parent); tower_name.setText(my_name); }
//1 is fully defended public float HurtMe(StatSum statsum, Firearm firearm, EffectType primary_effecttype, int primary_level) { if (dying) { return(0); } if (checkIfWasKilled()) { return(0); } float factor = statsum.factor;//does anybody know what this is for? laser? float defense; float xp = 0f; StatBit[] statbits = statsum.stats; for (int i = 0; i < statbits.Length; i++) { StatBit skill_stats = statbits[i]; if (statbits[i].effect_type == EffectType.Range) { continue; } if (statbits[i].effect_type == EffectType.ReloadTime) { continue; } switch (statsum.runetype) { case RuneType.Sensible: bool is_laser = (statsum.GetStatBit(EffectType.Laser) != null); if (is_laser) { defense = Get.GetDefense(defenses, EffectType.Force); if (statbits[i].effect_type == EffectType.Laser && defense < 1) { float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, defense))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Laser, primary_level, skill_stats.level); } } else { if (statbits[i].effect_type == EffectType.Stun) { float add = StunMe(skill_stats.getModifiedStats(factor, 0)) / 10f; xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Stun, primary_level, skill_stats.level); } if (statbits[i].effect_type == EffectType.Transform) { defense = Get.GetDefense(defenses, EffectType.Transform); //applied with diffuse, which has a factor. this is not susceptible to that factor if (defense < 1) { TransformMe(skill_stats.getModifiedStats(factor, defense), factor); } } float force_defense = Get.GetDefense(defenses, EffectType.Force); if (force_defense < 1) { if (statbits[i].effect_type == EffectType.Force) { // Debug.Log("factor " + statsum.factor + "\n"); float add = stats.getXp(ForceMe(statsum.getModifiedPrimaryStats(force_defense))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level); } if (statbits[i].effect_type == EffectType.Explode_Force) { float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, force_defense))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Explode_Force, primary_level, skill_stats.level); } } if (statbits[i].effect_type == EffectType.Speed && statbits[i].effect_sub_type == EffectSubType.Ultra) { float add = SpeedMe(skill_stats.getModifiedStats(factor, 0), statbits[i].effect_type, statbits[i].effect_sub_type); xp += add * (1 + firearm.toy.rune.level * 0.5f); assignXp(add, firearm, primary_effecttype, EffectType.Meteor, primary_level, skill_stats.level); } } break; case RuneType.Airy: if (statbits[i].effect_type == EffectType.Weaken) { defense = (statbits[i].effect_sub_type == EffectSubType.Null) ? Get.GetDefense(defenses, EffectType.Weaken) : 0; if (defense < 1) { float add = WeakenMe(skill_stats.getModifiedStats(factor, defense)); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Weaken, primary_level, skill_stats.level); } } float speed_defense = Get.GetDefense(defenses, EffectType.Speed) / 2f; //otherwise they seem like they are very resistant to speed if (statbits[i].effect_type == EffectType.Speed && speed_defense < 1) { float add = SpeedMe(skill_stats.getModifiedStats(factor, speed_defense), statbits[i].effect_type, statbits[i].effect_sub_type); //this xp factor is to balance out xp to match other towers that do more damage xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Speed, primary_level, skill_stats.level); } if (statbits[i].effect_type == EffectType.Speed && statbits[i].effect_sub_type == EffectSubType.Freeze) { float add = SpeedMe(skill_stats.getModifiedStats(factor, 0), statbits[i].effect_type, statbits[i].effect_sub_type); // Debug.Log("timefreeze factor is " + factor + "\n"); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Frost, primary_level, skill_stats.level); } float hey_defense = Get.GetDefense(defenses, EffectType.Force); if (statbits[i].effect_type == EffectType.Force && speed_defense < 1) { float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, hey_defense))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level); } if (statbits[i].effect_type == EffectType.DirectDamage) { float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, 0))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.DirectDamage, primary_level, skill_stats.level); } //SSkill if (statbits[i].effect_type == EffectType.EMP) { EMPMe(skill_stats.getModifiedStats(factor, 0), false); } //Regular Skill: Foil -> Foil Lava -> summons EMP if (primary_effecttype == EffectType.Foil && statbits[i].effect_type == EffectType.Foil) { EMPMe(skill_stats.getModifiedStats(factor, 0), true); } break; case RuneType.Vexing: float vf_defense = Get.GetDefense(defenses, EffectType.VexingForce); if ((primary_effecttype != EffectType.Focus && statbits[i].effect_type == EffectType.VexingForce) || (primary_effecttype == EffectType.Focus && primary_effecttype == statbits[i].effect_type)) // for Focus, use focus statbits, not VF { if (vf_defense < 1) { float add = stats.getXp(ForceMe(statsum.getModifiedPrimaryStats(vf_defense))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.VexingForce, primary_level, skill_stats.level); } } if (statbits[i].effect_type == EffectType.DOT) { DOTMe(skill_stats.getModifiedStats(factor, vf_defense), firearm, skill_stats.level); //does damage through an invoke which can't get back to this //invoke calls MassMe, which assigns XP } if (statbits[i].effect_type == EffectType.Critical) { float critical_factor = firearm.critical.getCriticalForce(); //so that we can do correct xp attribution for it if (critical_factor > 0) { float new_defense = vf_defense / (1 + critical_factor); float[] new_stats = statsum.getModifiedPrimaryStats(vf_defense / (1 + critical_factor)); float add = stats.getXp(ForceMe(new_stats)); xp += add; assignXp(add, firearm, EffectType.Critical, EffectType.Critical, primary_level, skill_stats.level); } } if (statbits[i].effect_type == EffectType.Teleport) { defense = Get.GetDefense(defenses, EffectType.Teleport); if (defense >= 1) { return(xp); } float add = TeleportMe(skill_stats.getModifiedStats(factor, defense)); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Teleport, primary_level, skill_stats.level); } if (statbits[i].effect_type == EffectType.Fear) { defense = Get.GetDefense(defenses, EffectType.Fear); if (defense < 1) { FearMe(skill_stats.getModifiedStats(factor, defense)); } } break; case RuneType.Time: if (statbits[i].effect_type == EffectType.Speed && statbits[i].effect_sub_type == EffectSubType.Ultra) { defense = Get.GetDefense(defenses, StaticRune.getPrimaryDamageType(statsum.runetype)); if (defense >= 1) { return(xp); } float add = SpeedMe(skill_stats.getModifiedStats(factor, defense), EffectType.Speed, statbits[i].effect_sub_type); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Speed, primary_level, skill_stats.level); } break; case RuneType.Fast: case RuneType.Slow: if (statbits[i].effect_type == EffectType.Force) { defense = Get.GetDefense(defenses, StaticRune.getPrimaryDamageType(statsum.runetype)); if (defense >= 1) { return(xp); } float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, defense))); Debug.Log($"Night tower {Sun.Instance.GetCurrentTime()} {firearm.gameObject.name} {this.gameObject.name} defense {defense} xp {add} primary effect {primary_effecttype}\n"); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level); } break; default: if (statbits[i].effect_type == EffectType.Force) { defense = Get.GetDefense(defenses, EffectType.Force); if (defense >= 1) { return(xp); } float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, defense))); xp += add; assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level); } break; } } // Debug.Log("Total xp " + xp + "\n"); return(xp); }