// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "prefab/SceneItemPrefab.hpp" #include "scene/components/display/MeshHost.hpp" #include "scene/components/display/MeshRenderer.hpp" #include "scene/components/display/material/SimpleTexturedMaterial.hpp" #include "scene/components/physics/2d/CharacterController2D.hpp" #include "scene/components/physics/2d/BoxCollider.hpp" #include "scene/components/PlayerController.hpp" #include "display/mesh/CubeMesh.hpp" #include "display/mesh/CapsuleMesh.hpp" namespace Dawn { class PlayerPrefab : public SceneItemPrefab, public StateOwner { public: static std::vector prefabAssets(AssetManager *man) { return {}; } PlayerController *player; PlayerPrefab(Scene *s, sceneitemid_t i) : SceneItemPrefab(s, i) {} void prefabInit(AssetManager *man) override { auto characterController = this->addComponent(); auto hitbox = this->addComponent(); auto meshHost = this->addComponent(); auto meshRenderer = this->addComponent(); auto material = this->addComponent(); CapsuleMesh::create(&meshHost->mesh, 0.5f, 1.5f); auto nose = scene->createSceneItem(); auto noseMeshHost = nose->addComponent(); auto noseMeshRenderer = nose->addComponent(); auto noseMaterial = nose->addComponent(); noseMeshHost->mesh.createBuffers(CUBE_VERTICE_COUNT, CUBE_INDICE_COUNT); glm::vec3 noseSize = glm::vec3(0.25f, 0.25f, 0.25f); CubeMesh::buffer(&noseMeshHost->mesh, -(noseSize * 0.5f), noseSize, 0, 0); noseMaterial->color = COLOR_RED; nose->transform.setParent(&this->transform); nose->transform.setLocalPosition(glm::vec3(0, 0, 0.5f)); player = this->addComponent(); } }; }