230 lines
6.2 KiB
Plaintext
230 lines
6.2 KiB
Plaintext
//
|
|
// CelestiaSimulation.mm
|
|
// celestia
|
|
//
|
|
// Created by Bob Ippolito on Fri Jun 07 2002.
|
|
// Copyright (c) 2002 Chris Laurel. All rights reserved.
|
|
//
|
|
|
|
#import "CelestiaSimulation.h"
|
|
#import "CelestiaSimulation_PrivateAPI.h"
|
|
#import "CelestiaUniversalCoord_PrivateAPI.h"
|
|
#import "CelestiaSelection_PrivateAPI.h"
|
|
#import "CelestiaUniverse_PrivateAPI.h"
|
|
#import "CelestiaObserver_PrivateAPI.h"
|
|
#import "CelestiaVector_PrivateAPI.h"
|
|
#import "NSString_ObjCPlusPlus.h"
|
|
#import "Astro.h"
|
|
|
|
/*
|
|
void gotoLocation(const RigidTransform& transform, double duration);
|
|
void setFrame(const FrameOfReference&);
|
|
FrameOfReference getFrame() const;
|
|
*/
|
|
|
|
@implementation CelestiaSimulation(PrivateAPI)
|
|
-(CelestiaSimulation *)initWithSimulation:(Simulation *)sim
|
|
{
|
|
self = [super init];
|
|
_data = [[NSValue alloc] initWithBytes:reinterpret_cast<void*>(&sim) objCType:@encode(Simulation*)];
|
|
return self;
|
|
}
|
|
-(Simulation *)simulation
|
|
{
|
|
return reinterpret_cast<Simulation*>([_data pointerValue]);
|
|
}
|
|
@end
|
|
|
|
@implementation CelestiaSimulation
|
|
-(void)dealloc
|
|
{
|
|
if (_data != nil)
|
|
{
|
|
[_data release];
|
|
_data = nil;
|
|
}
|
|
[super dealloc];
|
|
}
|
|
-(NSNumber*)julianDate
|
|
{
|
|
return [NSNumber numberWithDouble:[self simulation]->getTime()];
|
|
}
|
|
-(void)setDate:(NSNumber*)t
|
|
{
|
|
[self simulation]->setTime([t doubleValue]);
|
|
}
|
|
-(NSNumber*)realTime
|
|
{
|
|
return [NSNumber numberWithDouble:[self simulation]->getRealTime()];
|
|
}
|
|
-(NSNumber*)arrivalTime
|
|
{
|
|
return [NSNumber numberWithDouble:[self simulation]->getArrivalTime()];
|
|
}
|
|
-(void)update:(NSNumber*)dt
|
|
{
|
|
[self simulation]->update([dt doubleValue]);
|
|
}
|
|
-(CelestiaSelection*)pickObject:(CelestiaVector*)pickRay tolerance:(NSNumber*)tolerance
|
|
{
|
|
return [[[CelestiaSelection alloc] initWithSelection:[self simulation]->pickObject([pickRay vec3f],[tolerance floatValue])] autorelease];
|
|
}
|
|
-(CelestiaSelection*)pickObject:(CelestiaVector*)pickRay
|
|
{
|
|
return [self pickObject:pickRay tolerance:[NSNumber numberWithDouble:0.0]];
|
|
}
|
|
-(CelestiaUniverse*)universe
|
|
{
|
|
Universe* uni = [self simulation]->getUniverse();
|
|
if (uni == NULL)
|
|
return nil;
|
|
return [[[CelestiaUniverse alloc] initWithUniverse:uni] autorelease];
|
|
}
|
|
|
|
-(void)orbit:(CelestiaVector*)q
|
|
{
|
|
[self simulation]->orbit([q quatf]);
|
|
}
|
|
-(void)rotate:(CelestiaVector*)q
|
|
{
|
|
[self simulation]->rotate([q quatf]);
|
|
}
|
|
-(void)changeOrbitDistance:(NSNumber*)d
|
|
{
|
|
[self simulation]->changeOrbitDistance([d floatValue]);
|
|
}
|
|
-(void)setTargetSpeed:(NSNumber*)s
|
|
{
|
|
[self simulation]->setTargetSpeed([s floatValue]);
|
|
}
|
|
-(NSNumber*)targetSpeed
|
|
{
|
|
return [NSNumber numberWithDouble:[self simulation]->getTargetSpeed()];
|
|
}
|
|
-(CelestiaSelection*)selection
|
|
{
|
|
return [[[CelestiaSelection alloc] initWithSelection:[self simulation]->getSelection()] autorelease];
|
|
}
|
|
-(void)setSelection:(CelestiaSelection*)sel
|
|
{
|
|
[self simulation]->setSelection([sel selection]);
|
|
}
|
|
-(CelestiaSelection*)trackedObject
|
|
{
|
|
return [[[CelestiaSelection alloc] initWithSelection:[self simulation]->getTrackedObject()] autorelease];
|
|
}
|
|
-(void)setTrackedObject:(CelestiaSelection*)sel
|
|
{
|
|
[self simulation]->setTrackedObject([sel selection]);
|
|
}
|
|
|
|
-(void)selectStar:(NSNumber*)catalogNo
|
|
{
|
|
// [self simulation]->selectStar([catalogNo unsignedIntValue]);
|
|
}
|
|
|
|
-(void)selectPlanet:(NSNumber*)planetNo
|
|
{
|
|
[self simulation]->selectPlanet([planetNo intValue]);
|
|
}
|
|
|
|
-(CelestiaSelection*)findObject:(NSString*)s
|
|
{
|
|
return [[[CelestiaSelection alloc] initWithSelection:[self simulation]->findObject([s stdString])] autorelease];
|
|
}
|
|
|
|
-(CelestiaSelection*)findObjectFromPath:(NSString*)s
|
|
{
|
|
return [[[CelestiaSelection alloc] initWithSelection:[self simulation]->findObjectFromPath([s stdString])] autorelease];
|
|
}
|
|
|
|
-(void)gotoSelection:(NSNumber*)gotoTime up:(CelestiaVector*)up coordinateSystem:(NSString*)csysName
|
|
{
|
|
[self simulation]->gotoSelection(
|
|
[gotoTime doubleValue],
|
|
[up vec3f],
|
|
(astro::CoordinateSystem)[[Astro coordinateSystem:csysName] intValue]);
|
|
}
|
|
|
|
|
|
-(void)gotoSelection:(NSNumber*)gotoTime distance:(NSNumber*)distance up:(CelestiaVector*)up coordinateSystem:(NSString*)csysName
|
|
{
|
|
[self simulation]->gotoSelection(
|
|
[gotoTime doubleValue],
|
|
[distance doubleValue],
|
|
[up vec3f],
|
|
(astro::CoordinateSystem)[[Astro coordinateSystem:csysName] intValue]);
|
|
}
|
|
|
|
-(void)gotoSelection:(NSNumber*)gotoTime distance:(NSNumber*)distance longitude:(NSNumber*)longitude latitude:(NSNumber*)latitude up:(CelestiaVector*)up
|
|
{
|
|
[self simulation]->gotoSelectionLongLat(
|
|
[gotoTime doubleValue],
|
|
[distance doubleValue],
|
|
[longitude floatValue],
|
|
[latitude floatValue],
|
|
[up vec3f]);
|
|
}
|
|
|
|
-(NSArray*)getSelectionLongLat
|
|
{
|
|
double distance, longitude, latitude;
|
|
[self simulation]->getSelectionLongLat(distance, longitude, latitude);
|
|
return [NSArray arrayWithObjects:[NSNumber numberWithDouble:distance],[NSNumber numberWithDouble:longitude],[NSNumber numberWithDouble:latitude],nil];
|
|
}
|
|
|
|
-(void)centerSelection
|
|
{
|
|
[self simulation]->centerSelection();
|
|
}
|
|
-(void)centerSelection:(NSNumber*)centerTime
|
|
{
|
|
[self simulation]->centerSelection([centerTime doubleValue]);
|
|
}
|
|
-(void)follow
|
|
{
|
|
[self simulation]->follow();
|
|
}
|
|
-(void)geosynchronousFollow
|
|
{
|
|
[self simulation]->geosynchronousFollow();
|
|
}
|
|
-(void)phaseLock
|
|
{
|
|
[self simulation]->phaseLock();
|
|
}
|
|
-(void)chase
|
|
{
|
|
[self simulation]->chase();
|
|
}
|
|
-(void)cancelMotion
|
|
{
|
|
[self simulation]->cancelMotion();
|
|
}
|
|
-(CelestiaObserver*)observer
|
|
{
|
|
return [[[CelestiaObserver alloc] initWithObserver:[self simulation]->getObserver()] autorelease];
|
|
}
|
|
-(void)setObserverPosition:(CelestiaUniversalCoord*)uc
|
|
{
|
|
[self simulation]->setObserverPosition([uc universalCoord]);
|
|
}
|
|
-(void)setObserverOrientation:(CelestiaVector*)q
|
|
{
|
|
[self simulation]->setObserverOrientation([q quatf]);
|
|
}
|
|
-(void)setObserverMode:(NSString*)m
|
|
{
|
|
[self simulation]->setObserverMode([m isEqualToString:@"Free"] ? Observer::Free : Observer::Travelling);
|
|
}
|
|
-(NSString*)observerMode
|
|
{
|
|
return ([self simulation]->getObserverMode() == Observer::Free) ? @"Free" : @"Travelling";
|
|
}
|
|
|
|
-(void)setFrame:(NSString*)cs selection:(CelestiaSelection*)sel
|
|
{
|
|
[self simulation]->setFrame((astro::CoordinateSystem)[[Astro coordinateSystem:cs] intValue], [sel selection]);
|
|
}
|
|
|
|
@end |