/*! \file controls.h Controlling units (which is graudally moved to #vehicletype.cpp and #unitctrl.cpp ); Resource networks Things that are run when starting and ending someones turn */ // $Id: controls.h,v 1.56 2005/01/06 19:39:37 mbickel Exp $ /* This file is part of Advanced Strategic Command; http://www.asc-hq.de Copyright (C) 1994-1999 Martin Bickel and Marc Schellenberger 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; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #if defined(karteneditor) && !defined(pbpeditor) #error the mapeditor should not need to use controls.h ! #endif #ifndef controlsH #define controlsH #include "gui.h" #include "typen.h" // #include "mousecontrol.h" #include "soundList.h" #include "astar2.h" //! some old system for keeping track which unit action is currently running. As units actions are moved to #unitctrl.cpp , this structure is beeing replaced by #pendingVehicleActions struct tmoveparams { unsigned char movestatus; /* Folgende Modi sind definiert : 0: garnichts, standard 72: putstreet 90: putmine 111: putbuilding l1 112: putbuilding l2 115: removebuilding 120: construct vehicle 130: external loading */ int movesx, movesy, moveerr; pvehicle vehicletomove; int newheight; int oldheight; char heightdir; pbuildingtype buildingtobuild; /* nur bei movestatus = 111 */ int movespeed; int uheight; }; //! see #tmoveparams extern tmoveparams moveparams; /*! calculates the movement cost for moving vehicle from start to dest. \returns : first: movement ; second: fuel consumption */ extern pair calcMoveMalus( const MapCoordinate3D& start, const MapCoordinate3D& dest, pvehicle vehicle, WindMovement* wm = NULL, bool* inhibitAttack = NULL, bool container2container = false ); //! return the distance between x1/y1 and x2/y2 using the power of the wind factors calculated for a specific unit with #initwindmovement extern int windbeeline ( const MapCoordinate& start, const MapCoordinate& dest, WindMovement* wm ); /*! Ends the turn of the current player and runs AI until a player is human again \param playerView -2 = detect automatically; -1 = don't display anything; 0-7 = this player is watching */ extern void next_turn ( int playerView = -2 ); //! checks if the current player has terminated another player or even won extern void checkforvictory ( ); ///////////////////////////////////////////////////////////////////// ///// old vehicle actions ///////////////////////////////////////////////////////////////////// //! An old procedure for building and removing objects with a unit. extern void setspec( pobjecttype obj ); //! A helper function for #setspec extern int object_constructable ( int x, int y, pobjecttype obj ); //! A helper function for #setspec extern int object_removeable ( int x, int y, pobjecttype obj ); //! A helper function for #setspec extern void build_objects_reset( void ); //! An old procedure for building vehicle (like turrets) with a unit. extern void constructvehicle( pvehicletype tnk ); //! A helper function for #constructvehicle extern void build_vehicles_reset( void ); //! An old procedure for putting and removing mines. extern void legemine( int typ, int delta ); //! An old procedure for constructing a building with a vehicle extern void putbuildinglevel1(void); //! An old procedure for constructing a building with a vehicle extern void putbuildinglevel2( const pbuildingtype bld, integer xp, integer yp); //! An old procedure for constructing a building with a vehicle extern void putbuildinglevel3(integer x, integer y); //! An old procedure for removing a building with a vehicle extern void destructbuildinglevel2( int xp, int yp); //! An old procedure for removing a building with a vehicle extern void destructbuildinglevel1( int xp, int yp); //! continues a PBeM game; the current map is deleted extern void continuenetworkgame ( void ); //! dissects a vehicle; if you haven't researched this vehicle type you will get some research points for it. extern void dissectvehicle ( pvehicle eht ); struct treactionfire_replayinfo { int x1 ; int y1 ; int x2 ; int y2 ; int ad1 ; int ad2 ; int dd1 ; int dd2 ; int wpnum; }; typedef treactionfire_replayinfo* preactionfire_replayinfo; /** creates a new vehicle, setting up its class depending on the research. If this vehicletype is not available (because it hasn't been researched, for example), vehicle will be set to NULL, else it will contain a pointer to the newly created vehicle. The vehicle will be empty after creation (no fuel, etc). The resources for the creation must be seperately 'consumed'. */ extern void generatevehicle_cl ( pvehicletype fztyp, int col, pvehicle & vehicle, int x, int y ); extern int searchexternaltransferfields ( pbuilding bld ); extern Resources getDestructionCost( Building* bld, Vehicle* veh ); class treactionfire { public: virtual int checkfield ( const MapCoordinate3D& pos, pvehicle &eht, MapDisplayInterface* md ) = 0; virtual void init ( pvehicle eht, const AStar3D::Path& fieldlist ) = 0; virtual ~treactionfire() {}; }; class treactionfirereplay : public treactionfire { protected: int num; dynamic_array replay; pvehicle unit; public: treactionfirereplay ( void ); ~treactionfirereplay ( ); virtual int checkfield ( const MapCoordinate3D& pos, pvehicle &eht, MapDisplayInterface* md ); virtual void init ( pvehicle eht, const AStar3D::Path& fieldlist ); }; class tsearchreactionfireingunits : public treactionfire { protected: static int maxshootdist[8]; // f?r jede H”henstufe eine void addunit ( pvehicle vehicle ); void removeunit ( pvehicle vehicle ); public: tsearchreactionfireingunits( void ); void init ( pvehicle eht, const AStar3D::Path& fieldlist ); int checkfield ( const MapCoordinate3D& pos, pvehicle &eht, MapDisplayInterface* md ); ~tsearchreactionfireingunits(); }; extern void initNetworkGame( void ); class ReplayMapDisplay : public MapDisplayInterface { MapDisplay* mapDisplay; int cursorDelay; void wait ( int minTime = 0 ); public: ReplayMapDisplay ( MapDisplay* md ) { mapDisplay = md; cursorDelay = 20; }; int displayMovingUnit ( const MapCoordinate3D& start, const MapCoordinate3D& dest, pvehicle vehicle, int fieldnum, int totalmove, SoundLoopManager* slm ); void displayPosition ( int x, int y ); void deleteVehicle ( pvehicle vehicle ) { mapDisplay->deleteVehicle ( vehicle ); }; void displayMap ( void ) { mapDisplay->displayMap(); }; void resetMovement ( void ) { mapDisplay->resetMovement(); }; void startAction ( void ) { mapDisplay->startAction(); }; void stopAction ( void ) { mapDisplay->stopAction(); }; void displayActionCursor ( int x1, int y1, int x2 , int y2 , int secondWait ); void displayActionCursor ( int x1, int y1 ) { displayActionCursor ( x1, y1, -1, -1, 0 ); }; void displayActionCursor ( int x1, int y1, int x2 , int y2 ) { displayActionCursor ( x1, y1, x2, y2, 0 ); }; void removeActionCursor ( void ); int checkMapPosition ( int x, int y ); void setCursorDelay ( int time ) { cursorDelay = time; }; void updateDashboard() { mapDisplay->updateDashboard(); }; void repaintDisplay () { mapDisplay->repaintDisplay(); }; }; #endif