From 692bfdd9430d96a84d1dd805f5f4d528b47dae50 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sun, 4 Oct 2020 00:37:11 -0700 Subject: [PATCH] Adds advantage/disadvantage to saving throw display. --- iOS/MonsterCards/Models/Monster.h | 1 + iOS/MonsterCards/Models/Monster.m | 77 +++++++++++++++++++++++++------ 2 files changed, 64 insertions(+), 14 deletions(-) diff --git a/iOS/MonsterCards/Models/Monster.h b/iOS/MonsterCards/Models/Monster.h index 24209dc..bf27405 100644 --- a/iOS/MonsterCards/Models/Monster.h +++ b/iOS/MonsterCards/Models/Monster.h @@ -119,6 +119,7 @@ extern NSString *const kAdvantageTypeDisadvantage; -(void)clearSavingThrows; -(NSString*)savingThrowsDescription; -(int)proficiencyBonus; +-(int)proficiencyBonusForType:(NSString*)proficiencyType; -(void)addSkill: (Skill*)skill; -(void)removeSkill: (Skill*)skill; -(void)clearSkills; diff --git a/iOS/MonsterCards/Models/Monster.m b/iOS/MonsterCards/Models/Monster.m index ead4a52..98ffba5 100644 --- a/iOS/MonsterCards/Models/Monster.m +++ b/iOS/MonsterCards/Models/Monster.m @@ -354,41 +354,90 @@ NSString *const kAdvantageTypeDisadvantage = @"disadvantage"; @throw [[NSException alloc] initWithName:@"unimplemented" reason:@"Method not implemented." userInfo:nil]; } +-(int)proficiencyBonusForType:(NSString*)proficiencyType { + if ([kProficiencyTypeNone isEqualToString:proficiencyType]) { + return 0; + } else if ([kProficiencyTypeProficient isEqualToString:proficiencyType]) { + return self.proficiencyBonus; + } else if ([kProficiencyTypeExpertise isEqualToString:proficiencyType]) { + return self.proficiencyBonus * 2; + } else { + return 0; + } +} + ++(NSString*)advantageLabelStringForType:(NSString*)advantageType { + if ([kAdvantageTypeNone isEqualToString:advantageType]) { + return @""; + } else if ([kAdvantageTypeAdvantage isEqualToString:advantageType]) { + return @"(A)"; + } else if ([kAdvantageTypeDisadvantage isEqualToString:advantageType]) { + return @"(D)"; + } else { + return @""; + } +} + -(NSString*)savingThrowsDescription { NSMutableArray *parts = [[NSMutableArray alloc] init]; NSString *name; + NSString *advantage; int bonus; - if (self.strengthSavingThrowProficiency != kProficiencyTypeNone) { + if (self.strengthSavingThrowProficiency != kProficiencyTypeNone || self.strengthSavingThrowAdvantage != kAdvantageTypeNone) { name = NSLocalizedString(@"Strength", @""); - bonus = self.proficiencyBonus + self.strengthModifier; - [parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]]; + bonus = self.strengthModifier + [self proficiencyBonusForType:self.strengthSavingThrowProficiency]; + advantage = [Monster advantageLabelStringForType:self.strengthSavingThrowAdvantage]; + if (advantage) { + advantage = [@" " stringByAppendingString:advantage]; + } + [parts addObject:[NSString stringWithFormat:@"%@ %+d%@", name, bonus, advantage]]; } if (self.dexteritySavingThrowProficiency != kProficiencyTypeNone) { name = NSLocalizedString(@"Dexterity", @""); - bonus = self.proficiencyBonus + self.dexterityModifier; - [parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]]; + bonus = self.dexterityModifier + [self proficiencyBonusForType:self.dexteritySavingThrowProficiency]; + advantage = [Monster advantageLabelStringForType:self.dexteritySavingThrowAdvantage]; + if (advantage) { + advantage = [@" " stringByAppendingString:advantage]; + } + [parts addObject:[NSString stringWithFormat:@"%@ %+d%@", name, bonus, advantage]]; } if (self.constitutionSavingThrowProficiency != kProficiencyTypeNone) { name = NSLocalizedString(@"Constitution", @""); - bonus = self.proficiencyBonus + self.constitutionModifier; - [parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]]; + bonus = self.constitutionModifier + [self proficiencyBonusForType:self.constitutionSavingThrowProficiency]; + advantage = [Monster advantageLabelStringForType:self.constitutionSavingThrowAdvantage]; + if (advantage) { + advantage = [@" " stringByAppendingString:advantage]; + } + [parts addObject:[NSString stringWithFormat:@"%@ %+d%@", name, bonus, advantage]]; } if (self.intelligenceSavingThrowProficiency != kProficiencyTypeNone) { name = NSLocalizedString(@"Intelligence", @""); - bonus = self.proficiencyBonus + self.intelligenceModifier; - [parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]]; + bonus = self.intelligenceModifier + [self proficiencyBonusForType:self.intelligenceSavingThrowProficiency]; + advantage = [Monster advantageLabelStringForType:self.intelligenceSavingThrowAdvantage]; + if (advantage) { + advantage = [@" " stringByAppendingString:advantage]; + } + [parts addObject:[NSString stringWithFormat:@"%@ %+d%@", name, bonus, advantage]]; } if (self.wisdomSavingThrowProficiency != kProficiencyTypeNone) { name = NSLocalizedString(@"Wisdom", @""); - bonus = self.proficiencyBonus + self.wisdomModifier; - [parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]]; + bonus = self.wisdomModifier + [self proficiencyBonusForType:self.wisdomSavingThrowProficiency]; + advantage = [Monster advantageLabelStringForType:self.wisdomSavingThrowAdvantage]; + if (advantage) { + advantage = [@" " stringByAppendingString:advantage]; + } + [parts addObject:[NSString stringWithFormat:@"%@ %+d%@", name, bonus, advantage]]; } if (self.charismaSavingThrowProficiency != kProficiencyTypeNone) { name = NSLocalizedString(@"Charisma", @""); - bonus = self.proficiencyBonus + self.charismaModifier; - [parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]]; + bonus = self.charismaModifier + [self proficiencyBonusForType:self.charismaSavingThrowProficiency]; + advantage = [Monster advantageLabelStringForType:self.charismaSavingThrowAdvantage]; + if (advantage) { + advantage = [@" " stringByAppendingString:advantage]; + } + [parts addObject:[NSString stringWithFormat:@"%@ %+d%@", name, bonus, advantage]]; } - return [parts componentsJoinedByString:@" "]; + return [parts componentsJoinedByString:@", "]; } -(int)proficiencyBonus {