/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */ #pragma once #include "V8DataModel/BasicPartInstance.h" #include "G3D/Vector3.h" #include "v8tree/service.h" #include "V8DataModel/JointInstance.h" #include "Util/SteppedInstance.h" #include "Util/BrickColor.h" #include namespace RBX { extern const char* const sFlagStand; class Flag; class Stepped; class FlagStand : public DescribedCreatable { private: typedef DescribedCreatable Super; rbx::signals::scoped_connection_logged standTouched; void onEvent_standTouched(shared_ptr other); shared_ptr watchingFlag; shared_ptr clonedReplacementFlag; void affixFlagToRandomEmptyStand(Flag* flag); public: FlagStand(); rbx::signal)> flagCapturedSignal; void onServiceProvider(ServiceProvider* oldProvider, ServiceProvider* newProvider); void onStepped(); void affixFlag(Flag *flag); Flag *getJoinedFlag(); BrickColor teamColor; BrickColor getTeamColor() const; void setTeamColor(BrickColor color); }; extern const char *const sFlagStandService; class FlagStandService : public DescribedNonCreatable , public IStepped , public Service { private: typedef DescribedNonCreatable Super; std::list flagStands; /////////////////////////////////////////////////////////////////////////// // Instance /*override*/ void onServiceProvider(ServiceProvider* oldProvider, ServiceProvider* newProvider) { Super::onServiceProvider(oldProvider, newProvider); onServiceProviderIStepped(oldProvider, newProvider); } // Istepped /*override*/ void onStepped(const Stepped& event); FlagStand *findRandomEmptyStandForFlag(Flag *f); public: FlagStandService(); ~FlagStandService(); void affixFlagToRandomEmptyStand(Flag* flag); FlagStand *FindStandWithFlag(Flag *f); void RegisterFlagStand(FlagStand *fs); void UnregisterFlagStand(FlagStand *fs); }; } // namespace