Shipyard code now uses OOShipRegistry. Simplified some code by using OOEquipmentItem instead of fiddling with arrays; should do more of that.
git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@1691 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
parent
717e72ffae
commit
fb3b2b7ebe
@ -779,7 +779,7 @@
|
|||||||
"equipment-port-weapon-@" = "Port %@";
|
"equipment-port-weapon-@" = "Port %@";
|
||||||
"equipment-single-pass-berth-@" = "1 Passenger Berth";
|
"equipment-single-pass-berth-@" = "1 Passenger Berth";
|
||||||
"equipment-multiple-pass-berth-@" = "%d Passenger Berths";
|
"equipment-multiple-pass-berth-@" = "%d Passenger Berths";
|
||||||
"equipment-not-available" = " (N/A)";
|
"equipment-@-not-available" = "%@ (N/A)";
|
||||||
"manifest-cargo-quantity-format" = "%d %@ × %@"; // $count $units × $commodityName
|
"manifest-cargo-quantity-format" = "%d %@ × %@"; // $count $units × $commodityName
|
||||||
|
|
||||||
// Short Range Chart Screen
|
// Short Range Chart Screen
|
||||||
|
@ -295,6 +295,8 @@
|
|||||||
ship.escort.reject = no;
|
ship.escort.reject = no;
|
||||||
|
|
||||||
shipData.load.shipyard.unknown = no; // Warning for when shipyard.plist entries do not have matching shipdata.plist entry, disabled by default for Realistic Shipyards OXP.
|
shipData.load.shipyard.unknown = no; // Warning for when shipyard.plist entries do not have matching shipdata.plist entry, disabled by default for Realistic Shipyards OXP.
|
||||||
|
shipData.load.begin = yes;
|
||||||
|
shipData.load.done = no;
|
||||||
|
|
||||||
|
|
||||||
sky.setup = no;
|
sky.setup = no;
|
||||||
|
@ -2680,9 +2680,7 @@ double scoopSoundPlayTime = 0.0;
|
|||||||
start.x += (float)mcr * v_eject.x; start.y += (float)mcr * v_eject.y; start.z += (float)mcr * v_eject.z;
|
start.x += (float)mcr * v_eject.x; start.y += (float)mcr * v_eject.y; start.z += (float)mcr * v_eject.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
vel.x = (flightSpeed + throw_speed) * v_forward.x;
|
vel = vector_multiply_scalar(v_forward, flightSpeed + throw_speed);
|
||||||
vel.y = (flightSpeed + throw_speed) * v_forward.y;
|
|
||||||
vel.z = (flightSpeed + throw_speed) * v_forward.z;
|
|
||||||
|
|
||||||
origin.x = position.x + v_right.x * start.x + v_up.x * start.y + v_forward.x * start.z;
|
origin.x = position.x + v_right.x * start.x + v_up.x * start.y + v_forward.x * start.z;
|
||||||
origin.y = position.y + v_right.y * start.x + v_up.y * start.y + v_forward.y * start.z;
|
origin.y = position.y + v_right.y * start.x + v_up.y * start.y + v_forward.y * start.z;
|
||||||
@ -3352,21 +3350,15 @@ double scoopSoundPlayTime = 0.0;
|
|||||||
// equipment damage
|
// equipment damage
|
||||||
if (damage_to < [self equipmentCount])
|
if (damage_to < [self equipmentCount])
|
||||||
{
|
{
|
||||||
NSArray* systems = [[self equipmentEnumerator] allObjects];
|
NSArray *systems = [[self equipmentEnumerator] allObjects];
|
||||||
NSString* system_key = [systems objectAtIndex:damage_to];
|
NSString *system_key = [systems objectAtIndex:damage_to];
|
||||||
NSString* system_name = nil;
|
NSString *system_name = nil;
|
||||||
if (([system_key hasSuffix:@"MISSILE"])||([system_key hasSuffix:@"MINE"])||([system_key isEqual:@"EQ_CARGO_BAY"]))
|
|
||||||
return;
|
if ([system_key hasSuffix:@"MISSILE"] || [system_key hasSuffix:@"MINE"] || [system_key isEqual:@"EQ_CARGO_BAY"]) return;
|
||||||
NSArray* eq = [UNIVERSE equipmentData];
|
|
||||||
unsigned i;
|
system_name = [[OOEquipmentType equipmentTypeWithIdentifier:system_key] name];
|
||||||
for (i = 0; (i < [eq count])&&(!system_name); i++)
|
if (system_name == nil) return;
|
||||||
{
|
|
||||||
NSArray* eqd = [eq arrayAtIndex:i];
|
|
||||||
if ([system_key isEqual:[eqd objectAtIndex:EQUIPMENT_KEY_INDEX]])
|
|
||||||
system_name = [eqd stringAtIndex:EQUIPMENT_SHORT_DESC_INDEX];
|
|
||||||
}
|
|
||||||
if (!system_name)
|
|
||||||
return;
|
|
||||||
// set the following so removeEquipment works on the right entity
|
// set the following so removeEquipment works on the right entity
|
||||||
[self setScriptTarget:self];
|
[self setScriptTarget:self];
|
||||||
[UNIVERSE clearPreviousMessage];
|
[UNIVERSE clearPreviousMessage];
|
||||||
@ -4000,24 +3992,23 @@ double scoopSoundPlayTime = 0.0;
|
|||||||
|
|
||||||
- (NSArray *) equipmentList
|
- (NSArray *) equipmentList
|
||||||
{
|
{
|
||||||
NSMutableArray *quip = [NSMutableArray array];
|
NSArray *eqTypes = [OOEquipmentType allEquipmentTypes];
|
||||||
unsigned i;
|
NSMutableArray *quip = [NSMutableArray arrayWithCapacity:[eqTypes count]];
|
||||||
NSArray *equipmentinfo = [UNIVERSE equipmentData];
|
NSEnumerator *eqTypeEnum = nil;
|
||||||
|
OOEquipmentType *eqType = nil;
|
||||||
|
|
||||||
for (i =0; i < [equipmentinfo count]; i++)
|
for (eqTypeEnum = [eqTypes objectEnumerator]; (eqType = [eqTypeEnum nextObject]); )
|
||||||
{
|
{
|
||||||
NSString *w_key = [[equipmentinfo arrayAtIndex:i] stringAtIndex:EQUIPMENT_KEY_INDEX];
|
if ([self hasEquipmentItem:[eqType identifier]])
|
||||||
NSString *w_key_damaged = [NSString stringWithFormat:@"%@_DAMAGED", w_key];
|
|
||||||
if ([self hasEquipmentItem:w_key])
|
|
||||||
{
|
{
|
||||||
[quip addObject:[[equipmentinfo arrayAtIndex:i] stringAtIndex:EQUIPMENT_SHORT_DESC_INDEX]];
|
[quip addObject:[eqType name]];
|
||||||
}
|
}
|
||||||
|
else if (![UNIVERSE strict])
|
||||||
if (![UNIVERSE strict])
|
|
||||||
{
|
{
|
||||||
if ([self hasEquipmentItem:w_key_damaged])
|
// Check for damaged version
|
||||||
|
if ([self hasEquipmentItem:[[eqType identifier] stringByAppendingString:@"_DAMAGED"]])
|
||||||
{
|
{
|
||||||
[quip addObject:[[[equipmentinfo arrayAtIndex:i] stringAtIndex:EQUIPMENT_SHORT_DESC_INDEX] stringByAppendingString:DESC(@"equipment-not-available")]];
|
[quip addObject:[NSString stringWithFormat:DESC(@"equipment-@-not-available"), [eqType name]]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4631,16 +4622,18 @@ static int last_outfitting_index;
|
|||||||
NSMutableArray* equipment_allowed = [NSMutableArray array];
|
NSMutableArray* equipment_allowed = [NSMutableArray array];
|
||||||
|
|
||||||
// find options that agree with this ship
|
// find options that agree with this ship
|
||||||
NSMutableArray* options = [NSMutableArray arrayWithArray:[(NSDictionary *)[[UNIVERSE shipyard] objectForKey:ship_desc] objectForKey:KEY_OPTIONAL_EQUIPMENT]];
|
OOShipRegistry *registry = [OOShipRegistry sharedRegistry];
|
||||||
|
NSDictionary *shipyardInfo = [registry shipyardInfoForKey:ship_desc];
|
||||||
|
NSMutableArray *options = [NSMutableArray arrayWithArray:[shipyardInfo arrayForKey:KEY_OPTIONAL_EQUIPMENT]];
|
||||||
// add standard items too!
|
// add standard items too!
|
||||||
[options addObjectsFromArray:[(NSDictionary *)[(NSDictionary *)[[UNIVERSE shipyard] objectForKey:ship_desc] objectForKey:KEY_STANDARD_EQUIPMENT] objectForKey:KEY_EQUIPMENT_EXTRAS]];
|
[options addObjectsFromArray:[[[registry shipyardInfoForKey:ship_desc] dictionaryForKey:KEY_STANDARD_EQUIPMENT] arrayForKey:KEY_EQUIPMENT_EXTRAS]];
|
||||||
|
|
||||||
unsigned i,j;
|
unsigned i,j;
|
||||||
for (i = 0; i < [equipdata count]; i++)
|
for (i = 0; i < [equipdata count]; i++)
|
||||||
{
|
{
|
||||||
NSString *eq_key = (NSString*)[(NSArray*)[equipdata objectAtIndex:i] objectAtIndex:EQUIPMENT_KEY_INDEX];
|
NSString *eq_key = [[equipdata arrayAtIndex:i] stringAtIndex:EQUIPMENT_KEY_INDEX];
|
||||||
NSString *eq_key_damaged = [NSString stringWithFormat:@"%@_DAMAGED", eq_key];
|
NSString *eq_key_damaged = [NSString stringWithFormat:@"%@_DAMAGED", eq_key];
|
||||||
OOTechLevelID min_techlevel = [[equipdata arrayAtIndex:i] unsignedIntAtIndex:EQUIPMENT_TECH_LEVEL_INDEX];
|
OOTechLevelID min_techlevel = [[equipdata arrayAtIndex:i] unsignedIntAtIndex:EQUIPMENT_TECH_LEVEL_INDEX];
|
||||||
|
|
||||||
NSMutableDictionary *eq_extra_info_dict = [NSMutableDictionary dictionary];
|
NSMutableDictionary *eq_extra_info_dict = [NSMutableDictionary dictionary];
|
||||||
if ([(NSArray *)[equipdata objectAtIndex:i] count] > 5)
|
if ([(NSArray *)[equipdata objectAtIndex:i] count] > 5)
|
||||||
@ -4703,7 +4696,7 @@ static int last_outfitting_index;
|
|||||||
if ((int)i == itemForSelectFacing)
|
if ((int)i == itemForSelectFacing)
|
||||||
{
|
{
|
||||||
skip = [equipment_allowed count] - 1; // skip to this upgrade
|
skip = [equipment_allowed count] - 1; // skip to this upgrade
|
||||||
unsigned available_facings = [[[UNIVERSE shipyard] dictionaryForKey:ship_desc] unsignedIntForKey:KEY_WEAPON_FACINGS];
|
unsigned available_facings = [shipyardInfo unsignedIntForKey:KEY_WEAPON_FACINGS];
|
||||||
if (available_facings & WEAPON_FACING_FORWARD)
|
if (available_facings & WEAPON_FACING_FORWARD)
|
||||||
[equipment_allowed addUnsignedInteger:i];
|
[equipment_allowed addUnsignedInteger:i];
|
||||||
if (available_facings & WEAPON_FACING_AFT)
|
if (available_facings & WEAPON_FACING_AFT)
|
||||||
|
@ -37,6 +37,7 @@ MA 02110-1301, USA.
|
|||||||
#import "MyOpenGLView.h"
|
#import "MyOpenGLView.h"
|
||||||
#import "NSStringOOExtensions.h"
|
#import "NSStringOOExtensions.h"
|
||||||
#import "OOShipRegistry.h"
|
#import "OOShipRegistry.h"
|
||||||
|
#import "OOEquipmentType.h"
|
||||||
|
|
||||||
|
|
||||||
static NSString * const kOOLogNoteShowShipyardModel = @"script.debug.note.showShipyardModel";
|
static NSString * const kOOLogNoteShowShipyardModel = @"script.debug.note.showShipyardModel";
|
||||||
@ -1323,14 +1324,12 @@ static NSMutableDictionary* currentShipyard = nil;
|
|||||||
if (!dockedStation)
|
if (!dockedStation)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Quaternion q2 = { (GLfloat)0.707, (GLfloat)0.707, (GLfloat)0.0, (GLfloat)0.0};
|
Quaternion q2 = { (GLfloat)0.707f, (GLfloat)0.707f, (GLfloat)0.0f, (GLfloat)0.0f };
|
||||||
|
|
||||||
ship = [[ShipEntity alloc] init]; //retained
|
|
||||||
|
|
||||||
|
ship = [[ShipEntity alloc] initWithDictionary:shipDict];
|
||||||
[ship wasAddedToUniverse];
|
[ship wasAddedToUniverse];
|
||||||
[ship setUpShipFromDictionary:shipDict];
|
|
||||||
|
|
||||||
GLfloat cr = ship->collision_radius;
|
GLfloat cr = [ship collisionRadius];
|
||||||
OOLog(kOOLogNoteShowShipyardModel, @"::::: showShipyardModel:'%@'.", [ship name]);
|
OOLog(kOOLogNoteShowShipyardModel, @"::::: showShipyardModel:'%@'.", [ship name]);
|
||||||
[ship setOrientation: q2];
|
[ship setOrientation: q2];
|
||||||
|
|
||||||
@ -1447,28 +1446,15 @@ static NSMutableDictionary* currentShipyard = nil;
|
|||||||
|
|
||||||
// keep track of portable equipment..
|
// keep track of portable equipment..
|
||||||
|
|
||||||
NSArray *equipment = [UNIVERSE equipmentData];
|
|
||||||
NSMutableSet *portable_equipment = [NSMutableSet set];
|
NSMutableSet *portable_equipment = [NSMutableSet set];
|
||||||
NSEnumerator *eqEnum = nil;
|
NSEnumerator *eqEnum = nil;
|
||||||
NSString *eq_desc = nil;
|
NSString *eq_desc = nil;
|
||||||
|
OOEquipmentType *item = nil;
|
||||||
|
|
||||||
for (eqEnum = [self equipmentEnumerator]; (eq_desc = [eqEnum nextObject]);)
|
for (eqEnum = [self equipmentEnumerator]; (eq_desc = [eqEnum nextObject]);)
|
||||||
{
|
{
|
||||||
NSDictionary* eq_dict = nil;
|
item = [OOEquipmentType equipmentTypeWithIdentifier:eq_desc];
|
||||||
for (i = 0; (i < [equipment count])&&(!eq_dict); i++)
|
if ([item isPortableBetweenShips]) [portable_equipment addObject:eq_desc];
|
||||||
{
|
|
||||||
NSArray* eq_info = [equipment objectAtIndex:i];
|
|
||||||
if ([eq_desc isEqual:[eq_info stringAtIndex:EQUIPMENT_KEY_INDEX]] &&
|
|
||||||
[eq_info count] > EQUIPMENT_EXTRA_INFO_INDEX)
|
|
||||||
{
|
|
||||||
eq_dict = [eq_info dictionaryAtIndex:EQUIPMENT_EXTRA_INFO_INDEX];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ([eq_dict boolForKey:@"portable_between_ships"])
|
|
||||||
{
|
|
||||||
[portable_equipment addObject:eq_desc];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove ALL
|
// remove ALL
|
||||||
|
@ -63,8 +63,8 @@ static NSString * const kCacheKeyCaches = @"caches";
|
|||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
kEndianTagValue = 0x12345678UL,
|
kEndianTagValue = 0x0123456789ABCDEFULL,
|
||||||
kFormatVersionValue = 19
|
kFormatVersionValue = 20
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -304,7 +304,7 @@ static OOCacheManager *sSingleton = nil;
|
|||||||
NSData *endianTag = nil;
|
NSData *endianTag = nil;
|
||||||
NSNumber *formatVersion = nil;
|
NSNumber *formatVersion = nil;
|
||||||
BOOL accept = YES;
|
BOOL accept = YES;
|
||||||
uint32_t endianTagValue = 0;
|
uint64_t endianTagValue = 0;
|
||||||
|
|
||||||
ooliteVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:kCacheKeyVersion];
|
ooliteVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:kCacheKeyVersion];
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ static OOCacheManager *sSingleton = nil;
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
endianTagValue = *(const uint32_t *)[endianTag bytes];
|
endianTagValue = *(const uint64_t *)[endianTag bytes];
|
||||||
if (endianTagValue != kEndianTagValue)
|
if (endianTagValue != kEndianTagValue)
|
||||||
{
|
{
|
||||||
OOLog(kOOLogDataCacheRebuild, @"Data cache endianness is inappropriate for this system, rebuilding cache.");
|
OOLog(kOOLogDataCacheRebuild, @"Data cache endianness is inappropriate for this system, rebuilding cache.");
|
||||||
@ -376,7 +376,7 @@ static OOCacheManager *sSingleton = nil;
|
|||||||
NSData *endianTag = nil;
|
NSData *endianTag = nil;
|
||||||
NSNumber *formatVersion = nil;
|
NSNumber *formatVersion = nil;
|
||||||
NSDictionary *pListRep = nil;
|
NSDictionary *pListRep = nil;
|
||||||
uint32_t endianTagValue = kEndianTagValue;
|
uint64_t endianTagValue = kEndianTagValue;
|
||||||
|
|
||||||
if (_caches == nil) return;
|
if (_caches == nil) return;
|
||||||
|
|
||||||
|
@ -57,17 +57,18 @@ SOFTWARE.
|
|||||||
{
|
{
|
||||||
NSDictionary *_shipData;
|
NSDictionary *_shipData;
|
||||||
NSArray *_demoShips;
|
NSArray *_demoShips;
|
||||||
NSSet *_playerShips;
|
NSArray *_playerShips;
|
||||||
NSDictionary *_probabilitySets;
|
NSDictionary *_probabilitySets;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (OOShipRegistry *) sharedRegistry;
|
+ (OOShipRegistry *) sharedRegistry;
|
||||||
|
|
||||||
- (NSDictionary *) shipInfoForKey:(NSString *)key;
|
- (NSDictionary *) shipInfoForKey:(NSString *)key;
|
||||||
|
- (NSDictionary *) shipyardInfoForKey:(NSString *)key;
|
||||||
- (OOProbabilitySet *) probabilitySetForRole:(NSString *)role;
|
- (OOProbabilitySet *) probabilitySetForRole:(NSString *)role;
|
||||||
|
|
||||||
- (NSArray *) demoShipKeys;
|
- (NSArray *) demoShipKeys;
|
||||||
- (NSSet *) playerShipKeys;
|
- (NSArray *) playerShipKeys;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
OOCacheManager *cache = [OOCacheManager sharedCache];
|
OOCacheManager *cache = [OOCacheManager sharedCache];
|
||||||
|
|
||||||
_shipData = [[cache objectForKey:kShipDataCacheKey inCache:kShipRegistryCacheName] retain];
|
_shipData = [[cache objectForKey:kShipDataCacheKey inCache:kShipRegistryCacheName] retain];
|
||||||
_playerShips = [[NSSet setWithArray:[cache objectForKey:kPlayerShipsCacheKey inCache:kShipRegistryCacheName]] retain];
|
_playerShips = [[cache objectForKey:kPlayerShipsCacheKey inCache:kShipRegistryCacheName] retain];
|
||||||
if ([_shipData count] == 0) // Don't accept nil or empty
|
if ([_shipData count] == 0) // Don't accept nil or empty
|
||||||
{
|
{
|
||||||
[self loadShipData];
|
[self loadShipData];
|
||||||
@ -160,6 +160,12 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSDictionary *) shipyardInfoForKey:(NSString *)key
|
||||||
|
{
|
||||||
|
return [[self shipInfoForKey:key] objectForKey:@"shipyard"];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
- (OOProbabilitySet *) probabilitySetForRole:(NSString *)role
|
- (OOProbabilitySet *) probabilitySetForRole:(NSString *)role
|
||||||
{
|
{
|
||||||
if (role == nil) return nil;
|
if (role == nil) return nil;
|
||||||
@ -173,7 +179,7 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (NSSet *) playerShipKeys
|
- (NSArray *) playerShipKeys
|
||||||
{
|
{
|
||||||
return _playerShips;
|
return _playerShips;
|
||||||
}
|
}
|
||||||
@ -216,6 +222,9 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
NSString *key = nil;
|
NSString *key = nil;
|
||||||
NSDictionary *immutableResult = nil;
|
NSDictionary *immutableResult = nil;
|
||||||
|
|
||||||
|
OOLog(@"shipData.load.begin", @"Loading ship data...");
|
||||||
|
OOLogIndentIf(@"shipData.load.begin");
|
||||||
|
|
||||||
[_shipData release];
|
[_shipData release];
|
||||||
_shipData = nil;
|
_shipData = nil;
|
||||||
[_playerShips release];
|
[_playerShips release];
|
||||||
@ -254,6 +263,9 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
|
|
||||||
_shipData = [immutableResult retain];
|
_shipData = [immutableResult retain];
|
||||||
[[OOCacheManager sharedCache] setObject:_shipData forKey:kShipDataCacheKey inCache:kShipRegistryCacheName];
|
[[OOCacheManager sharedCache] setObject:_shipData forKey:kShipDataCacheKey inCache:kShipRegistryCacheName];
|
||||||
|
|
||||||
|
OOLogOutdentIf(@"shipData.load.begin");
|
||||||
|
OOLog(@"shipData.load.done", @"Ship data loaded.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -513,7 +525,7 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
mergeMode:MERGE_SMART
|
mergeMode:MERGE_SMART
|
||||||
cache:NO];
|
cache:NO];
|
||||||
|
|
||||||
playerShips = [NSMutableSet setWithCapacity:[shipyard count]];
|
playerShips = [NSMutableArray arrayWithCapacity:[shipyard count]];
|
||||||
|
|
||||||
// Insert merged shipyard and shipyardOverrides entries.
|
// Insert merged shipyard and shipyardOverrides entries.
|
||||||
for (enumerator = [shipyard keyEnumerator]; (key = [enumerator nextObject]); )
|
for (enumerator = [shipyard keyEnumerator]; (key = [enumerator nextObject]); )
|
||||||
@ -537,7 +549,7 @@ static NSString * const kDefaultDemoShip = @"coriolis-station";
|
|||||||
}
|
}
|
||||||
|
|
||||||
_playerShips = [playerShips copy];
|
_playerShips = [playerShips copy];
|
||||||
[[OOCacheManager sharedCache] setObject:[_playerShips allObjects] forKey:kPlayerShipsCacheKey inCache:kShipRegistryCacheName];
|
[[OOCacheManager sharedCache] setObject:_playerShips forKey:kPlayerShipsCacheKey inCache:kShipRegistryCacheName];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
@ -189,8 +189,6 @@ enum
|
|||||||
|
|
||||||
BOOL dumpCollisionInfo;
|
BOOL dumpCollisionInfo;
|
||||||
|
|
||||||
NSDictionary *shipyard; // holds data on all ships for sale, loaded at initialisation
|
|
||||||
|
|
||||||
NSDictionary *commodityLists; // holds data on commodities for various types of station, loaded at initialisation
|
NSDictionary *commodityLists; // holds data on commodities for various types of station, loaded at initialisation
|
||||||
NSArray *commodityData; // holds data on commodities extracted from commodityLists
|
NSArray *commodityData; // holds data on commodities extracted from commodityLists
|
||||||
|
|
||||||
@ -451,7 +449,6 @@ enum
|
|||||||
- (OOSystemID) systemIDForSystemSeed:(Random_Seed)seed;
|
- (OOSystemID) systemIDForSystemSeed:(Random_Seed)seed;
|
||||||
- (OOSystemID) currentSystemID;
|
- (OOSystemID) currentSystemID;
|
||||||
|
|
||||||
- (NSDictionary *) shipyard;
|
|
||||||
- (NSDictionary *) descriptions;
|
- (NSDictionary *) descriptions;
|
||||||
- (NSDictionary *) characters;
|
- (NSDictionary *) characters;
|
||||||
- (NSDictionary *) missiontext;
|
- (NSDictionary *) missiontext;
|
||||||
|
@ -212,8 +212,6 @@ static NSComparisonResult comparePrice(NSDictionary *dict1, NSDictionary *dict2,
|
|||||||
time_delta = 0.0;
|
time_delta = 0.0;
|
||||||
universal_time = 0.0;
|
universal_time = 0.0;
|
||||||
|
|
||||||
shipyard = [[ResourceManager dictionaryFromFilesNamed:@"shipyard.plist" inFolder:@"Config" andMerge:YES] retain];
|
|
||||||
|
|
||||||
commodityLists = [(NSDictionary *)[ResourceManager dictionaryFromFilesNamed:@"commodities.plist" inFolder:@"Config" andMerge:YES] retain];
|
commodityLists = [(NSDictionary *)[ResourceManager dictionaryFromFilesNamed:@"commodities.plist" inFolder:@"Config" andMerge:YES] retain];
|
||||||
commodityData = [[NSArray arrayWithArray:[commodityLists arrayForKey:@"default"]] retain];
|
commodityData = [[NSArray arrayWithArray:[commodityLists arrayForKey:@"default"]] retain];
|
||||||
|
|
||||||
@ -309,7 +307,6 @@ static NSComparisonResult comparePrice(NSDictionary *dict1, NSDictionary *dict2,
|
|||||||
[comm_log_gui release];
|
[comm_log_gui release];
|
||||||
|
|
||||||
[entities release];
|
[entities release];
|
||||||
[shipyard release];
|
|
||||||
|
|
||||||
[commodityLists release];
|
[commodityLists release];
|
||||||
[commodityData release];
|
[commodityData release];
|
||||||
@ -452,9 +449,6 @@ static NSComparisonResult comparePrice(NSDictionary *dict1, NSDictionary *dict2,
|
|||||||
time_delta = 0.0;
|
time_delta = 0.0;
|
||||||
universal_time = 0.0;
|
universal_time = 0.0;
|
||||||
|
|
||||||
[shipyard autorelease];
|
|
||||||
shipyard = [[ResourceManager dictionaryFromFilesNamed:@"shipyard.plist" inFolder:@"Config" andMerge:YES] retain];
|
|
||||||
|
|
||||||
[commodityLists autorelease];
|
[commodityLists autorelease];
|
||||||
commodityLists = [[ResourceManager dictionaryFromFilesNamed:@"commodities.plist" inFolder:@"Config" andMerge:YES] retain];
|
commodityLists = [[ResourceManager dictionaryFromFilesNamed:@"commodities.plist" inFolder:@"Config" andMerge:YES] retain];
|
||||||
|
|
||||||
@ -5765,12 +5759,6 @@ OOINLINE BOOL EntityInRange(Vector p1, Entity *e2, float range)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
- (NSDictionary *) shipyard
|
|
||||||
{
|
|
||||||
return shipyard;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
- (NSDictionary *) descriptions
|
- (NSDictionary *) descriptions
|
||||||
{
|
{
|
||||||
if (descriptions == nil)
|
if (descriptions == nil)
|
||||||
@ -7082,8 +7070,10 @@ double estimatedTimeForJourney(double distance, int hops)
|
|||||||
|
|
||||||
NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary];
|
NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary];
|
||||||
|
|
||||||
float tech_price_boost = (ship_seed.a + ship_seed.b) / 256.0;
|
float tech_price_boost = (ship_seed.a + ship_seed.b) / 256.0;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
PlayerEntity *player = [PlayerEntity sharedPlayer];
|
||||||
|
OOShipRegistry *registry = [OOShipRegistry sharedRegistry];
|
||||||
|
|
||||||
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
@ -7097,33 +7087,29 @@ double estimatedTimeForJourney(double distance, int hops)
|
|||||||
|
|
||||||
double days_until_sale = (ship_sold_time - current_time) / 86400.0;
|
double days_until_sale = (ship_sold_time - current_time) / 86400.0;
|
||||||
|
|
||||||
NSMutableArray *keysForShips = [NSMutableArray arrayWithArray:[shipyard allKeys]];
|
NSMutableArray *keysForShips = [NSMutableArray arrayWithArray:[registry playerShipKeys]];
|
||||||
unsigned si;
|
unsigned si;
|
||||||
for (si = 0; si < [keysForShips count]; si++)
|
for (si = 0; si < [keysForShips count]; si++)
|
||||||
{
|
{
|
||||||
//eliminate any ships that fail a 'conditions test'
|
//eliminate any ships that fail a 'conditions test'
|
||||||
NSString *key = [keysForShips stringAtIndex: si];
|
NSString *key = [keysForShips stringAtIndex:si];
|
||||||
NSDictionary *dict = [shipyard dictionaryForKey: key];
|
NSDictionary *dict = [registry shipyardInfoForKey:key];
|
||||||
if ([dict objectForKey:@"conditions"])
|
if ([dict objectForKey:@"conditions"])
|
||||||
{
|
{
|
||||||
PlayerEntity* player = [PlayerEntity sharedPlayer];
|
if (![player checkCouplet:dict onEntity:player])
|
||||||
if ((player) && (player->isPlayer) && (![player checkCouplet: dict onEntity: player]))
|
[keysForShips removeObjectAtIndex:si--];
|
||||||
[keysForShips removeObjectAtIndex: si--];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NSDictionary *systemInfo = [self generateSystemData:system_seed];
|
||||||
|
OOTechLevelID techlevel = [systemInfo unsignedIntForKey:KEY_TECHLEVEL];
|
||||||
|
|
||||||
NSDictionary* systemInfo = [self generateSystemData:system_seed];
|
if (specialTL != NSNotFound) techlevel = specialTL;
|
||||||
unsigned techlevel = [systemInfo unsignedIntForKey:KEY_TECHLEVEL];
|
|
||||||
|
|
||||||
if (specialTL != NSNotFound)
|
unsigned ship_index = (ship_seed.d * 0x100 + ship_seed.e) % [keysForShips count];
|
||||||
techlevel = specialTL;
|
NSString *ship_key = [keysForShips stringAtIndex:ship_index];
|
||||||
|
NSDictionary *ship_info = [registry shipyardInfoForKey:ship_key];
|
||||||
unsigned ship_index = (ship_seed.d * 0x100 + ship_seed.e) % [keysForShips count];
|
OOTechLevelID ship_techlevel = [ship_info intForKey:KEY_TECHLEVEL];
|
||||||
|
|
||||||
NSString* ship_key = [keysForShips stringAtIndex:ship_index];
|
|
||||||
NSDictionary* ship_info = [shipyard dictionaryForKey:ship_key];
|
|
||||||
OOTechLevelID ship_techlevel = [ship_info intForKey:KEY_TECHLEVEL];
|
|
||||||
|
|
||||||
double chance = 1.0 - pow(1.0 - [ship_info doubleForKey:KEY_CHANCE], OOMax_f(1, techlevel - ship_techlevel));
|
double chance = 1.0 - pow(1.0 - [ship_info doubleForKey:KEY_CHANCE], OOMax_f(1, techlevel - ship_techlevel));
|
||||||
|
|
||||||
@ -7177,88 +7163,47 @@ double estimatedTimeForJourney(double distance, int hops)
|
|||||||
while ((randf() < chance) && ([options count]))
|
while ((randf() < chance) && ([options count]))
|
||||||
{
|
{
|
||||||
chance *= chance; //decrease the chance of a further customisation
|
chance *= chance; //decrease the chance of a further customisation
|
||||||
int option_index = Ranrot() % [options count];
|
int option_index = Ranrot() % [options count];
|
||||||
NSString* equipment = [options stringAtIndex:option_index];
|
NSString *equipmentKey = [options stringAtIndex:option_index];
|
||||||
int eq_index = NSNotFound;
|
OOEquipmentType *item = [OOEquipmentType equipmentTypeWithIdentifier:equipmentKey];
|
||||||
unsigned q;
|
|
||||||
for (q = 0; (q < [equipmentData count])&&(eq_index == NSNotFound) ; q++)
|
|
||||||
{
|
|
||||||
if ([equipment isEqual:[[equipmentData arrayAtIndex:q] stringAtIndex:EQUIPMENT_KEY_INDEX]])
|
|
||||||
eq_index = q;
|
|
||||||
}
|
|
||||||
if (eq_index != NSNotFound)
|
|
||||||
{
|
|
||||||
NSArray* equipment_info = [equipmentData arrayAtIndex:eq_index];
|
|
||||||
//all amounts are x/10 due to being represented in tenths of credits
|
|
||||||
OOCreditsQuantity eq_price = [equipment_info unsignedIntAtIndex:EQUIPMENT_PRICE_INDEX] / 10;
|
|
||||||
unsigned eq_techlevel = [equipment_info unsignedIntAtIndex:EQUIPMENT_TECH_LEVEL_INDEX];
|
|
||||||
NSString* eq_short_desc = [equipment_info stringAtIndex:EQUIPMENT_SHORT_DESC_INDEX];
|
|
||||||
NSString* eq_long_desc = [equipment_info stringAtIndex:EQUIPMENT_LONG_DESC_INDEX];
|
|
||||||
|
|
||||||
if (eq_techlevel > techlevel)
|
if (item != nil)
|
||||||
|
{
|
||||||
|
OOTechLevelID eqTechLevel = [item techLevel];
|
||||||
|
OOCreditsQuantity eqPrice = [item price] / 10; // all amounts are x/10 due to being represented in tenths of credits.
|
||||||
|
NSString *eqShortDesc = [item name];
|
||||||
|
NSString *eqLongDesc = [item descriptiveText];
|
||||||
|
|
||||||
|
if ([item techLevel] > techlevel)
|
||||||
{
|
{
|
||||||
// cap maximum tech level
|
// Cap maximum tech level.
|
||||||
if (eq_techlevel > 15)
|
eqTechLevel = MAX(eqTechLevel, 15U);
|
||||||
eq_techlevel = 15;
|
|
||||||
// higher tech items are rarer!
|
// Higher tech items are rarer!
|
||||||
if (randf() * (eq_techlevel - techlevel) < 1.0)
|
if (randf() * (eqTechLevel - techlevel) < 1.0)
|
||||||
{
|
{
|
||||||
eq_price *= (tech_price_boost + eq_techlevel - techlevel) * 90 / 100; //all equip has a 10% disocount
|
// All included equip has a 10% discount.
|
||||||
}
|
eqPrice *= (tech_price_boost + eqTechLevel - techlevel) * 90 / 100;
|
||||||
else
|
|
||||||
{
|
|
||||||
eq_price = 0; // bar this upgrade
|
|
||||||
}
|
}
|
||||||
|
else eqPrice = 0; // Bar this upgrade.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eq_price > 0)
|
if (eqPrice > 0)
|
||||||
{
|
{
|
||||||
if (![equipment hasPrefix:@"EQ_WEAPON"])
|
if ([equipmentKey hasPrefix:@"EQ_WEAPON"])
|
||||||
{
|
{
|
||||||
if ([equipment isEqual:@"EQ_PASSENGER_BERTH"])
|
OOWeaponType new_weapon = EquipmentStringToWeaponType(equipmentKey);
|
||||||
{
|
|
||||||
if ((max_cargo >= 5) && (randf() < chance))
|
|
||||||
{
|
|
||||||
max_cargo -= 5;
|
|
||||||
price += eq_price;
|
|
||||||
[extras addObject:equipment];
|
|
||||||
if (passenger_berths == 0)
|
|
||||||
{
|
|
||||||
// This will be needed to construct the description for passenger berths.
|
|
||||||
passengerBerthLongDesc = [NSString stringWithFormat:@"%@", [eq_long_desc lowercaseString]];
|
|
||||||
}
|
|
||||||
passenger_berths++;
|
|
||||||
customised = YES;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[options removeObject:equipment]; // remove the option if there's no space left
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
price += eq_price;
|
|
||||||
[extras addObject:equipment];
|
|
||||||
[description appendFormat:DESC(@"extra-@-@"), eq_short_desc, [eq_long_desc lowercaseString]];
|
|
||||||
[short_description appendFormat:short_extras_string, eq_short_desc];
|
|
||||||
short_extras_string = @" %@.";
|
|
||||||
customised = YES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OOWeaponType new_weapon = EquipmentStringToWeaponType(equipment);
|
|
||||||
//fit best weapon forward
|
//fit best weapon forward
|
||||||
if (new_weapon > fwd_weapon)
|
if (new_weapon > fwd_weapon)
|
||||||
{
|
{
|
||||||
//again remember to divide price by 10 to get credits from tenths of credit
|
//again remember to divide price by 10 to get credits from tenths of credit
|
||||||
price -= [self getPriceForWeaponSystemWithKey:fwd_weapon_string] * 90 / 1000; // 90% credits
|
price -= [self getPriceForWeaponSystemWithKey:fwd_weapon_string] * 90 / 1000; // 90% credits
|
||||||
price += eq_price;
|
price += eqPrice;
|
||||||
fwd_weapon_string = equipment;
|
fwd_weapon_string = equipmentKey;
|
||||||
fwd_weapon = new_weapon;
|
fwd_weapon = new_weapon;
|
||||||
[ship_dict setObject:fwd_weapon_string forKey:KEY_EQUIPMENT_FORWARD_WEAPON];
|
[ship_dict setObject:fwd_weapon_string forKey:KEY_EQUIPMENT_FORWARD_WEAPON];
|
||||||
weapon_customised = YES;
|
weapon_customised = YES;
|
||||||
fwd_weapon_desc = eq_short_desc;
|
fwd_weapon_desc = eqShortDesc;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -7266,31 +7211,51 @@ double estimatedTimeForJourney(double distance, int hops)
|
|||||||
if (!aft_weapon || new_weapon > aft_weapon)
|
if (!aft_weapon || new_weapon > aft_weapon)
|
||||||
{
|
{
|
||||||
price -= [self getPriceForWeaponSystemWithKey:aft_weapon_string] * 90 / 1000; // 90% credits
|
price -= [self getPriceForWeaponSystemWithKey:aft_weapon_string] * 90 / 1000; // 90% credits
|
||||||
price += eq_price;
|
price += eqPrice;
|
||||||
aft_weapon_string = equipment;
|
aft_weapon_string = equipmentKey;
|
||||||
aft_weapon = new_weapon;
|
aft_weapon = new_weapon;
|
||||||
[ship_dict setObject:aft_weapon_string forKey:KEY_EQUIPMENT_AFT_WEAPON];
|
[ship_dict setObject:aft_weapon_string forKey:KEY_EQUIPMENT_AFT_WEAPON];
|
||||||
other_weapon_added = YES;
|
other_weapon_added = YES;
|
||||||
aft_weapon_desc = eq_short_desc;
|
aft_weapon_desc = eqShortDesc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ([equipmentKey isEqualToString:@"EQ_PASSENGER_BIRTH"])
|
||||||
|
{
|
||||||
|
if ((max_cargo >= 5) && (randf() < chance))
|
||||||
|
{
|
||||||
|
max_cargo -= 5;
|
||||||
|
price += eqPrice;
|
||||||
|
[extras addObject:equipmentKey];
|
||||||
|
if (passenger_berths == 0)
|
||||||
|
{
|
||||||
|
// This will be needed to construct the description for passenger berths.
|
||||||
|
passengerBerthLongDesc = [NSString stringWithFormat:@"%@", [eqLongDesc lowercaseString]];
|
||||||
|
}
|
||||||
|
passenger_berths++;
|
||||||
|
customised = YES;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// remove the option if there's no space left
|
||||||
|
[options removeObject:equipmentKey];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
price += eqPrice;
|
||||||
|
[extras addObject:equipmentKey];
|
||||||
|
[description appendFormat:DESC(@"extra-@-@"), eqShortDesc, [eqLongDesc lowercaseString]];
|
||||||
|
[short_description appendFormat:short_extras_string, eqShortDesc];
|
||||||
|
short_extras_string = @" %@.";
|
||||||
|
customised = YES;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ([equipment hasSuffix:@"ENERGY_UNIT"]) // remove ALL the energy unit add-ons
|
|
||||||
{
|
|
||||||
unsigned q;
|
|
||||||
for (q = 0; q < [options count]; q++)
|
|
||||||
{
|
|
||||||
if ([[options stringAtIndex:q] hasSuffix:@"ENERGY_UNIT"])
|
|
||||||
[options removeObjectAtIndex:q--];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (![equipment isEqual:@"EQ_PASSENGER_BERTH"]) // let this get added multiple times
|
|
||||||
[options removeObject:equipment];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// i18n: Some languages require that no conversion to lower case string takes place.
|
// i18n: Some languages require that no conversion to lower case string takes place.
|
||||||
BOOL lowercaseIgnore = [[self descriptions] boolForKey:@"lowercase_ignore"];
|
BOOL lowercaseIgnore = [[self descriptions] boolForKey:@"lowercase_ignore"];
|
||||||
@ -7409,7 +7374,7 @@ static NSComparisonResult comparePrice(NSDictionary *dict1, NSDictionary *dict2,
|
|||||||
|
|
||||||
// given the ship model (from ship_desc)
|
// given the ship model (from ship_desc)
|
||||||
// get the basic information about the standard customer model for that craft
|
// get the basic information about the standard customer model for that craft
|
||||||
NSDictionary *shipyard_info = [[UNIVERSE shipyard] dictionaryForKey:ship_desc];
|
NSDictionary *shipyard_info = [[OOShipRegistry sharedRegistry] shipyardInfoForKey:ship_desc];
|
||||||
NSDictionary *basic_info = [shipyard_info dictionaryForKey:KEY_STANDARD_EQUIPMENT];
|
NSDictionary *basic_info = [shipyard_info dictionaryForKey:KEY_STANDARD_EQUIPMENT];
|
||||||
OOCreditsQuantity base_price = [shipyard_info unsignedLongLongForKey:SHIPYARD_KEY_PRICE];
|
OOCreditsQuantity base_price = [shipyard_info unsignedLongLongForKey:SHIPYARD_KEY_PRICE];
|
||||||
unsigned base_missiles = [basic_info unsignedIntForKey:KEY_EQUIPMENT_MISSILES];
|
unsigned base_missiles = [basic_info unsignedIntForKey:KEY_EQUIPMENT_MISSILES];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user