#pragma once #ifndef ACTIVE_GAME_STATE_H #define ACTIVE_GAME_STATE_H #include "guiAppState.h" #include "player.h" #include "map.h" namespace vb01{ class Node; } namespace battleship{ class ActiveGameState : public gameBase::AbstractAppState { public: struct StructureFrame{ enum Status{PLACEABLE, NOT_PLACEABLE, PLACED}; vb01::Model *model; int id, type; Status status; StructureFrame(std::string, int, int); ~StructureFrame(); }; ActiveGameState(GuiAppState*, std::vector players, int); ~ActiveGameState(); void onAttached(); void onDettached(); void update(); void onAction(int, bool); void onAnalog(int, float); inline bool isPlacingStructures(){return placingStructures;} inline void setSelectingLaunchPoint(bool s){this->selectingGuidedMissileTarget=s;} inline Player* getPlayer(){return mainPlayer;} inline std::vector& getUnitGroup(int i){return unitGroups[i];} private: void initDragbox(); void initDepthText(); void deselectUnits(); void renderUnits(); void updateCameraPosition(); void updateSelectionBox(); void updateStructureFrames(); void addTarget(); void issueOrder(Order::TYPE, bool); void lookAround(bool); void orientCamera(vb01::Vector3, double); void removeStructtureFrames(); bool isInLineOfSight(vb01::Vector3, float, Unit*); GuiAppState *guiState; std::vector players; std::vector structureFrames; Player *mainPlayer; vb01::Quad *dragbox = nullptr; vb01::Node *dragboxNode = nullptr, *textNode = nullptr; vb01::Vector2 clickPoint; std::vector unitScreenPosVec; std::vector unitLightNodes; std::vector unitGroups[9]; std::vector targets; bool isSelectionBox = false, shiftPressed = false, controlPressed = false, selectingPatrolPoints = false, selectingGuidedMissileTarget = false, lookingAround = false, placingStructures = false, rotatingStructure = false; int playerId, zooms = 0; const int NUM_MAX_ZOOMS = 10; float depth = 1; }; } #endif