First player sprite iterations
This commit is contained in:
commit
d5ac654043
37 changed files with 3093 additions and 0 deletions
120
src/com/gnarwhal/ld46/engine/model/Circle.java
Normal file
120
src/com/gnarwhal/ld46/engine/model/Circle.java
Normal file
|
@ -0,0 +1,120 @@
|
|||
package com.gnarwhal.ld46.engine.model;
|
||||
|
||||
import com.gnarwhal.ld46.engine.display.Camera;
|
||||
import com.gnarwhal.ld46.engine.shaders.Shader;
|
||||
import com.gnarwhal.ld46.engine.shaders.Shader2c;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
public class Circle {
|
||||
|
||||
private static Vao vao;
|
||||
|
||||
private Camera camera;
|
||||
private Shader2c shader;
|
||||
private Vector3f position;
|
||||
private float radius;
|
||||
private float r, g, b, a;
|
||||
|
||||
public Circle(Camera camera, float x, float y, float z, float radius) {
|
||||
this.camera = camera;
|
||||
position = new Vector3f(x, y, z);
|
||||
this.radius = radius;
|
||||
shader = Shader.SHADER2C;
|
||||
r = 1;
|
||||
g = 0;
|
||||
b = 0;
|
||||
a = 1;
|
||||
if(vao == null)
|
||||
initVao();
|
||||
}
|
||||
|
||||
private void initVao() {
|
||||
final int NUM_POINTS = 30;
|
||||
float[] cVertices = new float[NUM_POINTS * 3];
|
||||
int[] cIndices = new int[(NUM_POINTS - 2) * 3];
|
||||
for (int i = 0; i < cVertices.length; i += 3) {
|
||||
double angle = Math.PI * 2 * i / (NUM_POINTS * 3);
|
||||
cVertices[i ] = (float) Math.cos(angle);
|
||||
cVertices[i + 1] = (float) Math.sin(angle);
|
||||
cVertices[i + 2] = 0;
|
||||
}
|
||||
for (int i = 0; i < cIndices.length; i += 3) {
|
||||
cIndices[i ] = 0;
|
||||
cIndices[i + 1] = i / 3 + 1;
|
||||
cIndices[i + 2] = i / 3 + 2;
|
||||
}
|
||||
vao = new Vao(cVertices, cIndices);
|
||||
}
|
||||
|
||||
public void render() {
|
||||
shader.enable();
|
||||
shader.setMVP(camera.getMatrix().translate(position).scale(radius));
|
||||
shader.setColor(r, g, b, a);
|
||||
vao.render();
|
||||
}
|
||||
|
||||
public Vector3f getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
public void setX(float x) {
|
||||
position.x = x;
|
||||
}
|
||||
|
||||
public void setY(float y) {
|
||||
position.y = y;
|
||||
}
|
||||
|
||||
public void setZ(float z) {
|
||||
position.z = z;
|
||||
}
|
||||
|
||||
public void setPosition(float x, float y) {
|
||||
position.x = x;
|
||||
position.y = y;
|
||||
}
|
||||
|
||||
public void setPosition(float x, float y, float z) {
|
||||
position.x = x;
|
||||
position.y = y;
|
||||
position.z = z;
|
||||
}
|
||||
|
||||
public void setPosition(Vector3f position) {
|
||||
this.position.set(position);
|
||||
}
|
||||
|
||||
public void translate(float x, float y) {
|
||||
position.x += x;
|
||||
position.y += y;
|
||||
}
|
||||
|
||||
public void translate(float x, float y, float z) {
|
||||
position.x += x;
|
||||
position.y += y;
|
||||
position.z += z;
|
||||
}
|
||||
|
||||
public void translate(Vector3f position) {
|
||||
this.position.add(position);
|
||||
}
|
||||
|
||||
public void setRadius(float radius) {
|
||||
this.radius = radius;
|
||||
}
|
||||
|
||||
public void setDiameter(float diameter) {
|
||||
this.radius = diameter / 2;
|
||||
}
|
||||
|
||||
public void setColor(float r, float g, float b, float a) {
|
||||
this.r = r;
|
||||
this.g = g;
|
||||
this.b = b;
|
||||
this.a = a;
|
||||
}
|
||||
|
||||
public boolean contains(Vector3f vector) {
|
||||
return (position.sub(vector, new Vector3f()).lengthSquared() < radius * radius);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue