This is HSetFlightPathState.m in view mode; [Download] [Up]
//
// $Id: HSetFlightPathState.m,v 1.2 1997/10/31 03:38:24 nygard Exp $
//
//
// This file is a part of Empire, a game of exploration and conquest.
// Copyright (C) 1996 Steve Nygard
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// You may contact the author by:
// e-mail: nygard@telusplanet.net
//
#import "Empire.h"
RCSID ("$Id: HSetFlightPathState.m,v 1.2 1997/10/31 03:38:24 nygard Exp $");
#import "HSetFlightPathState.h"
#import "City.h"
#import "HFlightPathState.h"
#import "HSMarquee.h"
#import "Human.h"
#import "MapView.h"
#import "../Orders.subproj/Orders.h"
#import <AppKit/psopsNeXT.h>
//======================================================================
// Set the friendly target city for a flight path. The source city was
// selected in the previous state.
//======================================================================
@implementation HSetFlightPathState
- initWithGameManager:(GameManager *)theGameManager
{
[super initWithGameManager:theGameManager];
patternOffset = 0;
return self;
}
//======================================================================
// Subclass responsibilities
//======================================================================
- (NSString *) stateName
{
return @"Set Flight Path";
}
//----------------------------------------------------------------------
- (NSString *) stateKey
{
return HS_SET_FLIGHT_PATH;
}
//----------------------------------------------------------------------
- (void) stateEntered:(Human *)context
{
MapView *mapView = [context mapView];
// Set cursor
[mapView useDefaultCursor];
[mapView setCursorEnabled:NO];
// Disable both buttons
[context enableContinueButton:NO];
[context enableEndTurnButton:NO];
}
//----------------------------------------------------------------------
- (void) mouseDown:(Human *)context:(unsigned int)modifierFlags atLocation:(EMMapLocation)target
{
City *city = [context selectedCity];
EMMapLocation cityLocation = [city cityLocation];
MapView *mapView = [context mapView];
NSPoint a, b;
float pat[2] = {3};
int dr = target.row - cityLocation.row;
int dc = target.column - cityLocation.column;
int distance;
if (dr < 0)
dr = -dr;
if (dc < 0)
dc = -dc;
distance = (dr > dc) ? dr : dc;
a = [mapView getCenterPointForLocation:cityLocation];
b = [mapView getCenterPointForLocation:target];
//[mapView centerCell:row:col ifNotVisible:YES];
[mapView scrollLocationToVisible:target];
[context setStatusLine:[NSString stringWithFormat:@"Distance %d", distance]];
[mapView lockFocus];
PSsetlinewidth (3);
PSsetdash (pat, 1, patternOffset);
PSnewinstance ();
PSsetinstance (YES);
PSsetgray (NSWhite);
PSmoveto (a.x, a.y);
PSlineto (b.x, b.y);
PSstroke ();
HSDrawMarquee (a.x - 8, a.y - 7, a.x + 7, a.y + 8, 5 - patternOffset);
PSsetinstance (NO);
[mapView unlockFocus];
patternOffset = (patternOffset + 1) % 6;
}
//----------------------------------------------------------------------
- (void) mouseUp:(Human *)context:(unsigned int)modifierFlags atLocation:(EMMapLocation)target
{
MapView *mapView = [context mapView];
City *city = [context selectedCity];
EMMapLocation cityLocation = [city cityLocation];
[mapView lockFocus];
PSnewinstance ();
[mapView unlockFocus];
if ((cityLocation.row != target.row || cityLocation.column != target.column) && [context cityAtLocation:target] != nil)
{
OMoveTo *order = [[[OShortestMoveTo alloc] initForUnit:nil moveToLocation:target onMap:[context map]] autorelease];
[city setFlightPath:order];
}
else
{
[city setFlightPath:nil];
}
[context changeState:HS_FLIGHT_PATH];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.