#pragma once #include "entity.h" //########################################################################## //################# Team__MakeMessage ########################## //########################################################################## class Team__MakeMessage : public Entity::MakeMessage { public: char teamName[64]; int initialScore; Team__MakeMessage( Receiver::MessageID message_ID, size_t length, Entity::ClassID class_ID, const EntityID &owner_ID, ResourceDescription::ResourceID resource_ID, LWord instance_flags, const Origin &origin, char *team_name ) : Entity::MakeMessage( message_ID, length, class_ID, owner_ID, resource_ID, instance_flags, origin ) { Str_Copy(teamName, team_name, sizeof(teamName)); } }; //########################################################################## //################# Team__ScoreMessage ########################## //########################################################################## class Team__ScoreMessage : public Entity::Message { public: Scalar scoreAward; Team__ScoreMessage( Receiver::MessageID message_ID, size_t length, Scalar score ): Entity::Message(message_ID, length), scoreAward(score) {} }; //########################################################################## //######################## CLASS Team ################################ //########################################################################## class Team : public Entity { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Shared Data support // public: static Derivation *GetClassDerivations(); static SharedData DefaultData; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Message Support // public: enum { ScoreMessageID = Entity::NextMessageID, NextMessageID }; typedef Team__ScoreMessage ScoreMessage; void ScoreMessageHandler(ScoreMessage *message); private: static const HandlerEntry MessageHandlerEntries[]; protected: static MessageHandlerSet MessageHandlers; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Attribute Support // private: static const IndexEntry AttributePointers[]; protected: //static AttributeIndexSet AttributeIndex; static AttributeIndexSet& GetAttributeIndex(); public: enum { TeamNameAttributeID = Entity::NextAttributeID, TeamScoreAttributeID, NextAttributeID }; char teamName[64]; Scalar teamScore; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Model Support // public: typedef void (Team::*Performance)(Scalar time_slice); void SetPerformance(Performance performance) { Check(this); activePerformance = (Simulation::Performance)performance; } virtual void TeamSimulation(Scalar time_slice); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction / Destruction Support // public: typedef Team__MakeMessage MakeMessage; Team( MakeMessage *creation_message, SharedData &shared_data = DefaultData ); ~Team(); Logical TestInstance() const; static Team* Make(MakeMessage *creation_message); static Logical CreateMakeMessage ( MakeMessage *creation_message, NotationFile *model_file, const ResourceDirectories *directories ); };