public Tuple <EntityStat, EntityStat> GetNextLevelStats() { var primary = new EntityStat(PrimaryStat.Kind, 0); var secondary = new EntityStat(AuxStat.Kind, 0); if (Level < MaxLevel) { { var fac = CalcFactor(true, Level + 1); //if (Kind == PassiveAbilityKind.LootingMastering) //{ // //desc.AddRange(this.GetCustomExtraStatDescription(Level + 1)); //} //else { primary.Factor = fac; //desc.Add(PrimaryStat.Kind + ": " + GetFormattedCurrentValue(esN)); } if (AuxStat.Kind != EntityStatKind.Unset) { fac = CalcFactor(false, Level + 1); secondary = new EntityStat(AuxStat.Kind, 0); secondary.Factor = fac; //desc.Add(AuxStat.Kind + ": " + GetFormattedCurrentValue(esN)); } } } return(new Tuple <EntityStat, EntityStat>(primary, secondary)); }
public string GetFormattedCurrentValue(EntityStat es) { var fv = es.GetFormattedCurrentValue(); //if (es.Unit != EntityStatUnit.Percentage && IsPercentageFromKind)//Health, Magic... ability is always in % // fv += "%"; return(fv); }
EntityStat CreateForLevel(EntityStat src, bool primary, int level) { var esN = new EntityStat(src.Kind, 0, src.Unit); var fac = CalcFactor(primary, level); esN.Factor = fac; return(esN); }
public BaseRelic(string name, EntityStat stat, int modvalue, string desc) { //PartitionKey = "Relic"; //RowKey = name; //Stat2Mod = stat; //ModValue = modvalue; //Desc = desc; }
public Equipment(EquipmentKind kind = EquipmentKind.Unset)//default arg for serialization { ExtendedInfo = new LootExtendedInfo(); primaryStat = new EntityStat(); EquipmentKind = kind; Class = EquipmentClass.Plain; LootKind = LootKind.Equipment; }
public string GetFormattedCurrentValue(EntityStat es) { var fv = es.GetFormattedCurrentValue(); if (!es.IsPercentage && IsPercentageFromKind()) { fv += "%"; } return(fv); }
public void BuffStat(EntityStat stat, float value) { switch (stat) { case EntityStat.CRIT_RATING: CritRating += value; break; case EntityStat.HASTE_RATING: HasteRating += value; break; case EntityStat.HEALTH_REGENERATION: HealthRegenerationPerSecond += value; break; case EntityStat.INCREASED_ABERRATION: IncreasedAberrationDamage += value; break; case EntityStat.INCREASE_BEAST: IncreasedBeastDamage += value; break; case EntityStat.INCREASE_CRITTER: IncreasedCritterDamage += value; break; case EntityStat.INCREASE_DEITY: HealthRegenerationPerSecond += value; break; case EntityStat.INCREASE_DEMON: IncreasedDemonDamage += value; break; case EntityStat.INCREASE_ELEMENTAL: IncreasedElementalDamage += value; break; case EntityStat.INCREASE_HUMANOID: IncreasedHumanoidDamage += value; break; case EntityStat.INCREASE_UNDEAD: IncreasedUndeadDamage += value; break; case EntityStat.MANA_REGENERATION: ManaRegenerationPerSecond += value; break; } }
public void BuffStat(EntityStat stat, int value) { switch (stat) { case EntityStat.ARMOR_RATING: ArmorRating += value; break; case EntityStat.INTELLECT: Intellect += value; break; case EntityStat.STAMINA: Stamina += value; break; } }
public string GetEntityStat(EntityStat stat) { switch (stat) { case EntityStat.Speed: return(newBoss.Speed.ToString()); case EntityStat.Attack: return(newBoss.Attack.ToString()); case EntityStat.Health: return(newBoss.Health.ToString()); case EntityStat.Accuracy: return(newBoss.Accuracy.ToString()); case EntityStat.AttackCount: return(newBoss.AttackCount.ToString()); case EntityStat.RespawnCount: return(newBoss.RespawnCount.ToString()); case EntityStat.Score: return(newBoss.Score.ToString()); case EntityStat.DefaultHealth: return(newBoss.DefaultHealth.ToString()); case EntityStat.PartitionKey: return(newBoss.PartitionKey); case EntityStat.RowKey: return(newBoss.RowKey); case EntityStat.CurrentThreshold: return(newBoss.CurrentThreshold.ToString()); case EntityStat.AddedHealth: return(newBoss.AddedHealth.ToString()); default: return("No Stat Defined"); // No Stat Defined } }
bool CanExecute(EntityStat stat) { bool canExecute = true; if (GameManager.player) { canExecute &= stat.properties.HasProperty(EntityStatProperty.PlayerInRange) == IsInRange(stat.distanceToExecute, GameManager.player.transform.position); } if (stat.properties.HasProperty(EntityStatProperty.EntityOutOfMoveRegion)) { canExecute &= HasProperty(EntityProperty.AtEndOfMoveRegion); } if (stat.properties.HasProperty(EntityStatProperty.LowHealth)) { canExecute &= health <= stat.healthToExecute; } return(canExecute); }
public void InitCamera(bool automatic, bool useSmoothDamp, Vector2 value, float waitTime) { if (stats == null || stats.Length < 2) { stats = new EntityStat[2]; } SetProperty(EntityProperty.HasTargetOffset, !automatic); stats[0] = new EntityStat { properties = new Property <EntityStatProperty>(EntityStatProperty.FindNewStat), targetType = automatic ? TargetType.MoveRegion : TargetType.Player, speed = value.magnitude, moveType = useSmoothDamp ? MoveType.SmoothDamp : MoveType.Fly, }; prevStat = -1; //targetType = automatic ? TargetType.MoveRegion : TargetType.Player; //speed = value.magnitude; //moveType = useSmoothDamp ? MoveType.SmoothDamp : MoveType.Fly; speed = value.x; speedY = value.y; stats[1] = new EntityStat { properties = new Property <EntityStatProperty>(EntityStatProperty.EntityOutOfMoveRegion), chargeTime = waitTime }; GameInput.BindEvent(GameEventType.NextRoom, room => ToNextRoom(GameManager.GetBoundsFromRoom(room).ToRect())); void ToNextRoom(Rect roomRect) { moveRegion = roomRect; moveRegion.min += cam.HalfSize(); moveRegion.max -= cam.HalfSize(); if (automatic) { transform.position = moveRegion.min.Z(transform.position.z); SwitchTargetToMax(true, false); } Debug.Assert((moveRegion.xMin <= moveRegion.xMax) && (moveRegion.yMin <= moveRegion.yMax), $"Camera's limit is wrong: (Move region: {moveRegion}, Rect: {roomRect})"); } }
public void ChangeEntityStat(EntityStat stat, ChangeStatDirection dir, int amt2Change) { newHero.ChangeStat(stat, dir, amt2Change); SyncProperties(); }
void OnHPChange(EntityStat stat, float delta) { hpBar.sliderValue = stat.curHP/stat.maxHP; }
public void SetKind(TrophyKind kind) { Kind = kind; Name = Kind.ToString(); var st = new EntityStat(); bool makeEnchantable = false; switch (Kind) { case TrophyKind.Unset: break; case TrophyKind.SkeletonChemp: tag1 = "skeleton_chemp_trophy"; Name = "Head of Skeleton"; primaryStatDescription = "Trophy"; Class = EquipmentClass.Magic; break; case TrophyKind.BatHead: tag1 = "bat_boss_trophy"; Name = "Head of Bat's Boss"; st = new EntityStat(EntityStatKind.MeleeAttack, 0); st.Factor = 3; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Defense, 0); st.Factor = 3; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Health, 0); st.Factor = 5; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.LifeStealing, 0); st.Factor = 3; SetMagicStat(st.Kind, st); break; case TrophyKind.RatHead: tag1 = "rat_boss_trophy"; Name = "Head of Rat's Boss"; st = new EntityStat(EntityStatKind.Magic, 0); st.Factor = 4; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Mana, 0); st.Factor = 4; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ManaStealing, 0); st.Factor = 4; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.LightPower, 0); st.Factor = 4; SetMagicStat(st.Kind, st); break; case TrophyKind.SkeletonHead://skeleton_king 3rd level tag1 = "sk_boss_head"; Name = "Head of Skeleton's Boss"; st = new EntityStat(EntityStatKind.ChanceToMeleeHit, 0); st.Factor = 5; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Health, 0); st.Factor = 10; SetMagicStat(st.Kind, st); //st = new EntityStat(EntityStatKind.MagicAttackDamageReduction, 0); //st.Factor = 5; //SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToEvadeElementalProjectileAttack, 0); st.Factor = 10; SetMagicStat(st.Kind, st); break; case TrophyKind.WolfHead://wolf_king tag1 = "wolf_boss_trophy"; Name = "Head of Wolf's Boss"; st = new EntityStat(EntityStatKind.Magic, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Mana, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToCastSpell, 0); st.Factor = 10; SetMagicStat(st.Kind, st); //st = new EntityStat(EntityStatKind.MeleeAttackDamageReduction, 0); //st.Factor = 10; //SetMagicStat(st.Kind, st); break; case TrophyKind.DragonClaw: tag1 = "dragon_claw"; Name = "Dragon's Claw"; st = new EntityStat(EntityStatKind.FireAttack, 0); st.Factor = 5; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ResistFire, 0); st.Factor = 10; SetMagicStat(st.Kind, st); makeEnchantable = true; break; case TrophyKind.Scorpion://scorpion_king , also dragon on 5th tag1 = "scorpion_boss_trophy"; Name = "Stinger of Scorpion's Boss"; st = new EntityStat(EntityStatKind.PoisonAttack, 0); st.Factor = 6; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ResistPoison, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.LifeStealing, 0); st.Factor = 5; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Health, 0); st.Factor = 10; SetMagicStat(st.Kind, st); break; case TrophyKind.SpiderHead://spider_king tag1 = "spider_boss_trophy"; Name = "Head of Spider's Boss"; st = new EntityStat(EntityStatKind.ChanceToCauseBleeding, 0); st.Factor = 10; SetMagicStat(st.Kind, st); //st = new EntityStat(EntityStatKind.MeleeAttackDamageReduction, 0); //st.Factor = 15; //SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToMeleeHit, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToEvadeElementalProjectileAttack, 0); st.Factor = 15; SetMagicStat(st.Kind, st); break; case TrophyKind.HydraHead://hydra_king tag1 = "hydra_boss_trophy"; Name = "Head of Hydra's Boss"; st = new EntityStat(EntityStatKind.ChanceToCauseStunning, 0); st.Factor = 5; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToMeleeHit, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Defense, 0); st.Factor = 15; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Health, 0); st.Factor = 15; SetMagicStat(st.Kind, st); break; case TrophyKind.GriffinHead://griffin_king tag1 = "griffin_boss_trophy"; Name = "Head of Griffin's Boss"; st = new EntityStat(EntityStatKind.ChanceToEvadeMeleeAttack, 0); st.Factor = 15; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ManaStealing, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Mana, 0); st.Factor = 15; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Magic, 0); st.Factor = 10; SetMagicStat(st.Kind, st); break; case TrophyKind.VampireHead://vampire_king tag1 = "wampire_boss_trophy"; Name = "Head of Vampire's Boss"; st = new EntityStat(EntityStatKind.LifeStealing, 0); st.Factor = 5; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToCauseBleeding, 0); st.Factor = 15; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToCastSpell, 0); st.Factor = 15; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToEvadeElementalProjectileAttack, 0); st.Factor = 15; SetMagicStat(st.Kind, st); break; case TrophyKind.DarkWizardHand://wizard_king tag1 = "dark_wizard_boss_trophy"; Name = "Hand of Warlock's Boss"; st = new EntityStat(EntityStatKind.Health, 0); st.Factor = 15; SetMagicStat(st.Kind, st); //st = new EntityStat(EntityStatKind.MagicAttackDamageReduction, 0); //st.Factor = 15; //SetMagicStat(st.Kind, st); //st = new EntityStat(EntityStatKind.MeleeAttackDamageReduction, 0); //st.Factor = 15; //SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToEvadeElementalProjectileAttack, 0); st.Factor = 15; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ChanceToEvadeMeleeAttack, 0); st.Factor = 15; SetMagicStat(st.Kind, st); break; case TrophyKind.FallenOneHead://fallen_one tag1 = "fallen_one_trophy"; Name = "Head of Fallen One"; st = new EntityStat(EntityStatKind.LifeStealing, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.ManaStealing, 0); st.Factor = 10; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.Defense, 0); st.Factor = 30; SetMagicStat(st.Kind, st); st = new EntityStat(EntityStatKind.LightPower, 0); st.Factor = -10; SetMagicStat(st.Kind, st); makeEnchantable = true; break; default: break; } if (makeEnchantable) { MakeEnchantable();//it also increases price } }
IEnumerator ExecuteStat(EntityStat stat, float defaultSpeed, float defaultDamage) { if (stat == null) { yield break; } if (stat.properties.properties == null) { stat.properties.Init(); } rotateType = stat.rotateType; targetType = stat.targetType; // vfx.Play(); float timer = 0; moveType = MoveType.None; while (timer < stat.playerRememberTime) { if (stat.properties.HasProperty(EntityStatProperty.Interruptible)) { if (!CanExecute(stat)) { goto END; } } yield return(null); timer += Time.deltaTime; } yield return(new WaitForSeconds(stat.chargeTime - stat.playerRememberTime)); moveType = stat.moveType; speed = MulAdd(defaultSpeed, stat.speed, stat.properties.HasProperty(EntityStatProperty.MulSpeed), stat.properties.HasProperty(EntityStatProperty.AddSpeed)); damage = (int)MulAdd(defaultDamage, stat.damage, stat.properties.HasProperty(EntityStatProperty.MulDamage), stat.properties.HasProperty(EntityStatProperty.AddDamage)); if (stat.properties.HasProperty(EntityStatProperty.StartFalling)) { rb.velocity = new Vector2(Random.Range(0f, 1f) * (MathUtils.RandomBool() ? 1f : -1f), Random.Range(0.5f, 1f)).normalized *speed; cd.isTrigger = false; rb.bodyType = RigidbodyType2D.Dynamic; } else if (stat.properties.HasProperty(EntityStatProperty.StartMoving)) { cd.isTrigger = true; rb.bodyType = RigidbodyType2D.Kinematic; } /*else if (stat.properties.HasProperty(EntityStatProperty.FlipGraviy)) * { * while (true) * { * float groundTime = 0; * float jumpTime = 0; * do * { * yield return null; * groundTime -= Time.deltaTime; * jumpTime -= Time.deltaTime; * if (GroundCheck()) * groundTime = stat.groundRememberTime; * if (GameInput.GetInput(InputType.Jump)) * jumpTime = stat.jumpRememberTime; * } while (groundTime < 0 || jumpTime < 0); * rb.gravityScale *= -1; * } * }*/ if (stat.properties.HasProperty(EntityStatProperty.TeleportToTarget)) { float playerUp = GameManager.player.transform.up.y; Vector3 destination; { destination = targetPos; destination.y += (spriteExtents.y - GameManager.player.spriteExtents.y) * playerUp; float playerToEntityX = Mathf.Sign(targetPos.x - transform.position.x); float randomDistance = stat.affectedRange.randomValue * playerToEntityX; float minX = stat.affectedRange.min * playerToEntityX; // TODO: Maybe teleport opposite to where the player is heading or teleport to nearby platform if (!IsPosValid(randomDistance)) { if (!IsPosValid(minX)) { if (!IsPosValid(-randomDistance)) { if (!IsPosValid(-minX)) { yield break; } } } } bool IsPosValid(float offsetX) { Vector3 offset = new Vector3(offsetX, 0); bool onGround = BoxCast(destination + offset - new Vector3(0, spriteExtents.y * playerUp), new Vector2(spriteExtents.x, .1f), Color.yellow); bool insideWall = BoxCast(destination + offset + new Vector3(0, .1f * playerUp), sr.bounds.size, Color.green); if (onGround && !insideWall) { destination.x += offsetX; return(true); } return(false); } } if (playerUp != transform.up.y) { transform.Rotate(new Vector3(180, 0, 0), Space.World); } yield return(null); transform.position = destination; // TODO: Recalculate the moveRegion here or at the default stat } yield return(new WaitForSeconds(stat.duration)); if (stat.properties.HasProperty(EntityStatProperty.DamageNearbyEntities)) { if (IsInRange(stat.affectedRange.randomValue, GameManager.player.transform.position)) { GameManager.player.Hurt(damage); } // TODO: Setup deathVFX for explosion } if (stat.properties.HasProperty(EntityStatProperty.DieAfterExecution)) { Hurt(health); } if (stat.properties.HasProperty(EntityStatProperty.TillDeathDoUsPart)) { yield break; } END: currentStat = stat.nextStat; if (stat.properties.HasProperty(EntityStatProperty.FindNewStat)) { int nextStat = currentStat; while (currentStat == nextStat) { yield return(null); for (int i = 0; i < stats.Length; i++) { if (i != currentStat) { if (CanExecute(stats[i])) { currentStat = i; } } } } } }
public void ChangeStat(EntityStat stat, ChangeStatDirection dir, int amt2Change) { // Change the indicated Stat by adding or subtracting the amt2Change // Subtraction is done by multiplying the amt2Change by -1 which creates a negative value that is then "added" to the existing stat. switch (stat) { case EntityStat.Health: if (dir == ChangeStatDirection.Set) { this.Health = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.Health += amt2Change; } break; case EntityStat.Attack: if (dir == ChangeStatDirection.Set) { this.Attack = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.Attack += amt2Change; } break; case EntityStat.AttackCount: if (dir == ChangeStatDirection.Set) { this.AttackCount = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.AttackCount += amt2Change; } break; case EntityStat.RespawnCount: if (dir == ChangeStatDirection.Set) { this.RespawnCount = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.RespawnCount += amt2Change; } break; case EntityStat.XP: if (dir == ChangeStatDirection.Set) { this.XP = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.XP += amt2Change; } break; case EntityStat.Accuracy: if (dir == ChangeStatDirection.Set) { this.Accuracy = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.Accuracy += amt2Change; } break; case EntityStat.Speed: if (dir == ChangeStatDirection.Set) { this.Speed = amt2Change; } else { if (dir == ChangeStatDirection.Down) { amt2Change *= (-1); } this.Speed += amt2Change; } break; } }
public Ability() { PrimaryStat = new EntityStat(); AuxStat = new EntityStat(); Revealed = true; }
public string[] GetExtraStatDescription(bool currentLevel) { List <string> desc = new List <string>(); bool usesCustomStatDescription = useCustomStatDescription(); if (currentLevel) { if (usesCustomStatDescription) { desc.AddRange(this.GetCustomExtraStatDescription(Level)); } else { desc.Add(PrimaryStat.Kind + ": " + GetFormattedCurrentValue(PrimaryStat)); if (AuxStat.Kind != EntityStatKind.Unset) { desc.Add(AuxStat.Kind + ": " + GetFormattedCurrentValue(AuxStat)); } } } else { if (Level < MaxLevel) { var esN = new EntityStat(PrimaryStat.Kind, 0); desc.Add("Next Level: "); //if (fightItemKind != FightItemKind.None) //{ //} //else { var fac = CalcFactor(true, Level + 1); if (usesCustomStatDescription) { desc.AddRange(this.GetCustomExtraStatDescription(Level + 1)); } else { esN.Factor = fac; desc.Add(PrimaryStat.Kind + ": " + GetFormattedCurrentValue(esN)); } if (AuxStat.Kind != EntityStatKind.Unset) { fac = CalcFactor(false, Level + 1); esN = new EntityStat(AuxStat.Kind, 0); esN.Factor = fac; desc.Add(AuxStat.Kind + ": " + GetFormattedCurrentValue(esN)); } } } else { desc.Add(MessageMaxLevelReached); } } return(desc.ToArray()); }
public int GetStatValueOnEnum(EntityStat stat) { return(0); }
void OnHPChange(EntityStat stat, float delta) { PlayerStat pstat = (PlayerStat)stat; if(pstat.curHP == 0) { //decrease level SceneWorld sw = SceneWorld.instance; if(sw.curLevel > 0) { sw.curLevel--; } else { state = Entity.State.die; } } else if(delta < 0) { Blink(hurtDelay); } }
void OnHPChange(EntityStat stat, float delta) { if(stat.curHP == 0) { state = State.die; } else if(delta < 0) { Blink(hurtDelay); } }
private void Awake() { properties = new EntityStat(entityName, attack, defense, speed, health, entityType, weakness, resistance); }
public void DebuffStat(EntityStat stat, float value) { BuffStat(stat, -value); }
public void InitStats(string entityTypeName, int level) { Stats = EntityTypeInfo[entityTypeName].GetStats(level); CurrentHealth = Stats.MaxHealth; }
private bool ChangState <T>(T e, EntityStat state) { Context.Entry(e).State = state; Context.SaveChanges(); return(true); }