From: Oliver O. <fr...@us...> - 2007-03-07 10:39:23
|
Update of /cvsroot/simspark/simspark/simulations/soccer/plugin/agentstateperceptor In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv24718/agentstateperceptor Added Files: Tag: projectx agentstateperceptor.cpp agentstateperceptor.h agentstateperceptor_c.cpp Log Message: soccer plugins from rcssserver3D --- NEW FILE: agentstateperceptor_c.cpp --- /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2004 RoboCup Soccer Server 3D Maintenance Group $Id: agentstateperceptor_c.cpp,v 1.1.2.1 2007/03/07 10:39:19 fruit Exp $ 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; version 2 of the License. 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; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "agentstateperceptor.h" using namespace boost; using namespace oxygen; void CLASS(AgentStatePerceptor)::DefineClass() { DEFINE_BASECLASS(oxygen/Perceptor); } --- NEW FILE: agentstateperceptor.h --- /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2004 RoboCup Soccer Server 3D Maintenance Group $Id: agentstateperceptor.h,v 1.1.2.1 2007/03/07 10:39:19 fruit Exp $ 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; version 2 of the License. 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; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef AGENTSTATEPERCEPTOR_H #define AGENTSTATEPERCEPTOR_H #include <oxygen/agentaspect/perceptor.h> #include <soccer/soccertypes.h> class AgentState; namespace oxygen { class Predicate; } class AgentStatePerceptor : public oxygen::Perceptor { public: AgentStatePerceptor(); virtual ~AgentStatePerceptor(); //! \return true, if valid data is available and false otherwise. virtual bool Percept(boost::shared_ptr<oxygen::PredicateList> predList); protected: /** sets up the reference to the AgentState */ virtual void OnLink(); /** resets the reference to the AgentState */ virtual void OnUnlink(); protected: //! a reference to the agentstate boost::shared_ptr<AgentState> mAgentState; //! the percept percept rate is the rate SenseIntervals divided by number of percepts int mPerceptRate; //! sense interval counter for subsequent percepts int mSenses; }; DECLARE_CLASS(AgentStatePerceptor); #endif // AGENTSTATEPERCEPTOR_H --- NEW FILE: agentstateperceptor.cpp --- /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- this file is part of rcssserver3D Fri May 9 2003 Copyright (C) 2002,2003 Koblenz University Copyright (C) 2004 RoboCup Soccer Server 3D Maintenance Group $Id: agentstateperceptor.cpp,v 1.1.2.1 2007/03/07 10:39:18 fruit Exp $ 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; version 2 of the License. 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; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "agentstateperceptor.h" #include <soccer/agentstate/agentstate.h> #include <soccer/soccerbase/soccerbase.h> #include <soccer/restrictedvisionperceptor/restrictedvisionperceptor.h> using namespace oxygen; using namespace zeitgeist; using namespace boost; AgentStatePerceptor::AgentStatePerceptor() : oxygen::Perceptor() { mPerceptRate = 10; mSenses = 0; } AgentStatePerceptor::~AgentStatePerceptor() { } bool AgentStatePerceptor::Percept(boost::shared_ptr<PredicateList> predList) { if (mAgentState.get() == 0) { return false; } --mSenses; if (mSenses > 0) { return false; } mSenses = mPerceptRate; Predicate& predicate = predList->AddPredicate(); predicate.name = "AgentState"; predicate.parameter.Clear(); shared_ptr<BaseNode> parent = shared_dynamic_cast<BaseNode>(make_shared(GetParent())); if (parent.get() == 0) { GetLog()->Warning() << "WARNING: (AgentStatePerceptor) " << "parent node is not derived from BaseNode\n"; } else { shared_ptr<RestrictedVisionPerceptor> rvp = parent->FindChildSupportingClass<RestrictedVisionPerceptor>(false); if (rvp.get() == 0) { GetLog()->Warning() << "WARNING: (AgentStatePerceptor) " << "cannot find RestrictedVisionPerceptor instance\n"; } else { // pan tilt information ParameterList& pantiltElement = predicate.parameter.AddList(); pantiltElement.AddValue(std::string("pan_tilt")); pantiltElement.AddValue(static_cast<int>(roundf(rvp->GetPan()))); pantiltElement.AddValue(static_cast<int>(roundf(rvp->GetTilt()))); } } // battery ParameterList& batteryElement = predicate.parameter.AddList(); batteryElement.AddValue(std::string("battery")); batteryElement.AddValue(mAgentState->GetBattery()); // temperature ParameterList& tempElement = predicate.parameter.AddList(); tempElement.AddValue(std::string("temp")); tempElement.AddValue(mAgentState->GetTemperature()); return true; } void AgentStatePerceptor::OnLink() { SoccerBase::GetAgentState(*this,mAgentState); } void AgentStatePerceptor::OnUnlink() { mAgentState.reset(); } |