aboutsummaryrefslogtreecommitdiff
path: root/source/SceneThings.cpp
blob: 04137257274cf3bdbdef30d25f03304d708d3799 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "SceneThings.hpp"

#include "CommonVertexIndex.hpp"
#include "Rect.hpp"

#include <utility>

SimpleGeometryObject::SimpleGeometryObject(GameWorld* world)
	: GameObject(KD_SimpleGeometry, world)
	, mRenderObject()
	, mSize{ 20.0f, 20.0f }
	, mColor(60, 60, 60) {
	mRenderObject.SetMaterial(gDefaultMaterial.Get());
	mRenderObject.SetFormat(gVformatStandard.Get(), Tags::IT_16Bit);
	mRenderObject.RebuildIfNecessary();
	UpdateRenderObject();
}

void SimpleGeometryObject::SetSize(glm::vec2 size) {
	mSize = size;
	UpdateRenderObject();
}

void SimpleGeometryObject::SetColor(RgbaColor color) {
	mColor = color;
	UpdateRenderObject();
}

std::span<const RenderObject> SimpleGeometryObject::GetRenderObjects() const {
	return { &mRenderObject, 1 };
}

void SimpleGeometryObject::UpdateRenderObject() {
	using namespace Tags;

	uint16_t indices[6];
	Index_U16::Assign(indices, 0);
	mRenderObject.GetIndexBuffer()->Upload((const std::byte*)indices, IT_16Bit, std::size(indices));

	Vertex_PTC vertices[4];
	Vertex_PTC::Assign(vertices, Rect<float>{ GetPos(), mSize });
	Vertex_PTC::Assign(vertices, 0.0f);
	Vertex_PTC::Assign(vertices, mColor);
	mRenderObject.GetVertexBufferBindings().bindings[0]->Upload((const std::byte*)vertices, sizeof(vertices));
}

BuildingObject::BuildingObject(GameWorld* world)
	: GameObject(KD_Building, world) {
	mRenderObject.SetMaterial(gDefaultMaterial.Get());
	mRenderObject.SetFormat(gVformatStandard.Get(), Tags::IT_32Bit);
	mRenderObject.RebuildIfNecessary();
}

// void BuildingObject::SetMeshMaterial(Material* material) {
// 	mMaterial.Attach(material);
//     // TODO update render
// }

// const Material* BuildingObject::GetMeshMaterial() const {
// 	return mMaterial.Get();
// }

// void BuildingObject::SetMesh(GpuMesh* mesh) {
// 	mMesh.Attach(mesh);
//     // TODO update render
// }

// const GpuMesh* BuildingObject::GetMesh() const {
// 	return mMesh.Get();
// }

std::span<const RenderObject> BuildingObject::GetRenderObjects() const {
	return { &mRenderObject, 1 };
}