public async Task <IActionResult> AddTemp(long id, [FromQuery] int amount) { if (amount < 1) { return(BadRequest("Temporary hit points added must be greater than zero")); } Character?character = await _db.Characters .FirstOrDefaultAsync(c => c.Id == id); if (character == null) { return(NotFound()); } var result = new HitPointsResult(character); if (amount > character.TempHitPoints) { character.TempHitPoints = amount; _db.Characters.Update(character); await _db.SaveChangesAsync(); } result.Update(character); return(Ok(result)); }
public async Task <IActionResult> Heal(long id, [FromQuery] int amount) { if (amount < 1) { return(BadRequest("Amount healed must be greater than zero")); } Character?character = await _db.Characters .FirstOrDefaultAsync(c => c.Id == id); if (character == null) { return(NotFound()); } var result = new HitPointsResult(character); if (character.CurHitPoints < character.MaxHitPoints) { character.CurHitPoints += amount; if (character.CurHitPoints > character.MaxHitPoints) { character.CurHitPoints = character.MaxHitPoints; } _db.Characters.Update(character); await _db.SaveChangesAsync(); } result.Update(character); return(Ok(result)); }
public async Task <IActionResult> Damage(long id, [FromQuery] string type, [FromQuery] int amount) { if (amount < 1) { return(BadRequest("Damage must be greater than zero")); } Character?character = await _db.Characters .Include(c => c.Defenses) .FirstOrDefaultAsync(c => c.Id == id); if (character == null) { return(NotFound()); } var result = new HitPointsResult(character); Defense?defense = character.Defenses .FirstOrDefault(d => d.DamageType == type); if (defense != null) { amount = defense.IsImmune ? 0 : (amount / 2); } if (amount > 0) { if (character.TempHitPoints < amount) { amount -= character.TempHitPoints; character.TempHitPoints = 0; character.CurHitPoints = (character.CurHitPoints < amount) ? 0 : (character.CurHitPoints - amount); } else { character.TempHitPoints -= amount; } _db.Characters.Update(character); await _db.SaveChangesAsync(); } result.Update(character); return(Ok(result)); }