117 lines
2.9 KiB
Objective-C
117 lines
2.9 KiB
Objective-C
//
|
|
// IJInventoryItem.m
|
|
// InsideJob
|
|
//
|
|
// Created by Adam Preble on 10/7/10.
|
|
// Copyright 2010 Adam Preble. All rights reserved.
|
|
//
|
|
|
|
#import "IJInventoryItem.h"
|
|
|
|
|
|
@implementation IJInventoryItem
|
|
|
|
@synthesize itemId, slot, damage, count;
|
|
|
|
+ (id)emptyItemWithSlot:(uint8_t)slot
|
|
{
|
|
IJInventoryItem *obj = [[[[self class] alloc] init] autorelease];
|
|
obj.slot = slot;
|
|
return obj;
|
|
}
|
|
|
|
- (NSString *)itemName
|
|
{
|
|
NSString *name = [[IJInventoryItem itemIdLookup] objectForKey:[NSNumber numberWithShort:self.itemId]];
|
|
if (name)
|
|
return name;
|
|
else
|
|
return [NSString stringWithFormat:@"%d", self.itemId];
|
|
}
|
|
|
|
- (NSImage *)image
|
|
{
|
|
NSSize itemImageSize = NSMakeSize(32, 32);
|
|
NSPoint atlasOffset;
|
|
NSUInteger itemsPerRow = 9;
|
|
NSUInteger pixelsPerColumn = 36;
|
|
NSUInteger pixelsPerRow = 56;
|
|
|
|
int index;
|
|
|
|
if (self.itemId <= 85)
|
|
{
|
|
if (self.itemId <= 20)
|
|
index = self.itemId - 1; // first item is 1
|
|
else if (self.itemId == 35)
|
|
index = self.itemId - (35 - 20);
|
|
else if (self.itemId >= 37)
|
|
index = self.itemId - (37 - 21);
|
|
atlasOffset = NSMakePoint(36, 75);
|
|
}
|
|
else if (self.itemId >= 256 && self.itemId <= 346)
|
|
{
|
|
index = self.itemId - 256;
|
|
atlasOffset = NSMakePoint(445, 23+52);
|
|
}
|
|
else if (self.itemId >= 2556 && self.itemId <= 2557)
|
|
{
|
|
index = self.itemId - 2556;
|
|
atlasOffset = NSMakePoint(445+pixelsPerColumn, 23+52);
|
|
}
|
|
else
|
|
{
|
|
NSLog(@"%s error: unrecognized item id %d", __PRETTY_FUNCTION__, self.itemId);
|
|
return nil;
|
|
}
|
|
|
|
atlasOffset.x += pixelsPerColumn * (index % itemsPerRow);
|
|
atlasOffset.y += pixelsPerRow * (index / itemsPerRow);
|
|
|
|
NSRect atlasRect = NSMakeRect(atlasOffset.x, atlasOffset.y, itemImageSize.width, itemImageSize.height);
|
|
|
|
|
|
NSImage *atlas = [NSImage imageNamed:@"DataValuesV110Transparent.png"];
|
|
NSImage *output = [[NSImage alloc] initWithSize:itemImageSize];
|
|
|
|
atlasRect.origin.y = atlas.size.height - atlasRect.origin.y;
|
|
|
|
[NSGraphicsContext saveGraphicsState];
|
|
|
|
[output lockFocus];
|
|
|
|
[atlas drawInRect:NSMakeRect(0, 0, itemImageSize.width, itemImageSize.height)
|
|
fromRect:atlasRect
|
|
operation:NSCompositeCopy
|
|
fraction:1.0];
|
|
|
|
[output unlockFocus];
|
|
|
|
[NSGraphicsContext restoreGraphicsState];
|
|
|
|
return output;
|
|
}
|
|
|
|
+ (NSDictionary *)itemIdLookup
|
|
{
|
|
static NSDictionary *lookup = nil;
|
|
if (!lookup)
|
|
{
|
|
NSError *error = nil;
|
|
NSString *lines = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Items" withExtension:@"csv"]
|
|
encoding:NSUTF8StringEncoding
|
|
error:&error];
|
|
NSMutableDictionary *building = [NSMutableDictionary dictionary];
|
|
[lines enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
|
|
NSArray *components = [line componentsSeparatedByString:@","];
|
|
NSNumber *itemId = [NSNumber numberWithShort:[[components objectAtIndex:0] intValue]];
|
|
NSString *name = [components objectAtIndex:1];
|
|
[building setObject:name forKey:itemId];
|
|
}];
|
|
lookup = [[NSDictionary alloc] initWithDictionary:building];
|
|
}
|
|
return lookup;
|
|
}
|
|
|
|
@end
|