⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 internalsoccerinput.cpp

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CPP
字号:
/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*-   this file is part of rcssserver3D   Fri May 9 2003   Copyright (C) 2003 Koblenz University   $Id: internalsoccerinput.cpp,v 1.6 2008/02/24 10:18:09 rollmark 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 "internalsoccerinput.h"#include <zeitgeist/scriptserver/scriptserver.h>#include <zeitgeist/logserver/logserver.h>#include <soccer/gamestateaspect/gamestateaspect.h>#include <soccer/soccerruleaspect/soccerruleaspect.h>#include <oxygen/physicsserver/body.h>#include <oxygen/sceneserver/fpscontroller.h>#include <oxygen/gamecontrolserver/gamecontrolserver.h>#include <oxygen/agentaspect/agentaspect.h>#include <soccer/agentstate/agentstate.h>using namespace boost;using namespace zeitgeist;using namespace oxygen;using namespace kerosin;InternalSoccerInput::InternalSoccerInput()    : InputItem(), mLastKickOff(TI_NONE){}InternalSoccerInput::~InternalSoccerInput(){}void InternalSoccerInput::OnLink(){    shared_ptr<ScriptServer> scriptServer = GetCore()->GetScriptServer();    scriptServer->CreateVariable("Command.KickOff", CmdKickOff);    scriptServer->CreateVariable("Command.KillAgentLeft", CmdKillAgentLeft);    scriptServer->CreateVariable("Command.KillAgentRight", CmdKillAgentRight);    scriptServer->CreateVariable("Command.DropBall", CmdDropBall);    scriptServer->CreateVariable("Command.ShootBall", CmdShootBall);    scriptServer->CreateVariable("Command.MoveBall", CmdMoveBall);    scriptServer->CreateVariable("Command.CameraLeftGoal", CmdCameraLeftGoal);    scriptServer->CreateVariable("Command.CameraLeftCorner", CmdCameraLeftCorner);    scriptServer->CreateVariable("Command.CameraMiddleLeft", CmdCameraMiddleLeft);    scriptServer->CreateVariable("Command.CameraMiddleRight", CmdCameraMiddleRight);    scriptServer->CreateVariable("Command.CameraMiddle", CmdCameraMiddle);    scriptServer->CreateVariable("Command.CameraRightCorner", CmdCameraRightCorner);    scriptServer->CreateVariable("Command.CameraRightGoal", CmdCameraRightGoal);    //JAN    scriptServer->CreateVariable("Command.FreeKickLeft", CmdFreeKickLeft);    scriptServer->CreateVariable("Command.FreeKickRight", CmdFreeKickRight);    // get the GameStateAspect    mGameState = shared_dynamic_cast<GameStateAspect>        (GetCore()->Get("/sys/server/gamecontrol/GameStateAspect"));    if (mGameState.get() == 0)        {            GetLog()->Error() << "ERROR: (InternalSoccerInput) Unable to get GameStateAspect\n";        }    // get the SoccerRuleAspect    mSoccerRule = shared_dynamic_cast<SoccerRuleAspect>        (GetCore()->Get("/sys/server/gamecontrol/SoccerRuleAspect"));    if (mSoccerRule.get() == 0)        {            GetLog()->Error() << "ERROR: (InternalSoccerInput) Unable to get SoccerRuleAspect\n";        }    // get the GameControlServer    mGameControl = shared_dynamic_cast<GameControlServer>        (GetCore()->Get("/sys/server/gamecontrol"));    if (mGameControl.get() == 0)        {            GetLog()->Error() << "ERROR: (InternalSoccerInput) Unable to get GameControlServer\n";        }    // get camera body    mCameraBody = shared_dynamic_cast<Body>        (GetCore()->Get("/usr/scene/camera/physics"));    if (mCameraBody.get() == 0)    {        GetLog()->Error()            << "ERROR: (InternalSoccerInput) Unable to get camera body\n";    }    // get fps controller    mFPS = shared_dynamic_cast<FPSController>        (GetCore()->Get("/usr/scene/camera/physics/controller"));    if (mFPS.get() == 0)    {        GetLog()->Error()            << "ERROR: (InternalSoccerInput) Unable to get FPS controller\n";    }}void InternalSoccerInput::OnUnlink(){    mGameState.reset();    mSoccerRule.reset();    mGameControl.reset();    mCameraBody.reset();    mFPS.reset();}void InternalSoccerInput::ProcessInput(const Input& input){    switch (input.mId)        {        default:            return;        case CmdKickOff:            if (input.GetKeyPress())                {                    if (mLastKickOff == TI_NONE)                    {                        mGameState->KickOff(TI_LEFT);                        mLastKickOff = TI_LEFT;                    }                    else                    {                        mGameState->KickOff(TI_RIGHT);                        mLastKickOff = TI_RIGHT;                    }                }            break;        case CmdDropBall:            if (input.GetKeyPress())                {                    mSoccerRule->DropBall();                }            break;        case CmdShootBall:            if (input.GetKeyPress())                {                    //SendCommand("(ball (vel -4.0 0.0 2.0))");                }            break;        case CmdMoveBall:            if (input.GetKeyPress())                {                    //SendCommand("(ball (pos -42.0 0.0 0.3))");                }            break;        case CmdCameraLeftGoal:            if (input.GetKeyPress())                {                    salt::Vector3f pos(-40.0, 0.0, 21.5);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(1.55));                    mFPS->SetVAngleDeg(salt::gRadToDeg(1.05));                }            break;        case CmdCameraLeftCorner:            if (input.GetKeyPress())                {                    salt::Vector3f pos(-40.0, -30.5, 20.0);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(0.855));                    mFPS->SetVAngleDeg(salt::gRadToDeg(0.88));                }            break;        case CmdCameraMiddleLeft:            if (input.GetKeyPress())                {                    salt::Vector3f pos(6.0, -29.0, 20.0);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(-0.625));                    mFPS->SetVAngleDeg(salt::gRadToDeg(0.965));                }            break;        case CmdCameraMiddleRight:            if (input.GetKeyPress())                {                    salt::Vector3f pos(-6.0, -29.0, 20.0);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(0.625));                    mFPS->SetVAngleDeg(salt::gRadToDeg(0.965));                }            break;        case CmdCameraMiddle:            if (input.GetKeyPress())                {                    salt::Vector3f pos(0.0, -43.5, 39.5);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(0.002));                    mFPS->SetVAngleDeg(salt::gRadToDeg(1.16));                }            break;        case CmdCameraRightCorner:            if (input.GetKeyPress())                {                    salt::Vector3f pos(40.0, -30.5, 20.0);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(-0.855));                    mFPS->SetVAngleDeg(salt::gRadToDeg(0.88));                }            break;        case CmdCameraRightGoal:            if (input.GetKeyPress())                {                    salt::Vector3f pos(40.0, 0.0, 21.5);                    mCameraBody->SetPosition(pos);                    mFPS->SetHAngleDeg(salt::gRadToDeg(-1.55));                    mFPS->SetVAngleDeg(salt::gRadToDeg(1.05));                }            break;        case CmdFreeKickLeft:            if (input.GetKeyPress())                {                    mGameState->SetPlayMode(PM_FREE_KICK_LEFT);                }            break;        case CmdFreeKickRight:            if (input.GetKeyPress())                {                    mGameState->SetPlayMode(PM_FREE_KICK_RIGHT);                }            break;        case CmdKillAgentLeft:            if (input.GetKeyPress())            {                    // get list of agent aspects                    GameControlServer::TAgentAspectList agentAspects;                    mGameControl->GetAgentAspectList(agentAspects);                    GameControlServer::TAgentAspectList::iterator iter;                    for (                          iter = agentAspects.begin();                          iter != agentAspects.end();                          ++iter                        )                    {                        // search for the first agent of the left/right side                        shared_ptr<AgentState> agentState =                            shared_dynamic_cast<AgentState>((*iter)->GetChild("AgentState", true));                        if (agentState.get() == 0)                        {                            GetLog()->Error() << "ERROR: (InternalSoccerInput) can't get AgentState\n";                            continue;                        }                        if (agentState->GetTeamIndex() == TI_LEFT)                        {                            mGameControl->pushDisappearedAgent((*iter)->ID());                            GetLog()->Error() << "(InternalSoccerInput) killed agent of team left.\n";                            break;                        }                    }            }            break;            case CmdKillAgentRight:            if (input.GetKeyPress())            {                    // get list of agent aspects                    GameControlServer::TAgentAspectList agentAspects;                    mGameControl->GetAgentAspectList(agentAspects);                    GameControlServer::TAgentAspectList::iterator iter;                    for (                          iter = agentAspects.begin();                          iter != agentAspects.end();                          ++iter                        )                    {                        // search for the first agent of the left/right side                        shared_ptr<AgentState> agentState =                            shared_dynamic_cast<AgentState>((*iter)->GetChild("AgentState", true));                        if (agentState.get() == 0)                        {                            GetLog()->Error() << "ERROR: (InternalSoccerInput) can't get AgentState\n";                            continue;                        }                        if (agentState->GetTeamIndex() == TI_RIGHT)                        {                            mGameControl->pushDisappearedAgent((*iter)->ID());                            GetLog()->Error() << "(InternalSoccerInput) killed agent of team left.\n";                            break;                        }                    }            }      };}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -