Page MenuHomec4science

Game.pde
No OneTemporary

File Metadata

Created
Wed, May 1, 04:33

Game.pde

import java.text.DecimalFormat;
Mover mover; //The ball
Cylinder cyl; //The basis of all cylinders
PImage img;
PShape globe;
PShape robot; //The vilain
float depth = 2000; //the depth from the box
//Plate size
float plate_w=1000;
float plate_t=plate_w/20;
float x_coord, y_coord;
float mX, mY; //mouse X position
float xOnPlane, yOnPlane; //coordinate on 2D on the box
float rz, rx; //rotate x and rotate z
float cameraHeight;
float speed=10;
float radius=plate_t*4/5;
DecimalFormat f = new DecimalFormat("#0.0");
DecimalFormat f2 = new DecimalFormat("#0");
boolean shiftMod=false;
ParticleSystem partSys=null;
long previousFrame=0;
float timeIntervalParticle=0.5;//seconds
PGraphics gameSurface;
PGraphics statSurface;
PGraphics topView;
void settings() {
size(displayWidth, displayHeight, P3D);
x_coord=width/2;
y_coord=height/2;
}
void setup() {
mover = new Mover();
cyl=new Cylinder();
img = loadImage("earth.jpg");
globe = createShape(SPHERE, radius);
globe.setStroke(false);
globe.setTexture(img);
img = loadImage("robotnik.png");
robot = loadShape("robotnik.obj");
robot.setTexture(img);
gameSurface=createGraphics(width, height-300, P3D);
topView=createGraphics(width, 300, P2D);
statSurface=createGraphics(width, 100, P2D);
}
void draw() {
background(200);
drawGame();
image(gameSurface, 0, 0);
drawTopView();
image(topView, 0, height-300);
drawStat();
image(statSurface, 0, 0);
}
void drawTopView() {
topView.beginDraw();
topView.background(200);
topView.fill(0, 150, 150);
topView.rect(10, 0, 300, 300);
topView.fill(255, 255, 255);
float topViewCylRad=map(cyl.cylinderBaseSize, 0, plate_w/2, 0, 300);
if (partSys!=null) {
for (PVector pv : partSys.cylinders) {
float topViewCylX=map(pv.x, -plate_w/2, plate_w/2, 10, 310);
float topViewCylY=map(pv.y, -plate_w/2, plate_w/2, 10, 310);
topView.ellipse(topViewCylX, topViewCylY, topViewCylRad, topViewCylRad);
}
if (partSys.cylinders.contains(partSys.mainCyl)) {
topView.fill(255, 0, 0);
float topViewCylX=map(partSys.mainCyl.x, -plate_w/2, plate_w/2, 10, 310);
float topViewCylY=map(partSys.mainCyl.y, -plate_w/2, plate_w/2, 10, 310);
topView.ellipse(topViewCylX, topViewCylY, topViewCylRad, topViewCylRad);
}
}
topView.fill(0,0,255);
float topViewBallRad=map(radius, 0, plate_w/2, 0, 300);
float topViewBallX=map(mover.location.x, -plate_w/2, plate_w/2, 10, 310);
float topViewBallY=map(mover.location.y, -plate_w/2, plate_w/2, 10, 310);
topView.ellipse(topViewBallX, topViewBallY, topViewBallRad, topViewBallRad);
topView.endDraw();
}
void drawStat() {
statSurface.beginDraw();
statSurface.background(0, 0, 0, 0);
statSurface.fill(0);
statSurface.textSize(25);
statSurface.text("Rotation X : "+f.format(rx/Math.PI*180)+"° Rotation Z : "+f.format(rz/Math.PI*180)+"° speed: "+f.format(speed/10), 5, 25);
statSurface.text("Ball location : ("+f2.format(mover.location.x)+","+f2.format(mover.location.y)+")", 5, 50);
statSurface.text("Ball velocity : ("+f2.format(mover.velocity.x)+","+f2.format(mover.velocity.y)+")", 5, 75);
statSurface.endDraw();
}
void drawGame() {
gameSurface.beginDraw();
gameSurface.background(100, 0, 0);
gameSurface.directionalLight(50, 100, 125, 0, 1, 0);
gameSurface.ambientLight(102, 102, 102);
gameSurface.pointLight(150, 150, 150, 0, -200, 0);
if (!shiftMod) {
mover.update();
mover.checkEdges();
if (partSys!=null) {
mover.checkCylinderCollision(partSys.cylinders, radius);
}
rz = map(x_coord, 0, width, -PI/3, PI/3);
rx = map(y_coord, 0, height, -PI/3, PI/3);
cameraHeight=400;
} else {
rz=0;
rx=-PI/2;
cameraHeight=0;
}
gameSurface.pushMatrix();
gameSurface.camera(0, -cameraHeight, depth, 0, 0, 0, 0, 1, 0);
gameSurface.rotateZ(rz);
gameSurface.rotateX(rx);
gameSurface.shininess(100);
gameSurface.box(plate_w, plate_t, plate_w);
//particles
if (partSys!=null) {
if (frameCount-previousFrame>=timeIntervalParticle*frameRate && !shiftMod) {
timeIntervalParticle=random(0.2, 1.2);
previousFrame=frameCount;
partSys.addParticle();
}
partSys.run(-(plate_t/2), PI/2);
}
if (shiftMod) {
float wMappedX=2*plate_w;
float wMappedY=1.1*plate_w;
xOnPlane=map(mouseX, 0, width, -wMappedX, wMappedX);
yOnPlane=map(mouseY, 0, height, -wMappedY, wMappedY);
cyl.draw(xOnPlane, yOnPlane, -(plate_t/2), PI/2);
}
gameSurface.translate(mover.getX(), -(plate_t/2+radius), mover.getY());
gameSurface.fill(255, 100, 100);
gameSurface.rotateX(mover.getRotX());
gameSurface.rotateZ(mover.getRotZ());
gameSurface.shape(globe);
gameSurface.popMatrix();
//Draw the text
gameSurface.pushMatrix();
/*gameSurface.fill(0);
gameSurface.textSize(15);
gameSurface.text("Rotation X : "+f.format(rx/Math.PI*180)+"° Rotation Z : "+f.format(rz/Math.PI*180)+"° speed: "+f.format(speed/10), 5, 15);
*/
if (shiftMod) {
gameSurface.textSize(50);
gameSurface.text("[EDIT MOD ON]", 50, 500);
}
gameSurface.fill(255);
gameSurface.popMatrix();
gameSurface.endDraw();
}
void mouseWheel(MouseEvent event) {
float e = event.getCount();
if (e<0) {
speed-=speed<=2?0:1;
} else {
speed+=speed>=15?0:1;
}
}
void mouseDragged() {
if (!shiftMod) {
float d=-(mX-mouseX)*speed/10;
x_coord=x_coord+d<=0?0:x_coord+d>=width?width:x_coord+d;
mX=mouseX;
d=(mY-mouseY)*speed/10;
y_coord=y_coord+d<=0?0:y_coord+d>=height?height:y_coord+d;
mY=mouseY;
}
}
void mousePressed() {
mX = mouseX;
mY = mouseY;
if (shiftMod && -plate_w/2<xOnPlane && xOnPlane<plate_w/2 && -plate_w/2<yOnPlane && yOnPlane<plate_w/2
&& (Math.abs(xOnPlane-mover.location.x) > 2*radius || Math.abs(yOnPlane-mover.location.y) > 2*radius)) {
partSys=new ParticleSystem(new PVector(xOnPlane, yOnPlane), mover, radius);
}
}
void keyPressed() {
if (keyCode == SHIFT) {
shiftMod=true;
}
}
void keyReleased() {
if (keyCode == SHIFT) {
shiftMod=false;
}
}

Event Timeline