Make ship.weaponPosition* return an array of vectors
This commit is contained in:
parent
cb97021d18
commit
5a84795861
@ -1971,7 +1971,7 @@ static ShipEntity *doOctreesCollide(ShipEntity *prime, ShipEntity *other);
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define MAKE_VECTOR_ARRAY(v) [NSArray arrayWithObjects:[NSNumber numberWithFloat:v.x], [NSNumber numberWithFloat:v.y], [NSNumber numberWithFloat:v.z], nil]
|
#define MAKE_VECTOR_ARRAY(v) [[[OONativeVector alloc] initWithVector:v] autorelease]
|
||||||
|
|
||||||
- (NSArray *) getWeaponOffsetFrom:(NSDictionary *)dict withKey:(NSString *)key inMode:(NSString *)mode
|
- (NSArray *) getWeaponOffsetFrom:(NSDictionary *)dict withKey:(NSString *)key inMode:(NSString *)mode
|
||||||
{
|
{
|
||||||
@ -11467,7 +11467,10 @@ Vector positionOffsetForShipInRotationToAlignment(ShipEntity* ship, Quaternion q
|
|||||||
ShipEntity *se = nil;
|
ShipEntity *se = nil;
|
||||||
for (subEnum = [self shipSubEntityEnumerator]; (se = [subEnum nextObject]); )
|
for (subEnum = [self shipSubEntityEnumerator]; (se = [subEnum nextObject]); )
|
||||||
{
|
{
|
||||||
if ([se fireSubentityLaserShot:range]) fired = YES;
|
if ([se fireSubentityLaserShot:range])
|
||||||
|
{
|
||||||
|
fired = YES;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1409,7 +1409,11 @@ Vector OOVectorFromObject(id object, Vector defaultValue)
|
|||||||
Vector result = defaultValue;
|
Vector result = defaultValue;
|
||||||
NSDictionary *dict = nil;
|
NSDictionary *dict = nil;
|
||||||
|
|
||||||
if ([object isKindOfClass:[NSString class]])
|
if ([object isKindOfClass:[OONativeVector class]])
|
||||||
|
{
|
||||||
|
result = [object getVector];
|
||||||
|
}
|
||||||
|
else if ([object isKindOfClass:[NSString class]])
|
||||||
{
|
{
|
||||||
// This will only write result if a valid vector is found, and will write an error message otherwise.
|
// This will only write result if a valid vector is found, and will write an error message otherwise.
|
||||||
ScanVectorFromString(object, &result);
|
ScanVectorFromString(object, &result);
|
||||||
|
@ -131,6 +131,18 @@ OOINLINE Vector normal_to_surface(Vector v1, Vector v2, Vector v3) CONST_FUNC;
|
|||||||
|
|
||||||
#if __OBJC__
|
#if __OBJC__
|
||||||
NSString *VectorDescription(Vector vector); // @"(x, y, z)"
|
NSString *VectorDescription(Vector vector); // @"(x, y, z)"
|
||||||
|
|
||||||
|
/* For storing vectors in NSArrays */
|
||||||
|
@interface OONativeVector: NSObject
|
||||||
|
{
|
||||||
|
@private
|
||||||
|
Vector v;
|
||||||
|
}
|
||||||
|
- (id) initWithVector:(Vector)vect;
|
||||||
|
- (Vector) getVector;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if OOMATHS_OPENGL_INTEGRATION
|
#if OOMATHS_OPENGL_INTEGRATION
|
||||||
|
@ -44,9 +44,31 @@ NSString *VectorDescription(Vector vector)
|
|||||||
{
|
{
|
||||||
return [NSString stringWithFormat:@"(%g, %g, %g)", vector.x, vector.y, vector.z];
|
return [NSString stringWithFormat:@"(%g, %g, %g)", vector.x, vector.y, vector.z];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@implementation OONativeVector
|
||||||
|
|
||||||
|
- (id) initWithVector:(Vector)vect
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
if (EXPECT_NOT(self == nil)) return nil;
|
||||||
|
|
||||||
|
v = vect;
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (Vector) getVector
|
||||||
|
{
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if !OOMATHS_STANDALONE
|
#if !OOMATHS_STANDALONE
|
||||||
/* This generates random vectors distrubuted evenly over the surface of the
|
/* This generates random vectors distrubuted evenly over the surface of the
|
||||||
unit sphere. It does this the simple way, by generating vectors in the
|
unit sphere. It does this the simple way, by generating vectors in the
|
||||||
|
@ -4122,6 +4122,9 @@ static JSBool ShipThreatAssessment(JSContext *context, uintN argc, jsval *vp)
|
|||||||
|
|
||||||
// check lasers
|
// check lasers
|
||||||
OOWeaponType wt = [thisEnt weaponTypeIDForFacing:WEAPON_FACING_FORWARD strict:NO];
|
OOWeaponType wt = [thisEnt weaponTypeIDForFacing:WEAPON_FACING_FORWARD strict:NO];
|
||||||
|
/* Not affected by multiple mounts here: they're either just a
|
||||||
|
* split of the power, or only more dangerous until they
|
||||||
|
* overheat */
|
||||||
assessment += ShipThreatAssessmentWeapon(wt);
|
assessment += ShipThreatAssessmentWeapon(wt);
|
||||||
if (isWeaponNone(wt))
|
if (isWeaponNone(wt))
|
||||||
{
|
{
|
||||||
|
@ -73,3 +73,6 @@ BOOL VectorFromArgumentList(JSContext *context, NSString *scriptClass, NSString
|
|||||||
Like VectorFromArgumentList(), but does not report an error on failure.
|
Like VectorFromArgumentList(), but does not report an error on failure.
|
||||||
*/
|
*/
|
||||||
BOOL VectorFromArgumentListNoError(JSContext *context, uintN argc, jsval *argv, HPVector *outVector, uintN *outConsumed) GCC_ATTR((nonnull (1, 3, 4)));
|
BOOL VectorFromArgumentListNoError(JSContext *context, uintN argc, jsval *argv, HPVector *outVector, uintN *outConsumed) GCC_ATTR((nonnull (1, 3, 4)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1136,3 +1136,5 @@ static JSBool VectorStaticRandomDirectionAndLength(JSContext *context, uintN arg
|
|||||||
|
|
||||||
OOJS_PROFILE_EXIT
|
OOJS_PROFILE_EXIT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1904,6 +1904,17 @@ NSString *OOJSDescribeValue(JSContext *context, jsval value, BOOL abbreviateObje
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@implementation OONativeVector (OOJavaScriptConversion)
|
||||||
|
|
||||||
|
- (jsval)oo_jsValueInContext:(JSContext *)context
|
||||||
|
{
|
||||||
|
jsval value = JSVAL_VOID;
|
||||||
|
VectorToJSValue(context, v, &value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
@implementation NSDictionary (OOJavaScriptConversion)
|
@implementation NSDictionary (OOJavaScriptConversion)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user