95 lines
2.4 KiB
C
95 lines
2.4 KiB
C
// Fountain test script
|
|
|
|
#pragma version(1)
|
|
#pragma stateVertex(PVBackground)
|
|
#pragma stateFragment(PFBackground)
|
|
#pragma stateStore(PSBackground)
|
|
|
|
#define STATE_TRIANGLE_OFFSET_COUNT 0
|
|
#define STATE_LAST_FOCUS 1
|
|
|
|
|
|
// The script enviroment has 3 env allocations.
|
|
// bank0: (r) The enviroment structure
|
|
// bank1: (r) The position information
|
|
// bank2: (rw) The temporary texture state
|
|
|
|
int lastFocus;
|
|
|
|
int main(int index)
|
|
{
|
|
float mat1[16];
|
|
|
|
float trans = Pos->translate;
|
|
float rot = Pos->rotate;
|
|
|
|
matrixLoadScale(mat1, 2.f, 2.f, 2.f);
|
|
matrixTranslate(mat1, 0.f, 0.f, trans);
|
|
matrixRotate(mat1, 90.f, 0.f, 0.f, 1.f);
|
|
matrixRotate(mat1, rot, 1.f, 0.f, 0.f);
|
|
vpLoadModelMatrix(mat1);
|
|
|
|
// Draw the lighting effect in the strip and fill the Z buffer.
|
|
drawSimpleMesh(NAMED_mesh);
|
|
|
|
// Start of images.
|
|
bindProgramStore(NAMED_PSImages);
|
|
bindProgramFragment(NAMED_PFImages);
|
|
bindProgramVertex(NAMED_PVImages);
|
|
|
|
float focusPos = Pos->focus;
|
|
int focusID = 0;
|
|
int lastFocusID = loadI32(2, STATE_LAST_FOCUS);
|
|
int imgCount = 13;
|
|
|
|
if (trans > (-.3f)) {
|
|
focusID = -1.0f - focusPos;
|
|
if (focusID >= imgCount) {
|
|
focusID = -1;
|
|
}
|
|
} else {
|
|
focusID = -1;
|
|
}
|
|
|
|
/*
|
|
if (focusID != lastFocusID) {
|
|
if (lastFocusID >= 0) {
|
|
uploadToTexture(con, env->tex[lastFocusID], 1);
|
|
}
|
|
if (focusID >= 0) {
|
|
uploadToTexture(con, env->tex[focusID], 0);
|
|
}
|
|
}
|
|
*/
|
|
lastFocus = focusID;
|
|
|
|
int triangleOffsetsCount = Pos->triangleOffsetCount;
|
|
|
|
int imgId = 0;
|
|
for (imgId=1; imgId <= imgCount; imgId++) {
|
|
float pos = focusPos + imgId + 0.4f;
|
|
int offset = (int)floorf(pos * 2.f);
|
|
pos = pos - 0.75f;
|
|
|
|
offset = offset + triangleOffsetsCount / 2;
|
|
if (!((offset < 0) || (offset >= triangleOffsetsCount))) {
|
|
int start = offset -2;
|
|
int end = offset + 2;
|
|
|
|
if (start < 0) {
|
|
start = 0;
|
|
}
|
|
if (end >= triangleOffsetsCount) {
|
|
end = triangleOffsetsCount-1;
|
|
}
|
|
|
|
bindTexture(NAMED_PFImages, 0, loadI32(0, imgId - 1));
|
|
matrixLoadTranslate(mat1, -pos - loadF(5, triangleOffsetsCount / 2), 0, 0);
|
|
vpLoadTextureMatrix(mat1);
|
|
drawSimpleMeshRange(NAMED_mesh, loadI32(4, start), (loadI32(4, end) - loadI32(4, start)));
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|