This commit is contained in:
no 2021-06-03 01:42:22 +02:00
commit 621c2222c0
12 changed files with 261 additions and 152 deletions

View File

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
<attributes>
<attribute name="optional" value="true"/>

View File

@ -17,14 +17,6 @@
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src/launcher/ui</directory>
</resource>
</resources>
<plugins>
<plugin>

View File

@ -5,7 +5,6 @@ import engine.math.*;
import engine.object.*;
import engine.sound.*;
import org.lwjgl.glfw.GLFWFramebufferSizeCallback;
import org.lwjgl.glfw.GLFWVidMode;
import org.lwjgl.opengl.GL;
@ -28,6 +27,8 @@ public class Engine {
private final int width;
private final int height;
private float viewXPos;
/**
* Create the engine and initial attributes use .init() to start the engine
*/
@ -38,6 +39,7 @@ public class Engine {
this.height = height;
ObjectGl.projection = Matrix4f.orthographic(-1000, 1000, -1000 * aspectRatio, 1000 * aspectRatio, 0.1f, 100.0f);
ObjectGl.view = Matrix4f.translate(new Vector3f(0.0f, 0.0f, 1.0f));
this.viewXPos = 0.0f;
}
/**
@ -62,7 +64,7 @@ public class Engine {
assert getWindow() != NULL;
boolean present = glfwJoystickPresent(GLFW_JOYSTICK_1);
System.out.println("Manette détectée : " + present);
System.out.println("Manette détectée : " + present);
// On récupère les informations du moniteur principal
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
@ -79,6 +81,8 @@ public class Engine {
glfwShowWindow(getWindow());
GL.createCapabilities();
correctViewport(this.width, this.height);
glfwSetFramebufferSizeCallback(getWindow(), resizeWindow);
glEnable(GL_DEPTH_TEST); // Z-Buffer plus z est grand plus l'objet est proche de la camera limite à 100.0f au dela l'objet disparait
@ -102,6 +106,7 @@ public class Engine {
*/
public void render() {
glEnable(GL_SCISSOR_TEST);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@ -117,7 +122,6 @@ public class Engine {
/**
* Add obj to the render queue
*
* @param obj ObjectGl to render
*/
public void add_objectGl(ObjectGl obj) {
@ -128,6 +132,28 @@ public class Engine {
objectsGl.remove(obj);
}
public void translateView(Vector3f vec){
ObjectGl.view = ObjectGl.view.multiply(Matrix4f.translate(vec));
viewXPos += vec.x;
}
public static void correctViewport(int width, int height){
int heightViewport, widthViewport, x, y;
if (width >= height * 4.0f/3.0f){
heightViewport = height;
widthViewport = (int) (height * 4.0f/3.0f);
y = 0;
x = (width - widthViewport)/2;
} else {
widthViewport = width;
heightViewport = (int) (width * 3.0f/4.0f);
y = (height - heightViewport)/2;
x = 0;
}
glScissor(x, y, widthViewport, heightViewport);
glViewport(x, y, widthViewport, heightViewport);
}
public boolean isRunning() {
return running;
}
@ -149,13 +175,13 @@ public class Engine {
}
/**
* Est appelé àa chaque modification de la taille de la fenêtre, et modifie la taille de la zone de rendu
* Est appelé à chaque modification de la taille de la fenêtre, et modifie la taille de la zone de rendu
* pour quelle corresponde à la taille de la fenêtre
*/
private static final GLFWFramebufferSizeCallback resizeWindow = new GLFWFramebufferSizeCallback() {
@Override
public void invoke(long window, int width, int height) {
glViewport(0, 0, width, height);
correctViewport(width, height);
}
};
@ -180,26 +206,29 @@ public class Engine {
/*
Engine Init
*/
Engine engine = new Engine(1280, 720, 9.0f / 16.0f);
int speed = 10; //vitesse déplacement Object
Engine engine = new Engine(1280, 720, 3.0f / 4.0f);
int speed = 10; //vitesse d<EFBFBD>placement Object
engine.init();
// Add objects to render
String path = "textures/zangief_sprite.png";
String path2 = "textures/awesomeface.png";
String pathToBG = "textures/background_beach.png";
ObjectGl zangief = new ObjectGl(0f, 60f, 80f, 10f, path, null);
zangief.setTextureWrap(58, 0, 62, 84, ObjectGl.STICK_TOP);
ObjectGl zangief = new ObjectGl(10.0f, 1f, 1f, 10f, path, null);
zangief.setTextureWrap(58, 0, 62, 84, ObjectGl.DEFAULT);
engine.add_objectGl(zangief);
zangief.translate(new Vector3f(-5000.0f, 500.0f, 10.0f));
zangief.setColor(new Vector3f(1.0f, 1.0f, 1.0f));
zangief.useTime = true;
zangief.setShader("shaders/StylishShaders/BasicVert.glsl", "shaders/StylishShaders/FlashFrag.glsl");
zangief.translate(new Vector3f(-1000.0f, 200.0f, 0.0f));
ObjectGl smiley2 = new ObjectGl(0.0f, 500.0f, 500.0f, 1f, path2, null);
engine.add_objectGl(smiley2);
smiley2.translate(new Vector3f(0.0f, 0.0f, 5.0f));
smiley2.translate(new Vector3f(0.0f, 0.0f, 15.0f));
//Create background
ObjectGl background = new ObjectGl(0f,1f,1f,10f, pathToBG, null);
background.setTextureWrap(0,0,621, 224, ObjectGl.DEFAULT);
background.translate(new Vector3f(-3011.0f, 1400.0f, 1.0f));
engine.add_objectGl(background);
long timer = System.currentTimeMillis();
long lastFrame;
@ -208,7 +237,7 @@ public class Engine {
boolean Joystick1Present = glfwJoystickPresent(GLFW_JOYSTICK_1);
/*
* Création des manettes / action
* Cr<EFBFBD>ation des manettes / action
*/
GamepadInput gamepad1 = null;
@ -220,9 +249,6 @@ public class Engine {
List<Integer> listJump = new ArrayList<>();
listJump.add(InputConst.buttonA);
jump = new Button("jump", listJump, gamepad1);
}
@ -233,18 +259,17 @@ public class Engine {
if (Joystick1Present) {
gamepad1.inputRefresh();
System.out.println(gamepad1.getAxisDiscreet(GLFW_GAMEPAD_AXIS_LEFT_X));
// Check si le personnage a sauté
// Check si le personnage a sauté
if (jump.isButtonPressed()){
// Le personnage saute
System.out.println(" JE SAUTE ");
}
}
// Input.keyboardInput(zangief, speed);
// input(smiley2, speed);
KeyboardInput.keyboardInput(zangief, speed);
Vector3f vecTransView = new Vector3f((-zangief.getXPos() - engine.viewXPos) - 250.0f,0.0f,0.0f);
engine.translateView(vecTransView);
/*
********************

View File

@ -94,17 +94,20 @@ public class KeyboardInput extends GLFWKeyCallback {
keyPressed = true;
} else if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_W)) {
keyPressed = true;
token.scale(new Vector3f(1.001f,1.001f,1.0f));
}
if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_A)) {
token.translate(new Vector3f (speed * -5.0f, 0.0f, 0.0f));
token.translate(new Vector3f (speed * -1.0f, 0.0f, 0.0f));
token.setTextureWrap(121,0,57,82, ObjectGl.STICK_TOP);
keyPressed = true;
}
else if (KeyboardInput.isKeyDown(GLFW.GLFW_KEY_D)) {
token.translate(new Vector3f (speed * 5.0f, 0.0f, 0.0f));
token.translate(new Vector3f (speed * 1.0f, 0.0f, 0.0f));
token.setTextureWrap(178,0,62,82, ObjectGl.STICK_TOP);
keyPressed = true;
}
if (!keyPressed) token.setTextureWrap(58,0,62,82, ObjectGl.STICK_TOP);
token.flipTextureWrapH();
}
}

View File

@ -13,6 +13,7 @@ public class Vector3f {
public Vector3f(float x, float y){
this.x = x;
this.y = y;
this.z = 0.0f;
}
public Vector3f(float x, float y, float z){

View File

@ -27,7 +27,15 @@ public class ObjectGl {
public static Matrix4f projection;
public static Matrix4f view;
/**
* xPos and yPos will stop to be relevant if you use rotate function
*/
private float xPos;
private float yPos;
private float zPos;
private float xAngle;
private float yAngle;
private float zAngle;
private float width; // To be used in setTextureWrap
private float height;
private float scalingFactor;
@ -35,6 +43,7 @@ public class ObjectGl {
public boolean useTime;
private Texture texture;
private float[] textureWrap;
/**
* Create a rectangle shape, use setTextureWrap to correctly align the texture with the model
@ -61,15 +70,18 @@ public class ObjectGl {
this.texture = new Texture(tex, 0);
}
this.xPos = 0.0f;
this.yPos = 0.0f;
this.zPos = z;
this.height = h;
this.width = w;
this.textureWrap = Primitive.stdTexWrap;
this.vertexArray = new VertexArray(Primitive.createRectangle(this.zPos, this.width, this.height), Primitive.rectangle_indices, colorBuffer, Primitive.stdTexWrap);
this.scalingFactor = size;
this.scalingFactor = 1;
this.transform = Matrix4f.identity();
this.scale(new Vector3f(size, size,1f));
this.scale(new Vector3f(size, size,1.0f));
this.stick_state = DEFAULT;
this.useTime = false;
@ -92,6 +104,9 @@ public class ObjectGl {
public void resetTransform(){
this.transform = Matrix4f.identity();
this.scalingFactor = 1;
this.xPos = 0.0f;
this.yPos = 0.0f;
this.zPos = 0.0f;
}
/**
@ -99,9 +114,11 @@ public class ObjectGl {
* @param vec Vector3f
*/
public void translate(Vector3f vec){
this.xPos += vec.x;
this.yPos += vec.y;
this.zPos += vec.z;
vec.divXY(this.scalingFactor);
this.transform = this.transform.multiply(Matrix4f.translate(vec));
this.zPos += vec.z;
}
/**
@ -183,6 +200,19 @@ public class ObjectGl {
this.setTextureWrap(result);
}
/**
* Reverse the textureWrap left to right
*/
public void flipTextureWrapH(){
float[] textureWrapTemp = new float[] {
this.textureWrap[2], this.textureWrap[3],
this.textureWrap[0], this.textureWrap[1],
this.textureWrap[6], this.textureWrap[7],
this.textureWrap[4], this.textureWrap[5]
};
setTextureWrap(textureWrapTemp);
}
/**
* Set a new shader to be used by this object
* @param vert path to glsl Vertex Shader
@ -207,9 +237,18 @@ public class ObjectGl {
}
private void setTextureWrap(float[] texture){
this.textureWrap = texture;
this.vertexArray.swapTextureBufferObject(texture);
}
public float getXPos(){
return xPos;
}
public float getYPos(){
return yPos;
}
public float getZPos(){
return zPos;
}

View File

@ -0,0 +1,25 @@
package launcher;
import javafx.fxml.FXML;
public class FXMLController {
public FXMLController() {
}
@FXML
public void launch() {
Launcher.runGame();
}
@FXML
public void settings() {
}
@FXML
public void quit() {
System.exit(0);
}
}

View File

@ -13,25 +13,54 @@ import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.fxml.*;
import engine.Engine;
public class Launcher extends Application {
public static Launcher pointer;
private static Settings setter;
public Launcher() {
pointer = this;
try {
setter = new Settings();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
/*
* Start method is used by Launcher as an implementation of the Application class to create a JavaFX thread to display the GUI window
*/
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("ui/launcher.fxml"));
Parent root = FXMLLoader.load(getClass().getResource("launcher.fxml"));
Scene main = new Scene(root);
primaryStage.initStyle(StageStyle.UNDECORATED);
//primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.setTitle("Boulevard Combattant");
primaryStage.setScene(main);
primaryStage.show();
}
public static void runGame() {
try {
setter.setSettings();
Engine.main(null);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
public static void openSettings() {
}
}

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.layout.Pane?>
<HBox xmlns:fx="http://javafx.com/fxml" stylesheets="@style.css" fx:id="window"
prefWidth="640" prefHeight="380"
fx:controller="launcher.FXMLController">
<children>
<VBox fx:id="sidepanel"
prefWidth="120" prefHeight="380">
<children>
<Pane fx:id="logo"
prefWidth="120" prefHeight="120"></Pane>
<VBox fx:id="btn"
prefWidth="120" prefHeight="260">
<children>
<Button text="Play" fx:id="btn_launch" onAction="#launch"/>
<Button text="Settings" fx:id="btn_settings" onAction="#settings"/>
<Button text="Quit" fx:id="btn_quit" onAction="#quit"/>
</children>
</VBox>
</children>
</VBox>
<HBox fx:id="picker">
<children>
<VBox fx:id="p1" styleClass="pane_p">
<children>
<ImageView/>
<ChoiceBox styleClass="char_box" />
<ChoiceBox styleClass="contr_box" />
</children>
</VBox>
<VBox fx:id="p2" styleClass="pane_p">
<children>
<ImageView/>
<ChoiceBox styleClass="char_box" />
<ChoiceBox styleClass="contr_box" />
</children>
</VBox>
</children>
</HBox>
</children>
</HBox>

27
src/launcher/style.css Normal file
View File

@ -0,0 +1,27 @@
#window {
-fx-background-color: #131320;
}
/* Sidepanel */
#sidepanel {
-fx-background-color: #303050;
}
#logo {
-fx-background-image: "logo.png";
}
#btn {
-fx-alignment: center;
}
#btn > Button {
-fx-cursor: hand;
-fx-padding: 5;
-fx-width: 100;
}
#btn_launch {
-fx-text-alignment: center;
}

View File

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2015, 2019, Gluon and/or its affiliates.
All rights reserved. Use is subject to license terms.
This file is available and licensed under the following license:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the distribution.
- Neither the name of Oracle Corporation nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<?import javafx.geometry.Rectangle2D?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<HBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: #151619;" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<children>
<VBox prefHeight="400.0" prefWidth="157.0">
<children>
<ImageView accessibleText="Logo" fitHeight="240.0" fitWidth="158.0" pickOnBounds="true" preserveRatio="true">
<image>
</image>
</ImageView>
<VBox alignment="BOTTOM_CENTER" prefHeight="263.0" prefWidth="158.0">
<children>
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0">
<children>
<Button mnemonicParsing="false" text="Run" />
</children>
</VBox>
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="176.0" text="Settings" />
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="161.0" style="-fx-background-color: #e80000;" text="X Quit" textFill="WHITE" />
</children>
</VBox>
</children>
</VBox>
<VBox prefHeight="400.0" prefWidth="455.0">
<children>
<HBox alignment="CENTER" prefHeight="266.0" prefWidth="475.0">
<children>
<VBox alignment="BOTTOM_CENTER" prefHeight="249.0" prefWidth="233.0">
<children>
<ImageView fitHeight="172.0" fitWidth="211.0" pickOnBounds="true" preserveRatio="true">
<image>
</image>
<viewport>
<Rectangle2D />
</viewport>
</ImageView>
</children>
</VBox>
<VBox alignment="BOTTOM_CENTER" prefHeight="249.0" prefWidth="233.0">
<children>
<ImageView fitHeight="200.0" fitWidth="233.0" pickOnBounds="true" preserveRatio="true">
<image>
</image>
</ImageView>
</children>
</VBox>
</children>
</HBox>
<HBox prefHeight="168.0" prefWidth="432.0" />
</children></VBox>
</children>
</HBox>

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB