Пример #1
0
//-----------------------------------------------------------------------------
void SoccerWorld::updateAIData()
{
    if (isRaceOver()) return;

    // Fill the kart distance map
    m_red_kdm.clear();
    m_blue_kdm.clear();

    for (unsigned int i = 0; i < m_karts.size(); ++i)
    {
        if (UserConfigParams::m_arena_ai_stats &&
            m_karts[i]->getController()->isPlayerController())
            continue;

        if (getKartTeam(m_karts[i]->getWorldKartId()) == SOCCER_TEAM_RED)
        {
            Vec3 rd = m_karts[i]->getXYZ() - getBallPosition();
            m_red_kdm.push_back(KartDistanceMap(i, rd.length_2d()));
        }
        else
        {
            Vec3 bd = m_karts[i]->getXYZ() - getBallPosition();
            m_blue_kdm.push_back(KartDistanceMap(i, bd.length_2d()));
        }
    }
    // Sort the vectors, so first vector will have the min distance
    std::sort(m_red_kdm.begin(), m_red_kdm.end());
    std::sort(m_blue_kdm.begin(), m_blue_kdm.end());

    // Fill Ball and goals data
    m_bgd.updateBallAndGoal(getBallPosition(), getBallHeading());

}   // updateAIData
Пример #2
0
//-----------------------------------------------------------------------------
void SoccerWorld::initKartList()
{
    const unsigned int kart_amount = (unsigned int)m_karts.size();

    //Loading the indicator textures
    irr::video::ITexture *red =
            irr_driver->getTexture(FileManager::GUI, "soccer_player_red.png");
    irr::video::ITexture *blue =
            irr_driver->getTexture(FileManager::GUI, "soccer_player_blue.png");

    //Assigning indicators
    for(unsigned int i=0; i<kart_amount; i++)
    {
        scene::ISceneNode *arrow_node;
        float arrow_pos_height = m_karts[i]->getKartModel()->getHeight()+0.5f;
        SoccerTeam team = getKartTeam(i);

        arrow_node = irr_driver->addBillboard(core::dimension2d<irr::f32>(0.3f,
            0.3f), team == SOCCER_TEAM_BLUE ? blue : red, m_karts[i]
            ->getNode(), true);

        arrow_node->setPosition(core::vector3df(0, arrow_pos_height, 0));
    }

}   // initKartList
//-----------------------------------------------------------------------------
void SoccerWorld::initKartList()
{
#ifndef SERVER_ONLY
    const unsigned int kart_amount = (unsigned int)m_karts.size();

    //Loading the indicator textures
    std::string red_path =
            file_manager->getAsset(FileManager::GUI, "soccer_player_red.png");
    std::string blue_path =
            file_manager->getAsset(FileManager::GUI, "soccer_player_blue.png");

    //Assigning indicators
    for(unsigned int i = 0; i < kart_amount; i++)
    {
        scene::ISceneNode *arrow_node = NULL;

        KartModel* km = m_karts[i]->getKartModel();
        // Color of karts can be changed using shaders if the model supports
        if (km->supportColorization() && CVS->isGLSL()) continue;

        float arrow_pos_height = km->getHeight() + 0.5f;
        SoccerTeam team = getKartTeam(i);

        arrow_node = irr_driver->addBillboard(
            core::dimension2d<irr::f32>(0.3f,0.3f),
            team == SOCCER_TEAM_BLUE ? blue_path : red_path,
            m_karts[i]->getNode());

        arrow_node->setPosition(core::vector3df(0, arrow_pos_height, 0));
    }
#endif
}   // initKartList
Пример #4
0
//-----------------------------------------------------------------------------
void SoccerWorld::updateDefenders()
{
    if (isRaceOver()) return;

    float distance = 99999.9f;
    int defender = -1;

    // Check for red team
    for (unsigned int i = 0; i < (unsigned)m_karts.size(); ++i)
    {
        if (m_karts[i]->getController()->isPlayerController() ||
            getKartTeam(m_karts[i]->getWorldKartId()) != SOCCER_TEAM_RED)
            continue;

        Vec3 d = this->getGoalLocation(SOCCER_TEAM_RED,
            CheckGoal::POINT_CENTER) - m_karts[i]->getXYZ();

        if (d.length_2d() <= distance)
        {
            defender = i;
            distance = d.length_2d();
        }
    }
    if (defender != -1) m_red_defender = defender;

    distance = 99999.9f;
    defender = -1;

    // Check for blue team
    for (unsigned int i = 0; i < (unsigned)m_karts.size(); ++i)
    {
        if (m_karts[i]->getController()->isPlayerController() ||
            getKartTeam(m_karts[i]->getWorldKartId()) != SOCCER_TEAM_BLUE)
            continue;

        Vec3 d = this->getGoalLocation(SOCCER_TEAM_BLUE,
            CheckGoal::POINT_CENTER) - m_karts[i]->getXYZ();

        if (d.length_2d() <= distance)
        {
            defender = i;
            distance = d.length_2d();
        }
    }
    if (defender != -1) m_blue_defender = defender;

}   // updateDefenders
Пример #5
0
//-----------------------------------------------------------------------------
int SoccerWorld::getTeamNum(SoccerTeam team) const
{
    int total = 0;
    if (m_kart_team_map.empty()) return total;

    for (unsigned int i = 0; i < (unsigned)m_karts.size(); ++i)
    {
        if (team == getKartTeam(m_karts[i]->getWorldKartId())) total++;
    }

    return total;
}   // getTeamNum
Пример #6
0
//-----------------------------------------------------------------------------
bool SoccerWorld::getKartSoccerResult(unsigned int kart_id) const
{
    if (m_red_scorers.size() == m_blue_scorers.size()) return true;

    bool red_win = m_red_scorers.size() > m_blue_scorers.size();
    SoccerTeam team = getKartTeam(kart_id);

    if ((red_win && team == SOCCER_TEAM_RED) ||
        (!red_win && team == SOCCER_TEAM_BLUE))
        return true;
    else
        return false;

}   // getKartSoccerResult
Пример #7
0
//-----------------------------------------------------------------------------
bool SoccerWorld::isCorrectGoal(unsigned int kart_id, bool first_goal) const
{
    SoccerTeam team = getKartTeam(kart_id);
    if (first_goal)
    {
        if (team == SOCCER_TEAM_RED)
            return true;
    }
    else if (!first_goal)
    {
        if (team == SOCCER_TEAM_BLUE)
            return true;
    }
    return false;
}   // isCorrectGoal