#ifndef _LOGIC_H #define _LOGIC_H #include "../../stdafx.h" class Logic : public IO_Module { public: Logic() { this->parent = NULL; this->moduleId = 0; this->isKeeper = false; this->status = 0; this->hasBall = false; this->avoidsObstacle = false; } Logic(uint32 logicId) { this->parent = NULL; this->moduleId = logicId; this->isKeeper = false; this->status = 0; this->hasBall = false; this->avoidsObstacle = false; } protected: bool isKeeper; uint8 status; bool hasBall; bool avoidsObstacle; enum LogicalStatus { STATUS_KEEPER_TURN_RIGHT, STATUS_KEEPER_TURN_LEFT, STATUS_KEEPER_RETURN_HOME, STATUS_KEEPER_HUNT_BALL, STATUS_KEEPER_TURN_TO_BALL, STATUS_KEEPER_DRIVE_TO_DEFEND, STATUS_ATTACKER_TURN_TO_BALL, STATUS_ATTACKER_DRIVE_TO_BALL, STATUS_ATTACKER_SEARCHING_AT_HOME, STATUS_ATTACKER_SEARCHING_AT_ENEMY, }; void OnBallOwned(); void OnBallLost(); void OnBecomeKeeper(); void OnBecomeAttacker(); public: void Update(); bool IsKeeper() { return isKeeper; } bool IsAttacker() { return !isKeeper; } void SetKeeper(bool newStatus) { if(!this->isKeeper && newStatus) { this->OnBecomeKeeper(); } else if(this->isKeeper && !newStatus) { this->OnBecomeAttacker(); } this->isKeeper = newStatus; } bool HasBall() { return this->hasBall; } void UpdateKeeperMovement(); void UpdateAttackerMovement(); }; #endif