summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/Hoop.cpp
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2022-04-01 21:23:39 +0200
committerAki <please@ignore.pl>2022-04-01 21:23:39 +0200
commit3c487c5cd69c53d6fea948643c0a76df03516605 (patch)
tree72730c7b8b26a5ef8fc9a987ec4c16129efd5aac /StarsEx/Hoop.cpp
parent8f353abd0bfe18baddd8a8250ab7c4f2d1c83a6e (diff)
downloadstarshatter-3c487c5cd69c53d6fea948643c0a76df03516605.zip
starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.gz
starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.bz2
Moved Stars45 to StarsEx
Diffstat (limited to 'StarsEx/Hoop.cpp')
-rw-r--r--StarsEx/Hoop.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/StarsEx/Hoop.cpp b/StarsEx/Hoop.cpp
new file mode 100644
index 0000000..cfd2a65
--- /dev/null
+++ b/StarsEx/Hoop.cpp
@@ -0,0 +1,154 @@
+/* Starshatter: The Open Source Project
+ Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
+ Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
+ Copyright (c) 1997-2006, Destroyer Studios LLC.
+
+ AUTHOR: John DiCamillo
+
+
+ OVERVIEW
+ ========
+ ILS Hoop (HUD display) class
+*/
+
+#include "Hoop.h"
+
+#include "Game.h"
+#include "Bitmap.h"
+#include "DataLoader.h"
+#include "Window.h"
+
+static Color ils_color;
+
+// +--------------------------------------------------------------------+
+
+Hoop::Hoop()
+: width(360), height(180), mtl(0)
+{
+ foreground = 1;
+ radius = (float) width;
+
+ DataLoader* loader = DataLoader::GetLoader();
+
+ loader->SetDataPath("HUD/");
+ loader->LoadTexture("ILS.pcx", hoop_texture, Bitmap::BMP_TRANSLUCENT);
+ loader->SetDataPath(0);
+
+ CreatePolys();
+}
+
+Hoop::~Hoop()
+{ }
+
+// +--------------------------------------------------------------------+
+
+void Hoop::SetColor(Color c)
+{
+ ils_color = c;
+}
+
+// +--------------------------------------------------------------------+
+
+void
+Hoop::CreatePolys()
+{
+ Material* mtl = new Material;
+
+ mtl->tex_diffuse = hoop_texture;
+ mtl->blend = Material::MTL_ADDITIVE;
+
+ int w = width /2;
+ int h = height/2;
+
+ model = new Model;
+ own_model = 1;
+
+ Surface* surface = new Surface;
+
+ surface->SetName("hoop");
+ surface->CreateVerts(4);
+ surface->CreatePolys(2);
+
+ VertexSet* vset = surface->GetVertexSet();
+ Poly* polys = surface->GetPolys();
+
+ ZeroMemory(polys, sizeof(Poly) * 2);
+
+ for (int i = 0; i < 4; i++) {
+ int x = w;
+ int y = h;
+ float u = 0;
+ float v = 0;
+
+ if (i == 0 || i == 3)
+ x = -x;
+ else
+ u = 1;
+
+ if (i < 2)
+ y = -y;
+ else
+ v = 1;
+
+ vset->loc[i] = Vec3(x, y, 0);
+ vset->nrm[i] = Vec3(0, 0, 0);
+
+ vset->tu[i] = u;
+ vset->tv[i] = v;
+ }
+
+ for (int i = 0; i < 2; i++) {
+ Poly& poly = polys[i];
+
+ poly.nverts = 4;
+ poly.vertex_set = vset;
+ poly.material = mtl;
+
+ poly.verts[0] = i ? 3 : 0;
+ poly.verts[1] = i ? 2 : 1;
+ poly.verts[2] = i ? 1 : 2;
+ poly.verts[3] = i ? 0 : 3;
+
+ poly.plane = Plane(vset->loc[poly.verts[0]],
+ vset->loc[poly.verts[2]],
+ vset->loc[poly.verts[1]]);
+
+ surface->AddIndices(6);
+ }
+
+ // then assign them to cohesive segments:
+ Segment* segment = new Segment;
+ segment->npolys = 2;
+ segment->polys = &polys[0];
+ segment->material = segment->polys->material;
+
+ surface->GetSegments().append(segment);
+
+ model->AddSurface(surface);
+
+
+ SetLuminous(true);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+Hoop::Update()
+{
+ if (mtl)
+ mtl->Ke = ils_color;
+
+ if (model && luminous) {
+ ListIter<Surface> s_iter = model->GetSurfaces();
+ while (++s_iter) {
+ Surface* surface = s_iter.value();
+ VertexSet* vset = surface->GetVertexSet();
+
+ for (int i = 0; i < vset->nverts; i++) {
+ vset->diffuse[i] = ils_color.Value();
+ }
+ }
+
+ InvalidateSurfaceData();
+ }
+}