/* * This file is part of the Colobot: Gold Edition source code * Copyright (C) 2001-2015, Daniel Roux, EPSITEC SA & TerranovaTeam * http://epsiteс.ch; http://colobot.info; http://github.com/colobot * * 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, either version 3 of the License, or * (at your option) any later version. * * 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, see http://gnu.org/licenses */ #include "object/subclass/base_alien.h" #include "common/make_unique.h" #include "graphics/engine/oldmodelmanager.h" #include "object/object_create_params.h" #include "object/motion/motionant.h" #include "object/motion/motionbee.h" #include "object/motion/motionqueen.h" #include "object/motion/motionspider.h" #include "object/motion/motionworm.h" #include "physics/physics.h" CBaseAlien::CBaseAlien(int id, ObjectType type) : CBaseVehicle(id, type) {} CBaseAlien::~CBaseAlien() {} std::unique_ptr CBaseAlien::Create( const ObjectCreateParams& params, Gfx::COldModelManager* modelManager, Gfx::CEngine* engine) { auto obj = MakeUnique(params.id, params.type); obj->SetTeam(params.team); std::unique_ptr physics = MakeUnique(obj.get()); std::unique_ptr motion; if ( params.type == OBJECT_MOTHER ) { motion = MakeUnique(obj.get()); } if ( params.type == OBJECT_ANT ) { motion = MakeUnique(obj.get()); } if ( params.type == OBJECT_SPIDER ) { motion = MakeUnique(obj.get()); } if ( params.type == OBJECT_BEE ) { motion = MakeUnique(obj.get()); } if ( params.type == OBJECT_WORM ) { motion = MakeUnique(obj.get()); } assert(motion != nullptr); physics->SetMotion(motion.get()); motion->SetPhysics(physics.get()); motion->Create(params.pos, params.angle, params.type, 0.0f, modelManager); obj->SetProgrammable(); obj->SetMovable(std::move(motion), std::move(physics)); return std::move(obj); }