// BlockyFroggy
// Copyright © 2017 John Ryland.
// All rights reserved.
#include "Scene.h"
#include "Debug.h"
void Scene::reset(const std::vector<GameSim::GameObjectList*>& a_objectLists)
{
// pre-process and split out objects by type
/*
m_trucks.clear();
m_cars.clear();
m_vans.clear();
m_bikes.clear();
m_trains.clear();
m_road.clear();
m_water.clear();
m_tracks.clear();
m_trees.clear();
m_shrubs.clear();
m_buildings.clear();
m_rocks.clear();
m_logs.clear();
m_boats.clear();
m_crocs.clear();
m_rest.clear();
*/
m_trucks.resize(0);
m_cars.resize(0);
m_vans.resize(0);
m_bikes.resize(0);
m_trains.resize(0);
m_road.resize(0);
m_water.resize(0);
m_tracks.resize(0);
m_trees.resize(0);
m_shrubs.resize(0);
m_buildings.resize(0);
m_rocks.resize(0);
m_logs.resize(0);
m_boats.resize(0);
m_crocs.resize(0);
m_rest.resize(0);
// Gather the counts for all the types
int sizes[GameSim::ObjectType::COUNT] = { 0 };
for (GameSim::GameObjectList* objList : a_objectLists)
for (auto obj : *objList)
sizes[obj.m_type]++;
m_trucks.reserve(sizes[GameSim::Truck]);
m_cars.reserve(sizes[GameSim::Car]);
m_vans.reserve(sizes[GameSim::Van]);
m_bikes.reserve(sizes[GameSim::Bike]);
m_trains.reserve(sizes[GameSim::Train1] + sizes[GameSim::Train2] + sizes[GameSim::Train3] + sizes[GameSim::Train4]);
m_road.reserve(sizes[GameSim::Road]);
m_water.reserve(sizes[GameSim::Water] + sizes[GameSim::WaterLane]);
m_tracks.reserve(sizes[GameSim::Rail]);
m_trees.reserve(sizes[GameSim::Tree]);
m_shrubs.reserve(sizes[GameSim::Shrub]);
m_buildings.reserve(sizes[GameSim::Building]);
m_rocks.reserve(sizes[GameSim::Rocks]);
m_logs.reserve(sizes[GameSim::Log]);
m_boats.reserve(sizes[GameSim::Boat]);
m_crocs.reserve(sizes[GameSim::Crocodile]);
int otherSize = sizes[GameSim::Ground] +
sizes[GameSim::LilyPad] +
sizes[GameSim::SteppingStone] +
sizes[GameSim::Coin] +
sizes[GameSim::Food] +
sizes[GameSim::Life] +
sizes[GameSim::Bonus] +
sizes[GameSim::Player];
m_rest.reserve(otherSize);
for (GameSim::GameObjectList* objList : a_objectLists)
{
if (objList->size() && objList->back().m_type != GameSim::Player)
for (unsigned i = 0; i < objList->size(); i++)
{
const GameSim::GameObject& obj = objList->at(i);
//! @todo switch to a switch
if (obj.m_type == GameSim::Truck)
m_trucks.push_back(obj);
else if (obj.m_type == GameSim::Car)
m_cars.push_back(obj);
else if (obj.m_type == GameSim::Van)
m_vans.push_back(obj);
else if (obj.m_type == GameSim::Bike)
m_bikes.push_back(obj);
else if (obj.m_type == GameSim::Train1)
m_trains.push_back(obj);
else if (obj.m_type == GameSim::Train2)
m_trains.push_back(obj);
else if (obj.m_type == GameSim::Train3)
m_trains.push_back(obj);
else if (obj.m_type == GameSim::Train4)
m_trains.push_back(obj);
else if (obj.m_type == GameSim::Road)
m_road.push_back(obj);
else if (obj.m_type == GameSim::Rail)
m_tracks.push_back(obj);
else if (obj.m_type == GameSim::Water)
m_water.push_back(obj);
else if (obj.m_type == GameSim::WaterLane)
m_water.push_back(obj);
else if (obj.m_type == GameSim::Tree)
m_trees.push_back(obj);
else if (obj.m_type == GameSim::Shrub)
m_shrubs.push_back(obj);
else if (obj.m_type == GameSim::Building)
m_buildings.push_back(obj);
else if (obj.m_type == GameSim::Rocks)
m_rocks.push_back(obj);
else if (obj.m_type == GameSim::Log)
m_logs.push_back(obj);
else if (obj.m_type == GameSim::Boat)
m_boats.push_back(obj);
else if (obj.m_type == GameSim::Crocodile)
m_crocs.push_back(obj);
/*
case Game::Ground: color = 0x47bd37; break;
case Game::LilyPad: color = 0x71df1f; break;
case Game::SteppingStone: color = 0x71df1f; break;
*/
else
m_rest.push_back(obj);
}
}
/*
for (const Game::GameObject& obj : a_carModels)
{
m_cars.push_back(obj);
}
*/
setDebugValue("cars:", int(m_cars.size()));
setDebugValue("bikes:", int(m_bikes.size()));
setDebugValue("trucks:", int(m_trucks.size()));
setDebugValue("vans:", int(m_vans.size()));
setDebugValue("trains:", int(m_trains.size()));
setDebugValue("road:", int(m_road.size()));
setDebugValue("tracks:", int(m_tracks.size()));
setDebugValue("water:", int(m_water.size()));
setDebugValue("trees:", int(m_trees.size()));
}