52 lines
2.0 KiB
C++
52 lines
2.0 KiB
C++
// 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<PlayerPrefab>, public StateOwner {
|
|
public:
|
|
static std::vector<Asset*> prefabAssets(AssetManager *man) {
|
|
return {};
|
|
}
|
|
|
|
PlayerController *player;
|
|
|
|
PlayerPrefab(Scene *s, sceneitemid_t i) : SceneItemPrefab(s, i) {}
|
|
|
|
void prefabInit(AssetManager *man) override {
|
|
auto characterController = this->addComponent<CharacterController2D>();
|
|
auto hitbox = this->addComponent<BoxCollider>();
|
|
auto meshHost = this->addComponent<MeshHost>();
|
|
auto meshRenderer = this->addComponent<MeshRenderer>();
|
|
auto material = this->addComponent<SimpleTexturedMaterial>();
|
|
|
|
CapsuleMesh::create(&meshHost->mesh, 0.5f, 1.5f);
|
|
|
|
auto nose = scene->createSceneItem();
|
|
auto noseMeshHost = nose->addComponent<MeshHost>();
|
|
auto noseMeshRenderer = nose->addComponent<MeshRenderer>();
|
|
auto noseMaterial = nose->addComponent<SimpleTexturedMaterial>();
|
|
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<PlayerController>();
|
|
}
|
|
};
|
|
} |