updatE
This commit is contained in:
parent
547ffedb6d
commit
3d8ad0270b
|
@ -3,13 +3,14 @@ module main;
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
// --- `in` qualifier ---
|
||||||
int kg = 5;
|
int kg = 5;
|
||||||
int g = kg2g(kg);
|
int g = kg2g(kg);
|
||||||
|
|
||||||
writeln("kg: ", kg);
|
writeln("kg: ", kg);
|
||||||
writeln(" g: ", g);
|
writeln(" g: ", g);
|
||||||
|
|
||||||
// --- --- ---
|
// --- `out` qualifier ---
|
||||||
writeln("--- --- ---");
|
writeln("--- --- ---");
|
||||||
|
|
||||||
int remainder = 0;
|
int remainder = 0;
|
||||||
|
@ -18,7 +19,7 @@ void main() {
|
||||||
writeln(" result: ", result);
|
writeln(" result: ", result);
|
||||||
writeln("remainder: ", remainder);
|
writeln("remainder: ", remainder);
|
||||||
|
|
||||||
// --- --- ---
|
// --- `inout` qualifier ---
|
||||||
writeln("--- --- ---");
|
writeln("--- --- ---");
|
||||||
|
|
||||||
int[] array = [1, 2, 3, 4];
|
int[] array = [1, 2, 3, 4];
|
||||||
|
@ -29,7 +30,7 @@ void main() {
|
||||||
const int[] constArrayResult = doSomething(constArray);
|
const int[] constArrayResult = doSomething(constArray);
|
||||||
immutable int[] immutableArrayResult = doSomething(immutableArray);
|
immutable int[] immutableArrayResult = doSomething(immutableArray);
|
||||||
|
|
||||||
int[] arr = doSomething(constArray); // error! cannot do implicit conversion between type qualifiers
|
// int[] arr = doSomething(constArray); // error! cannot do implicit conversion between type qualifiers
|
||||||
// Error: cannot implicitly convert expression `doSomething(constArray)` of type `const(int)[]` to `int[]`
|
// Error: cannot implicitly convert expression `doSomething(constArray)` of type `const(int)[]` to `int[]`
|
||||||
|
|
||||||
writeln(" a: ", arrayResult);
|
writeln(" a: ", arrayResult);
|
|
@ -0,0 +1,15 @@
|
||||||
|
.dub
|
||||||
|
docs.json
|
||||||
|
__dummy.html
|
||||||
|
docs/
|
||||||
|
/ourgame
|
||||||
|
ourgame.so
|
||||||
|
ourgame.dylib
|
||||||
|
ourgame.dll
|
||||||
|
ourgame.a
|
||||||
|
ourgame.lib
|
||||||
|
ourgame-test-*
|
||||||
|
*.exe
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.lst
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"rillki"
|
||||||
|
],
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"lflags": [
|
||||||
|
"-framework",
|
||||||
|
"IOKit",
|
||||||
|
"-framework",
|
||||||
|
"Cocoa",
|
||||||
|
"-framework",
|
||||||
|
"OpenGL"
|
||||||
|
],
|
||||||
|
"libs": [
|
||||||
|
"raylib"
|
||||||
|
],
|
||||||
|
"name": "osx-app",
|
||||||
|
"platforms": [
|
||||||
|
"osx"
|
||||||
|
],
|
||||||
|
"targetType": "executable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"libs": [
|
||||||
|
"raylib",
|
||||||
|
"GL",
|
||||||
|
"m",
|
||||||
|
"pthread",
|
||||||
|
"dl",
|
||||||
|
"rt",
|
||||||
|
"X11"
|
||||||
|
],
|
||||||
|
"name": "linux-app",
|
||||||
|
"platforms": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"targetType": "executable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"libs": [
|
||||||
|
"raylib"
|
||||||
|
],
|
||||||
|
"name": "windows-app",
|
||||||
|
"platforms": [
|
||||||
|
"windows"
|
||||||
|
],
|
||||||
|
"targetType": "executable"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"copyright": "Copyright © 2021, rillki",
|
||||||
|
"dependencies": {
|
||||||
|
"raylib-d": "~>4.5.0"
|
||||||
|
},
|
||||||
|
"description": "D/Raylib minimal setup",
|
||||||
|
"license": "no license",
|
||||||
|
"name": "d-raylib-project-template",
|
||||||
|
"targetPath": "bin"
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"fileVersion": 1,
|
||||||
|
"versions": {
|
||||||
|
"ddmp": "0.0.1-0.dev.3",
|
||||||
|
"fluent-asserts": "0.13.3",
|
||||||
|
"libdparse": "0.14.0",
|
||||||
|
"raylib-d": "4.5.0",
|
||||||
|
"stdx-allocator": "2.77.5"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,47 @@
|
||||||
|
module app;
|
||||||
|
|
||||||
|
import game.data;
|
||||||
|
import game.gstatemanager;
|
||||||
|
import game.menu;
|
||||||
|
import game.play;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
validateRaylibBinding();
|
||||||
|
|
||||||
|
// init
|
||||||
|
InitWindow(windowWidth, windowHeight, "Mission X");
|
||||||
|
scope(exit) { CloseWindow(); }
|
||||||
|
|
||||||
|
// set frames per second
|
||||||
|
SetTargetFPS(60);
|
||||||
|
|
||||||
|
// declaring and initializing menu and play states
|
||||||
|
Menu menu = new Menu();
|
||||||
|
Play play = new Play();
|
||||||
|
|
||||||
|
// init GStateManager
|
||||||
|
GStateManager.getInstance.setState(GameState.MainMenu);
|
||||||
|
GStateManager.getInstance.add(menu, GameState.MainMenu);
|
||||||
|
GStateManager.getInstance.add(play, GameState.Play);
|
||||||
|
GStateManager.getInstance.add(null, GameState.Exit);
|
||||||
|
|
||||||
|
// game loop
|
||||||
|
while(!WindowShouldClose() && GStateManager.getInstance.getState != GameState.Exit) {
|
||||||
|
GStateManager.getInstance.execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
module game.data;
|
||||||
|
|
||||||
|
// mostly used libraries
|
||||||
|
public import raylib;
|
||||||
|
public import std.stdio: writeln, write;
|
||||||
|
|
||||||
|
// window dimensions
|
||||||
|
immutable windowWidth = 720;
|
||||||
|
immutable windowHeight = 640;
|
||||||
|
|
||||||
|
// Game states
|
||||||
|
enum GameState {
|
||||||
|
MainMenu,
|
||||||
|
Play,
|
||||||
|
Exit
|
||||||
|
}
|
||||||
|
|
||||||
|
// state interface
|
||||||
|
interface IState {
|
||||||
|
void run();
|
||||||
|
}
|
||||||
|
|
||||||
|
// entity interface
|
||||||
|
class Entity {
|
||||||
|
Texture2D texture;
|
||||||
|
Rectangle frame;
|
||||||
|
Vector2 position;
|
||||||
|
|
||||||
|
this(in ref Texture2D texture, in Rectangle frame, in Vector2 Position) {
|
||||||
|
this.texture = texture;
|
||||||
|
this.frame = frame;
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
void move(in float x, in float y) {
|
||||||
|
position.x += x;
|
||||||
|
position.y += y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw() {
|
||||||
|
DrawTextureRec(texture, frame, position, Colors.WHITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract void update();
|
||||||
|
abstract void processEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
module game.gstatemanager;
|
||||||
|
|
||||||
|
import game.data;
|
||||||
|
|
||||||
|
class GStateManager {
|
||||||
|
// private class instance
|
||||||
|
private static GStateManager instance;
|
||||||
|
|
||||||
|
// IState interface
|
||||||
|
private IState[GameState] state;
|
||||||
|
|
||||||
|
// current game state
|
||||||
|
private GameState currGameState;
|
||||||
|
|
||||||
|
// private constructor
|
||||||
|
private this() { }
|
||||||
|
|
||||||
|
// return the instance; create the instance, if it wasn't created yet
|
||||||
|
static GStateManager getInstance() {
|
||||||
|
if(instance is null) {
|
||||||
|
instance = new GStateManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add game state
|
||||||
|
void add(IState state, GameState gs) {
|
||||||
|
this.state[gs] = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove game state
|
||||||
|
void remove(GameState gs) {
|
||||||
|
this.state.remove(gs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set game state
|
||||||
|
void setState(GameState gs) {
|
||||||
|
currGameState = gs;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the current game state
|
||||||
|
GameState getState() {
|
||||||
|
return currGameState;
|
||||||
|
}
|
||||||
|
|
||||||
|
// execute the current game state code
|
||||||
|
void execute() {
|
||||||
|
if(state is null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
state[currGameState].run();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
module game.menu;
|
||||||
|
|
||||||
|
import game.data;
|
||||||
|
import game.gstatemanager;
|
||||||
|
|
||||||
|
class Menu: IState {
|
||||||
|
this() {}
|
||||||
|
|
||||||
|
// inherited from IState interface
|
||||||
|
void run() {
|
||||||
|
update();
|
||||||
|
processEvents();
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
void update() {}
|
||||||
|
|
||||||
|
void processEvents() {
|
||||||
|
if(IsKeyPressed(KeyboardKey.KEY_P)) {
|
||||||
|
GStateManager.getInstance.setState(GameState.Play);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void render() {
|
||||||
|
// enable drawing
|
||||||
|
BeginDrawing(); scope(exit) { EndDrawing(); }
|
||||||
|
|
||||||
|
// clear background
|
||||||
|
ClearBackground(Colors.GREEN);
|
||||||
|
|
||||||
|
// draw
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
module game.play;
|
||||||
|
|
||||||
|
import game.data;
|
||||||
|
import game.gstatemanager;
|
||||||
|
import game.player;
|
||||||
|
|
||||||
|
import std.file: getcwd;
|
||||||
|
import std.path: buildPath;
|
||||||
|
import std.string: toStringz;
|
||||||
|
|
||||||
|
class Play: IState {
|
||||||
|
// variables
|
||||||
|
private {
|
||||||
|
Texture2D texPlayer;
|
||||||
|
Player player;
|
||||||
|
}
|
||||||
|
|
||||||
|
this() {
|
||||||
|
texPlayer = LoadTexture(getcwd.buildPath("../../assets/Evil Wizard/Sprites/Idle.png").toStringz);
|
||||||
|
player = new Player(texPlayer, Rectangle(0, 0, 256, 256), Vector2(0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
~this() {
|
||||||
|
UnloadTexture(texPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// inherited from IState interface
|
||||||
|
void run() {
|
||||||
|
update();
|
||||||
|
processEvents();
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
void update() {}
|
||||||
|
|
||||||
|
void processEvents() {
|
||||||
|
if(IsKeyPressed(KeyboardKey.KEY_M)) {
|
||||||
|
GStateManager.getInstance.setState(GameState.MainMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void render() {
|
||||||
|
// enable drawing
|
||||||
|
BeginDrawing(); scope(exit) { EndDrawing(); }
|
||||||
|
|
||||||
|
// clear background
|
||||||
|
ClearBackground(Colors.YELLOW);
|
||||||
|
|
||||||
|
// draw
|
||||||
|
player.draw();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
module game.player;
|
||||||
|
|
||||||
|
import game.data;
|
||||||
|
|
||||||
|
class Player: Entity {
|
||||||
|
this(const ref Texture2D texture, const Rectangle frame, const Vector2 position) {
|
||||||
|
super(texture, frame, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
override void update() {}
|
||||||
|
override void processEvents() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue