public void UpdateBuffsGUI() { var buffs = GetComponentsInChildren <UIBuff>(BuffRoot); for (int i = 0; i < ActiveBuffs.Count; ++i) { var b = ActiveBuffs.ElementAt(i); if (i >= buffs.Length) { var buff = GameObject.Instantiate(BuffPrefab, BuffRoot); buff.Init(b.Key, b.Value); buff.transform.localPosition = new Vector3(i * 0.5f, 0, 0); } else { buffs[i].Init(b.Key, b.Value); buffs[i].transform.localPosition = new Vector3(i * 0.5f, 0, 0); } } for (int j = ActiveBuffs.Count; j < buffs.Length; ++j) { Destroy(buffs[j].gameObject); } }
public void Init() { foreach (var a in Abilities) { Destroy(a.gameObject); } Abilities.Clear(); ActiveBuffs.Clear(); foreach (var a in AbilityDefinisions) { Abilities.Add(Instantiate(a, this.transform)); } foreach (var a in Abilities) { a.User = this; } _damageTimer = _damageAccumulator = 0; _blockTimer = _damageAccumulator = 0; _blockTimer = _blockAccumulator = 0; _deathTimer = 0; NewTurn(); }
public void NewTurn() { ActionPoints = ActionPointsPerTurn; bool keepBlock = ActiveBuffs.Any(s => s.Key.KeepBlockNextTurn); foreach (var buff in ActiveBuffs.Keys.Where(b => b.TickOnStartTurn).ToList()) { ActiveBuffs[buff]--; if (ActiveBuffs[buff] <= 0 || buff.RemoveAllStacksOnTick) { ActiveBuffs.Remove(buff); } } UpdateBuffsGUI(); if (keepBlock) { // Nothing we have to keep block } else { Block = 0; } }
/// <summary> /// Updates player position. Saves change to database if needed. /// </summary> /// <param name="x">new x</param> /// <param name="y">new y</param> /// <param name="z">new z</param> /// <param name="saveChangesToDB">set it to true, if this change should be saved to database</param> private void UpdatePosition(float x, float y, float z, ushort angle, bool saveChangesToDB) { if (ActiveBuffs.Any(b => b.StateType == StateType.Immobilize || b.StateType == StateType.Sleep || b.StateType == StateType.Stun)) { OnPositionChanged?.Invoke(this); return; } PosX = x; PosY = y; PosZ = z; Angle = angle; if (IsDuelApproved && MathExtensions.Distance(PosX, DuelX, PosZ, DuelZ) >= 45) { FinishDuel(DuelCancelReason.TooFarAway); } //_logger.LogDebug($"Character {Id} moved to x={PosX} y={PosY} z={PosZ} angle={Angle}"); if (saveChangesToDB) { _taskQueue.Enqueue(ActionType.SAVE_CHARACTER_MOVE, Id, x, y, z, angle); } OnPositionChanged?.Invoke(this); }
public bool AddBuff(Buff buff, Unit performer, GameEntity mediator) { if (!CanAddBuff(buff)) { return(false); } buff.Performer = performer; buff.Mediator = mediator; if (IsInGame) { if (CanAddBuff(buff)) { buff.TargetPosition = this.Position; buff.TargetEntity = this; if (buff.TryStartPerform()) { ActiveBuffs.Add(buff); } } } else { ActiveBuffs.Add(buff); } return(true); }
public void ClearBuffs() { foreach (var v in new List <Buff>(ActiveBuffs)) { v.TryEndPerform(true); } ActiveBuffs.Clear(); }
public void RemoveBuff(Buff buff) { ActiveBuffs.Remove(buff); if (IsInGame) { buff.TryEndPerform(false); } }
public void RefreshBuffs() { foreach (var buff in ActiveBuffs.Where(b => b.Value == 0).ToList()) { ActiveBuffs.Remove(buff.Key); } UpdateBuffsGUI(); }
private bool TestActiveBuffs(IPlayerPowerInfo powers) { if (ActiveBuffs != null) { return(AllActiveBuffs ? ActiveBuffs.All(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno)) : ActiveBuffs.Any(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno))); } return(true); }
public int DealDamage(int damage, bool ignoreBlock = false) { int mod = 100; if (ActiveBuffs.Any(a => a.Key.MegaVulnerable)) { mod += 50; } if (ActiveBuffs.Any(a => a.Key.Vulnerable)) { mod += 25; } if (mod != 100) { damage = (damage * mod) / 100; } if (damage > 0 && ActiveBuffs.Any(b => b.Key.TakeNoDamage)) { damage = 1; } if (!ignoreBlock) { int remain = Block - damage; if (remain > 0) { Block = remain; damage = 0; } else { Block = 0; damage = -remain; } } CurrentHealth -= damage; if (CurrentHealth <= 0) { Kill(); } _damageAccumulator += damage; _damageTimer = 1.5f; return(damage); }
public void EndTurn() { ActionPoints = 0; foreach (var buff in ActiveBuffs.Keys.Where(b => !b.TickOnStartTurn).ToList()) { ActiveBuffs[buff]--; if (ActiveBuffs[buff] <= 0 || buff.RemoveAllStacksOnTick) { ActiveBuffs.Remove(buff); } } UpdateBuffsGUI(); }
public override void Update(TimeSpan deltaTime) { base.Update(deltaTime); bool changes = false; for (int i = ActiveBuffs.Count - 1; i >= 0; i--) { ActiveBuffs[i].Update(deltaTime); if (ActiveBuffs[i].Active == false) { ActiveBuffs.RemoveAt(i); changes = true; } } if (changes && !Screen.MenuConsole.IsActive) { // refresh player's stats Screen.MenuConsole.PrintPlayerStats(); } }
public override void GameUpdate(float dtime) { base.GameUpdate(dtime); var running = Running; if (MotionObject != null) { running &= MotionUnit.Velocity.Length() > 0; } if (running) { if (!wasRunning) { OnTakesFootstep(); } wasRunning = true; footstepAcc += dtime; if (footstepAcc >= FootstepRelativePeriod / RunSpeed) { OnTakesFootstep(); footstepAcc = 0; } } else { wasRunning = false; footstepAcc = 0; } if (RageEnabled) { UpdateRage(dtime); } float waterLevel = Game.Instance.Map.Settings.WaterHeight - Translation.Z - 0.3f; RunSpeed = MaxRunSpeed * Math.Max(0.2f, (1 - Math.Max(waterLevel, 0) / MaxWaterDepth)); bool wasDrowning = isDrowning; isDrowning = waterLevel > MaxWaterDepth && State == UnitState.Alive; if (isDrowning) { if (!wasDrowning) { OnStartsPiranhas(); } OnUpdatePiranhas(dtime); } else { if (wasDrowning) { OnEndsPiranhas(); } } foreach (var v in Abilities) { v.UpdateCooldown(dtime); } foreach (var v in new List <Buff>(ActiveBuffs)) { if (!v.IsPerforming) { ActiveBuffs.Remove(v); } } if (MotionObject != null) { var ip = MotionObject.InterpolatedPosition; var ir = MotionUnit.InterpolatedRotation; UpdateTranslation(dtime, ip); if (Rotation != ir) { Rotation = ir; } if (wasOnGround != IsOnGround) { wasOnGround = IsOnGround; InvalidateAnimation(); } if (isOnGroundDebug != null) { isOnGroundDebug.Visible = IsOnGround; } } else { Running = false; } if (State == UnitState.Dead) { if (removeDeadZombieTimer >= 0) { removeDeadZombieTimer -= dtime; if (removeDeadZombieTimer < 0) { Stop(); } } } if (Program.Settings.DisplayCooldownBars) { for (int i = 0; i < cooldownBars.Length; i++) { cooldownBars[i].MaxValue = Abilities[i].Cooldown; cooldownBars[i].Value = Abilities[i].CurrentCooldown; } } }
public bool IsVisible(IController controller) { if (HeroClass != HeroClass.None && Hud.Game.Me.HeroClassDefinition.HeroClass != HeroClass) { return(false); } if (controller.Game.IsInTown && !ShowInTown) { return(false); } //return true; var visible = true; var player = controller.Game.Me; var powers = player.Powers; if (EquippedSkills != null) { visible = AllEquippedSkills ? EquippedSkills.All(skill => powers.UsedSkills.Any(playerSkill => (skill.Icon.HasValue ? playerSkill.SnoPower.Sno == skill.Sno && playerSkill.Rune == skill.Icon.Value : playerSkill.SnoPower.Sno == skill.Sno) && (!playerSkill.IsOnCooldown || !CheckSkillCooldowns))) : EquippedSkills.Any(skill => powers.UsedSkills.Any(playerSkill => (skill.Icon.HasValue ? playerSkill.SnoPower.Sno == skill.Sno && playerSkill.Rune == skill.Icon.Value : playerSkill.SnoPower.Sno == skill.Sno) && (!playerSkill.IsOnCooldown || !CheckSkillCooldowns))); } if (visible && MissingSkills != null) { visible = MissingSkills.Any(skill => powers.UsedSkills.All(playerSkill => playerSkill.SnoPower.Sno != skill.Sno)); } if (visible && EquippedPassives != null) { visible = EquippedPassives.All(passive => powers.UsedPassives.Any(playerPassive => playerPassive.Sno == passive)); } if (visible && MissingPassives != null) { visible = MissingPassives.Any(passive => powers.UsedPassives.All(playerPassive => playerPassive.Sno != passive)); } if (visible && ActiveBuffs != null) { visible = AllActiveBuffs ? ActiveBuffs.All(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno)) : ActiveBuffs.Any(buff => buff.Icon.HasValue ? powers.BuffIsActive(buff.Sno, buff.Icon.Value) : powers.BuffIsActive(buff.Sno)); } if (visible && InactiveBuffs != null) { visible = AllInactiveBuffs ? InactiveBuffs.All(buff => buff.Icon.HasValue ? !powers.BuffIsActive(buff.Sno, buff.Icon.Value) : !powers.BuffIsActive(buff.Sno)) : InactiveBuffs.Any(buff => buff.Icon.HasValue ? !powers.BuffIsActive(buff.Sno, buff.Icon.Value) : !powers.BuffIsActive(buff.Sno)); } if (visible && ActorSnoIds != null) { visible = Hud.Game.Actors.Any(a => ActorSnoIds.Contains(a.SnoActor.Sno)); } if (visible && InvocationActorSnoIds != null) { visible = !Hud.Game.Actors.Any(a => a.SummonerAcdDynamicId == Hud.Game.Me.SummonerId && InvocationActorSnoIds.Contains(a.SnoActor.Sno)); } if (visible && CustomCondition != null) { visible = CustomCondition.Invoke(Hud); } return(visible); }