Adds saving throws to monster card display.
Adds proficiencyBonus implementation to Monster. The proficiency bonus relies on CR and defaults to 0 until the CR fields are implemented
This commit is contained in:
@@ -342,12 +342,19 @@
|
|||||||
<constraint firstAttribute="height" constant="10" id="mAQ-Ry-dzJ"/>
|
<constraint firstAttribute="height" constant="10" id="mAQ-Ry-dzJ"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</imageView>
|
</imageView>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hMb-Iw-k4h">
|
||||||
|
<rect key="frame" x="8" y="284.5" width="398" height="17"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
<viewLayoutGuide key="safeArea" id="WIX-Yu-LXJ"/>
|
<viewLayoutGuide key="safeArea" id="WIX-Yu-LXJ"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="pZa-ia-7UT" firstAttribute="leading" secondItem="WYM-ya-Yje" secondAttribute="leading" id="5Uq-aL-jK9"/>
|
<constraint firstItem="pZa-ia-7UT" firstAttribute="leading" secondItem="WYM-ya-Yje" secondAttribute="leading" id="5Uq-aL-jK9"/>
|
||||||
<constraint firstItem="8yl-Bh-hgf" firstAttribute="centerX" secondItem="lBc-X0-1US" secondAttribute="centerX" id="6Lc-MB-cog"/>
|
<constraint firstItem="8yl-Bh-hgf" firstAttribute="centerX" secondItem="lBc-X0-1US" secondAttribute="centerX" id="6Lc-MB-cog"/>
|
||||||
|
<constraint firstItem="WIX-Yu-LXJ" firstAttribute="trailing" secondItem="hMb-Iw-k4h" secondAttribute="trailing" constant="8" id="7Ti-ID-py9"/>
|
||||||
<constraint firstItem="p05-uG-AlV" firstAttribute="trailing" secondItem="Ae7-YW-3xk" secondAttribute="trailing" id="DpK-wf-8qN"/>
|
<constraint firstItem="p05-uG-AlV" firstAttribute="trailing" secondItem="Ae7-YW-3xk" secondAttribute="trailing" id="DpK-wf-8qN"/>
|
||||||
<constraint firstItem="pZa-ia-7UT" firstAttribute="top" secondItem="WIX-Yu-LXJ" secondAttribute="top" constant="8" id="DpT-G9-lVC"/>
|
<constraint firstItem="pZa-ia-7UT" firstAttribute="top" secondItem="WIX-Yu-LXJ" secondAttribute="top" constant="8" id="DpT-G9-lVC"/>
|
||||||
<constraint firstItem="pZa-ia-7UT" firstAttribute="trailing" secondItem="WYM-ya-Yje" secondAttribute="trailing" id="GdO-iX-qNf"/>
|
<constraint firstItem="pZa-ia-7UT" firstAttribute="trailing" secondItem="WYM-ya-Yje" secondAttribute="trailing" id="GdO-iX-qNf"/>
|
||||||
@@ -360,6 +367,7 @@
|
|||||||
<constraint firstItem="pZa-ia-7UT" firstAttribute="leading" secondItem="WIX-Yu-LXJ" secondAttribute="leading" constant="8" id="Pzo-wK-eiz"/>
|
<constraint firstItem="pZa-ia-7UT" firstAttribute="leading" secondItem="WIX-Yu-LXJ" secondAttribute="leading" constant="8" id="Pzo-wK-eiz"/>
|
||||||
<constraint firstItem="WYM-ya-Yje" firstAttribute="trailing" secondItem="p05-uG-AlV" secondAttribute="trailing" id="QYF-YD-yAJ"/>
|
<constraint firstItem="WYM-ya-Yje" firstAttribute="trailing" secondItem="p05-uG-AlV" secondAttribute="trailing" id="QYF-YD-yAJ"/>
|
||||||
<constraint firstItem="0HK-T4-KQW" firstAttribute="leading" secondItem="8yl-Bh-hgf" secondAttribute="leading" id="Zyv-3S-cKO"/>
|
<constraint firstItem="0HK-T4-KQW" firstAttribute="leading" secondItem="8yl-Bh-hgf" secondAttribute="leading" id="Zyv-3S-cKO"/>
|
||||||
|
<constraint firstItem="hMb-Iw-k4h" firstAttribute="leading" secondItem="WIX-Yu-LXJ" secondAttribute="leading" constant="8" id="cXv-Yu-4Za"/>
|
||||||
<constraint firstItem="Ae7-YW-3xk" firstAttribute="top" secondItem="p05-uG-AlV" secondAttribute="bottom" constant="8" symbolic="YES" id="cmv-YY-dax"/>
|
<constraint firstItem="Ae7-YW-3xk" firstAttribute="top" secondItem="p05-uG-AlV" secondAttribute="bottom" constant="8" symbolic="YES" id="cmv-YY-dax"/>
|
||||||
<constraint firstItem="lBc-X0-1US" firstAttribute="leading" secondItem="skY-EN-baw" secondAttribute="leading" id="dPJ-04-kH2"/>
|
<constraint firstItem="lBc-X0-1US" firstAttribute="leading" secondItem="skY-EN-baw" secondAttribute="leading" id="dPJ-04-kH2"/>
|
||||||
<constraint firstItem="0HK-T4-KQW" firstAttribute="trailing" secondItem="8yl-Bh-hgf" secondAttribute="trailing" id="dTU-0J-ILa"/>
|
<constraint firstItem="0HK-T4-KQW" firstAttribute="trailing" secondItem="8yl-Bh-hgf" secondAttribute="trailing" id="dTU-0J-ILa"/>
|
||||||
@@ -368,6 +376,7 @@
|
|||||||
<constraint firstItem="p05-uG-AlV" firstAttribute="leading" secondItem="Ae7-YW-3xk" secondAttribute="leading" id="nHB-QQ-JPT"/>
|
<constraint firstItem="p05-uG-AlV" firstAttribute="leading" secondItem="Ae7-YW-3xk" secondAttribute="leading" id="nHB-QQ-JPT"/>
|
||||||
<constraint firstItem="zcw-26-kZQ" firstAttribute="top" secondItem="lBc-X0-1US" secondAttribute="bottom" constant="8" symbolic="YES" id="q0O-jK-tzU"/>
|
<constraint firstItem="zcw-26-kZQ" firstAttribute="top" secondItem="lBc-X0-1US" secondAttribute="bottom" constant="8" symbolic="YES" id="q0O-jK-tzU"/>
|
||||||
<constraint firstAttribute="trailing" secondItem="lBc-X0-1US" secondAttribute="trailing" id="sTY-zt-Sac"/>
|
<constraint firstAttribute="trailing" secondItem="lBc-X0-1US" secondAttribute="trailing" id="sTY-zt-Sac"/>
|
||||||
|
<constraint firstItem="hMb-Iw-k4h" firstAttribute="top" secondItem="zcw-26-kZQ" secondAttribute="bottom" constant="8" id="sk5-ZE-Vfd"/>
|
||||||
<constraint firstItem="WYM-ya-Yje" firstAttribute="top" secondItem="pZa-ia-7UT" secondAttribute="bottom" constant="8" symbolic="YES" id="thF-cF-gcb"/>
|
<constraint firstItem="WYM-ya-Yje" firstAttribute="top" secondItem="pZa-ia-7UT" secondAttribute="bottom" constant="8" symbolic="YES" id="thF-cF-gcb"/>
|
||||||
<constraint firstItem="p05-uG-AlV" firstAttribute="top" secondItem="WYM-ya-Yje" secondAttribute="bottom" constant="8" symbolic="YES" id="ydJ-o0-UE4"/>
|
<constraint firstItem="p05-uG-AlV" firstAttribute="top" secondItem="WYM-ya-Yje" secondAttribute="bottom" constant="8" symbolic="YES" id="ydJ-o0-UE4"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
@@ -387,6 +396,7 @@
|
|||||||
<outlet property="monsterHitPoints" destination="Ae7-YW-3xk" id="3og-CQ-jGe"/>
|
<outlet property="monsterHitPoints" destination="Ae7-YW-3xk" id="3og-CQ-jGe"/>
|
||||||
<outlet property="monsterIntelligence" destination="p82-wJ-OUJ" id="YzY-1R-Bje"/>
|
<outlet property="monsterIntelligence" destination="p82-wJ-OUJ" id="YzY-1R-Bje"/>
|
||||||
<outlet property="monsterMeta" destination="pZa-ia-7UT" id="QEV-cs-IEk"/>
|
<outlet property="monsterMeta" destination="pZa-ia-7UT" id="QEV-cs-IEk"/>
|
||||||
|
<outlet property="monsterSavingThrows" destination="hMb-Iw-k4h" id="LYK-xX-GCc"/>
|
||||||
<outlet property="monsterSpeed" destination="0HK-T4-KQW" id="V8T-ZK-2aB"/>
|
<outlet property="monsterSpeed" destination="0HK-T4-KQW" id="V8T-ZK-2aB"/>
|
||||||
<outlet property="monsterStrength" destination="Gfb-yf-Tbu" id="obD-QK-ZSo"/>
|
<outlet property="monsterStrength" destination="Gfb-yf-Tbu" id="obD-QK-ZSo"/>
|
||||||
<outlet property="monsterWisdom" destination="0lo-zE-s25" id="Wy8-kG-8Gg"/>
|
<outlet property="monsterWisdom" destination="0lo-zE-s25" id="Wy8-kG-8Gg"/>
|
||||||
|
|||||||
@@ -13,8 +13,11 @@
|
|||||||
@implementation Monster
|
@implementation Monster
|
||||||
|
|
||||||
@synthesize blindsightDistance;
|
@synthesize blindsightDistance;
|
||||||
|
// TODO: move this to Core Data and add to editor
|
||||||
@synthesize challengeRating;
|
@synthesize challengeRating;
|
||||||
|
// TODO: move this to Core Data and add to editor
|
||||||
@synthesize customChallengeRating;
|
@synthesize customChallengeRating;
|
||||||
|
// TODO: move this to Core Data and add to editor
|
||||||
@synthesize customProficiencyBonus;
|
@synthesize customProficiencyBonus;
|
||||||
@synthesize darkvisionDistance;
|
@synthesize darkvisionDistance;
|
||||||
@synthesize isBlind;
|
@synthesize isBlind;
|
||||||
@@ -352,11 +355,106 @@ NSString *const kAdvantageTypeDisadvantage = @"disadvantage";
|
|||||||
}
|
}
|
||||||
|
|
||||||
-(NSString*)savingThrowsDescription {
|
-(NSString*)savingThrowsDescription {
|
||||||
@throw [[NSException alloc] initWithName:@"unimplemented" reason:@"Method not implemented." userInfo:nil];
|
NSMutableArray *parts = [[NSMutableArray alloc] init];
|
||||||
|
NSString *name;
|
||||||
|
int bonus;
|
||||||
|
if (self.strengthSavingThrowProficiency != kProficiencyTypeNone) {
|
||||||
|
name = NSLocalizedString(@"Strength", @"");
|
||||||
|
bonus = self.proficiencyBonus + self.strengthModifier;
|
||||||
|
[parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]];
|
||||||
|
}
|
||||||
|
if (self.dexteritySavingThrowProficiency != kProficiencyTypeNone) {
|
||||||
|
name = NSLocalizedString(@"Dexterity", @"");
|
||||||
|
bonus = self.proficiencyBonus + self.dexterityModifier;
|
||||||
|
[parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]];
|
||||||
|
}
|
||||||
|
if (self.constitutionSavingThrowProficiency != kProficiencyTypeNone) {
|
||||||
|
name = NSLocalizedString(@"Constitution", @"");
|
||||||
|
bonus = self.proficiencyBonus + self.constitutionModifier;
|
||||||
|
[parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]];
|
||||||
|
}
|
||||||
|
if (self.intelligenceSavingThrowProficiency != kProficiencyTypeNone) {
|
||||||
|
name = NSLocalizedString(@"Intelligence", @"");
|
||||||
|
bonus = self.proficiencyBonus + self.intelligenceModifier;
|
||||||
|
[parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]];
|
||||||
|
}
|
||||||
|
if (self.wisdomSavingThrowProficiency != kProficiencyTypeNone) {
|
||||||
|
name = NSLocalizedString(@"Wisdom", @"");
|
||||||
|
bonus = self.proficiencyBonus + self.wisdomModifier;
|
||||||
|
[parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]];
|
||||||
|
}
|
||||||
|
if (self.charismaSavingThrowProficiency != kProficiencyTypeNone) {
|
||||||
|
name = NSLocalizedString(@"Charisma", @"");
|
||||||
|
bonus = self.proficiencyBonus + self.charismaModifier;
|
||||||
|
[parts addObject:[NSString stringWithFormat:@"%@ %+d", name, bonus]];
|
||||||
|
}
|
||||||
|
return [parts componentsJoinedByString:@" "];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(int)proficiencyBonus {
|
-(int)proficiencyBonus {
|
||||||
@throw [[NSException alloc] initWithName:@"unimplemented" reason:@"Method not implemented." userInfo:nil];
|
if ([@"*" isEqualToString:challengeRating]) {
|
||||||
|
return customProficiencyBonus;
|
||||||
|
} else if (
|
||||||
|
[@"0" isEqualToString:challengeRating] ||
|
||||||
|
[@"1/8" isEqualToString:challengeRating] ||
|
||||||
|
[@"1/4" isEqualToString:challengeRating] ||
|
||||||
|
[@"1/2" isEqualToString:challengeRating] ||
|
||||||
|
[@"1" isEqualToString:challengeRating] ||
|
||||||
|
[@"2" isEqualToString:challengeRating] ||
|
||||||
|
[@"3" isEqualToString:challengeRating] ||
|
||||||
|
[@"4" isEqualToString:challengeRating]
|
||||||
|
) {
|
||||||
|
return 2;
|
||||||
|
} else if (
|
||||||
|
[@"5" isEqualToString:challengeRating] ||
|
||||||
|
[@"6" isEqualToString:challengeRating] ||
|
||||||
|
[@"7" isEqualToString:challengeRating] ||
|
||||||
|
[@"8" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
} else if (
|
||||||
|
[@"9" isEqualToString:challengeRating] ||
|
||||||
|
[@"10" isEqualToString:challengeRating] ||
|
||||||
|
[@"11" isEqualToString:challengeRating] ||
|
||||||
|
[@"12" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
} else if (
|
||||||
|
[@"13" isEqualToString:challengeRating] ||
|
||||||
|
[@"14" isEqualToString:challengeRating] ||
|
||||||
|
[@"15" isEqualToString:challengeRating] ||
|
||||||
|
[@"16" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 5;
|
||||||
|
} else if (
|
||||||
|
[@"17" isEqualToString:challengeRating] ||
|
||||||
|
[@"18" isEqualToString:challengeRating] ||
|
||||||
|
[@"19" isEqualToString:challengeRating] ||
|
||||||
|
[@"20" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 6;
|
||||||
|
} else if (
|
||||||
|
[@"21" isEqualToString:challengeRating] ||
|
||||||
|
[@"22" isEqualToString:challengeRating] ||
|
||||||
|
[@"23" isEqualToString:challengeRating] ||
|
||||||
|
[@"24" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 7;
|
||||||
|
} else if (
|
||||||
|
[@"25" isEqualToString:challengeRating] ||
|
||||||
|
[@"26" isEqualToString:challengeRating] ||
|
||||||
|
[@"27" isEqualToString:challengeRating] ||
|
||||||
|
[@"28" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 8;
|
||||||
|
} else if (
|
||||||
|
[@"29" isEqualToString:challengeRating] ||
|
||||||
|
[@"30" isEqualToString:challengeRating])
|
||||||
|
{
|
||||||
|
return 9;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)addSkill: (Skill*)skill {
|
-(void)addSkill: (Skill*)skill {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
@property (weak, nonatomic) IBOutlet UILabel *monsterIntelligence;
|
@property (weak, nonatomic) IBOutlet UILabel *monsterIntelligence;
|
||||||
@property (weak, nonatomic) IBOutlet UILabel *monsterWisdom;
|
@property (weak, nonatomic) IBOutlet UILabel *monsterWisdom;
|
||||||
@property (weak, nonatomic) IBOutlet UILabel *monsterCharisma;
|
@property (weak, nonatomic) IBOutlet UILabel *monsterCharisma;
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *monsterSavingThrows;
|
||||||
|
|
||||||
@property Monster* monster;
|
@property Monster* monster;
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,14 @@ NSString* makeHTMLFragmentString(NSString* format, ...) {
|
|||||||
if (self.monsterCharisma) {
|
if (self.monsterCharisma) {
|
||||||
self.monsterCharisma.text = self.monster.charismaDescription;
|
self.monsterCharisma.text = self.monster.charismaDescription;
|
||||||
}
|
}
|
||||||
|
if (self.monsterSavingThrows) {
|
||||||
|
NSString *savingThrowsDescription = self.monster.savingThrowsDescription;
|
||||||
|
if (savingThrowsDescription == nil) {
|
||||||
|
self.monsterSavingThrows.text = @"";
|
||||||
|
} else {
|
||||||
|
self.monsterSavingThrows.attributedText = [HTMLHelper attributedStringFromHTML:makeHTMLFragmentString(@"<b>Saving Throws</b> %@", savingThrowsDescription)];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)unwindWithSegue:(UIStoryboardSegue *)unwindSegue {
|
- (IBAction)unwindWithSegue:(UIStoryboardSegue *)unwindSegue {
|
||||||
|
|||||||
Reference in New Issue
Block a user