💿🐜 Antkeeper source code https://antkeeper.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
3.5 KiB

/*
* Copyright (C) 2021 Christopher J. Howard
*
* This file is part of Antkeeper source code.
*
* Antkeeper source code 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, either version 3 of the License, or
* (at your option) any later version.
*
* Antkeeper source code 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 Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
*/
#include "game/ant/morphogenesis.hpp"
#include "render/material.hpp"
namespace game {
namespace ant {
static render::model* generate_queen(const ant::breed& breed);
static render::model* generate_worker(const ant::breed& breed);
static render::model* generate_soldier(const ant::breed& breed);
static render::model* generate_male(const ant::breed& breed);
static render::material* build_material(const ant::breed& breed);
static render::model* build_model
(
render::material* material,
render::model* antennae,
render::model* eyes,
render::model* forewings,
render::model* gaster,
render::model* head,
render::model* hindwings,
render::model* legs,
render::model* mandibles,
render::model* mesosoma,
render::model* ocelli,
render::model* sting,
render::model* waist
);
render::model* morphogenesis(const ant::breed& breed, ant::caste caste)
{
switch (caste)
{
case ant::caste::queen:
return generate_queen(breed);
case ant::caste::worker:
return generate_worker(breed);
case ant::caste::soldier:
return generate_soldier(breed);
case ant::caste::male:
return generate_male(breed);
}
return nullptr;
}
render::model* generate_queen(const ant::breed& breed)
{
return nullptr;
}
render::model* generate_worker(const ant::breed& breed)
{
// Get material parameters
// Build material
render::material* material = build_material(breed);
// Get worker body part models
render::model* antennae_model = breed.antennae->model;
render::model* eyes_model = breed.eyes->model;
render::model* gaster_model = breed.gaster->model;
render::model* head_model = breed.head->model;
render::model* legs_model = breed.legs->model;
render::model* mandibles_model = breed.mandibles->model;
render::model* mesosoma_model = breed.mesosoma->model;
render::model* sting_model = breed.sting->model;
render::model* waist_model = breed.waist->model;
// Build worker model
render::model* model = build_model
(
material,
antennae_model,
eyes_model,
nullptr,
gaster_model,
head_model,
nullptr,
legs_model,
mandibles_model,
mesosoma_model,
nullptr,
sting_model,
waist_model
);
return model;
}
render::model* generate_soldier(const ant::breed& breed)
{
return nullptr;
}
render::model* generate_male(const ant::breed& breed)
{
return nullptr;
}
render::material* build_material(const ant::breed& breed)
{
return nullptr;
}
render::model* build_model
(
render::material* material,
render::model* antennae,
render::model* eyes,
render::model* forewings,
render::model* gaster,
render::model* head,
render::model* hindwings,
render::model* legs,
render::model* mandibles,
render::model* mesosoma,
render::model* ocelli,
render::model* sting,
render::model* waist
)
{
return nullptr;
}
} // namespace ant
} // namespace game