Adding modding folder with a hacked build.
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
package levels
|
||||
|
||||
import (
|
||||
mgl "github.com/go-gl/mathgl/mgl32"
|
||||
|
||||
"github.com/inkyblackness/hacked/editor/render"
|
||||
"github.com/inkyblackness/hacked/ui/opengl"
|
||||
)
|
||||
|
||||
var highlighterVertexShaderSource = `
|
||||
#version 150
|
||||
precision mediump float;
|
||||
|
||||
in vec3 vertexPosition;
|
||||
|
||||
uniform mat4 modelMatrix;
|
||||
uniform mat4 viewMatrix;
|
||||
uniform mat4 projectionMatrix;
|
||||
|
||||
void main(void) {
|
||||
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(vertexPosition, 1.0);
|
||||
}
|
||||
`
|
||||
|
||||
var highlighterFragmentShaderSource = `
|
||||
#version 150
|
||||
precision mediump float;
|
||||
|
||||
uniform vec4 inColor;
|
||||
out vec4 fragColor;
|
||||
|
||||
void main(void) {
|
||||
fragColor = inColor;
|
||||
}
|
||||
`
|
||||
|
||||
// Highlighter draws a simple highlighting of a rectangular area.
|
||||
type Highlighter struct {
|
||||
context *render.Context
|
||||
|
||||
program uint32
|
||||
vao *opengl.VertexArrayObject
|
||||
vertexPositionBuffer uint32
|
||||
vertexPositionAttrib int32
|
||||
modelMatrixUniform opengl.Matrix4Uniform
|
||||
viewMatrixUniform opengl.Matrix4Uniform
|
||||
projectionMatrixUniform opengl.Matrix4Uniform
|
||||
inColorUniform opengl.Vector4Uniform
|
||||
}
|
||||
|
||||
// NewHighlighter returns a new instance of Highlighter.
|
||||
func NewHighlighter(context *render.Context) *Highlighter {
|
||||
gl := context.OpenGL
|
||||
program, programErr := opengl.LinkNewStandardProgram(gl, highlighterVertexShaderSource, highlighterFragmentShaderSource)
|
||||
|
||||
if programErr != nil {
|
||||
panic(opengl.NamedShaderError{Name: "HighlighterShader", Nested: programErr})
|
||||
}
|
||||
highlighter := &Highlighter{
|
||||
context: context,
|
||||
program: program,
|
||||
|
||||
vao: opengl.NewVertexArrayObject(gl, program),
|
||||
vertexPositionBuffer: gl.GenBuffers(1)[0],
|
||||
vertexPositionAttrib: gl.GetAttribLocation(program, "vertexPosition"),
|
||||
modelMatrixUniform: opengl.Matrix4Uniform(gl.GetUniformLocation(program, "modelMatrix")),
|
||||
viewMatrixUniform: opengl.Matrix4Uniform(gl.GetUniformLocation(program, "viewMatrix")),
|
||||
projectionMatrixUniform: opengl.Matrix4Uniform(gl.GetUniformLocation(program, "projectionMatrix")),
|
||||
inColorUniform: opengl.Vector4Uniform(gl.GetUniformLocation(program, "inColor"))}
|
||||
|
||||
{
|
||||
gl.BindBuffer(opengl.ARRAY_BUFFER, highlighter.vertexPositionBuffer)
|
||||
half := float32(0.5)
|
||||
var vertices = []float32{
|
||||
-half, -half, 0.0,
|
||||
half, -half, 0.0,
|
||||
half, half, 0.0,
|
||||
|
||||
half, half, 0.0,
|
||||
-half, half, 0.0,
|
||||
-half, -half, 0.0}
|
||||
gl.BufferData(opengl.ARRAY_BUFFER, len(vertices)*4, vertices, opengl.STATIC_DRAW)
|
||||
gl.BindBuffer(opengl.ARRAY_BUFFER, 0)
|
||||
}
|
||||
|
||||
highlighter.vao.OnShader(func() {
|
||||
gl.EnableVertexAttribArray(uint32(highlighter.vertexPositionAttrib))
|
||||
gl.BindBuffer(opengl.ARRAY_BUFFER, highlighter.vertexPositionBuffer)
|
||||
gl.VertexAttribOffset(uint32(highlighter.vertexPositionAttrib), 3, opengl.FLOAT, false, 0, 0)
|
||||
gl.BindBuffer(opengl.ARRAY_BUFFER, 0)
|
||||
})
|
||||
|
||||
return highlighter
|
||||
}
|
||||
|
||||
// Dispose releases all resources.
|
||||
func (highlighter *Highlighter) Dispose() {
|
||||
gl := highlighter.context.OpenGL
|
||||
|
||||
highlighter.vao.Dispose()
|
||||
gl.DeleteBuffers([]uint32{highlighter.vertexPositionBuffer})
|
||||
gl.DeleteShader(highlighter.program)
|
||||
}
|
||||
|
||||
// Render renders the highlights.
|
||||
func (highlighter *Highlighter) Render(positions []MapPosition, sideLength float32, color [4]float32) {
|
||||
gl := highlighter.context.OpenGL
|
||||
|
||||
highlighter.vao.OnShader(func() {
|
||||
highlighter.viewMatrixUniform.Set(gl, highlighter.context.ViewMatrix)
|
||||
highlighter.projectionMatrixUniform.Set(gl, &highlighter.context.ProjectionMatrix)
|
||||
highlighter.inColorUniform.Set(gl, &color)
|
||||
|
||||
for _, pos := range positions {
|
||||
modelMatrix := mgl.Ident4().
|
||||
Mul4(mgl.Translate3D(float32(pos.X), float32(pos.Y), 0.0)).
|
||||
Mul4(mgl.Scale3D(sideLength, sideLength, 1.0))
|
||||
|
||||
highlighter.modelMatrixUniform.Set(gl, &modelMatrix)
|
||||
|
||||
gl.DrawArrays(opengl.TRIANGLES, 0, 6)
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user