//Conrad, Bader(CEO): 2649751
//Lucca, Kuvecke: 2649706
//Paul,Bleyer: 2650032
/*************************************************************************************
# Willkommen im verrückten Labyrinth #
# Bewege dich mit den Pfeiltasten und nutze die Leertaste um Gegenstände einzusetzen #
# Schaffst du es den Ausgang zu finden, bevor dir das Licht ausgeht? #
*************************************************************************************/
#include <FastLED.h>
#include <Adafruit_NeoPixel.h>
#include "Global_Setup.h"
#include "Matrix.h"
#include "Buttons.h"
#include "Game.h"
#include "Sprites.h"
#include "Extra.h"
// *** Creating objects ***
// Matrix objectName(fps);
Matrix matrix(500);
// Buttons objectName(firstPin, lastPin, readInterval);
Buttons buttons(2, 5, 10);
// *** GameObjects & Projectiles ***
// GameObject objectName(name, spriteArray, width, height, xPos, yPos, collisionLayer, visibility, standalone);
// collisionLayer (0-255) -> Higher can collide with lower, equal can't collide
// visibility (optinal, default: false) -> If true, object is visible and will be displayed
// standalone (optional, default: false) -> If true, object is not part of render queue and has to be displayed manually
Start beginning ("Beginning", ItemSprite, 1, 1, 0, 0, 10, false);
GameObject pfeil ("Pfeil", PfeilSprite, 12, 7, 38, 5, 10, true);
GameObject leicht ("Leicht", LeichtSprite, 28, 7, 4, 5, 10, true);
GameObject mittel ("Mittel", MittelSprite, 28, 7, 4, 13, 10, true);
GameObject schwer ("Schwer", SchwerSprite, 28, 7, 4, 21, 10, true);
GameObject player ("Spielfigur", playerSprite, 1, 1, 0, 0, 10, false);
Item items ("Items", ItemSprite, 1, 1, 0, 0, 10, true);
Fog FoV ("FieldOfView", FogSprite, 64, 32, 0, 0, 10, false);
Screens levelScreen ("LevelScreen", Level1Sprite, 28, 7, 18, 13, 10, false);
Screens gameOver ("gameOver", GameOverSprite, 41, 7, 13, 5, 10, false);
Screens tombstone ("Tombstone", TombstoneSprite, 13, 17, 25, 13, 10, false);
Screens victory ("Victory", VictorySprite, 41, 7, 18, 4, 10, false);
Screens cup ("Cup", CupSprite, 17, 17, 24, 13, 10, false);
// Anzahl Slots des Inventars
Inventory inventory (4);
Extra showFuel (LEDFUEL_PIN, LEDFUEL_COUNT);
Extra sound (SPEAKER_PIN);
Extra animation (37, 0, 400);
void setup() {
Serial.begin(115200);
randomSeed(analogRead(A0));
strip.begin();
strip.show();
//(XStart,XEnd,Ystart,YEnd)
items.randomPosition();
matrix.init();
buttons.init();
items.init(Item_Pin);
beginning.initPins(Item_Pin, 2, 4);
// Add objects to render queue with matrix.add(&object)
// Remove objects from render queue with matrix.remove(&object)
matrix.add(&pfeil);
matrix.add(&leicht);
matrix.add(&mittel);
matrix.add(&schwer);
matrix.add(&player);
matrix.add(&FoV);
matrix.add(&levelScreen);
matrix.add(&gameOver);
matrix.add(&tombstone);
matrix.add(&victory);
matrix.add(&cup);
Serial.println("*************************************************************************************");
Serial.println("Willkommen im verrückten LAbYriNtH!");
Serial.println("Bewege dich mit den Pfeiltasten und nutze die Leertaste um Gegenstände einzusetzen.");
Serial.println("Schaffst du es den Ausgang zu finden, bevor dir das Licht ausgeht?");
Serial.println("*************************************************************************************");
}
void loop() {
if (!beginning.getState()) {
beginning.StartMenue(&player, &leicht, &mittel, &schwer, &pfeil, &FoV, &inventory, &levelScreen, &victory, &cup);
beginning.moveArrow(&pfeil);
}
else {
//lässt die Spielfigut bewegen
buttons.moveObject(&player, &items);
//Abfrage der Position der Spielfigur und Update des Sichtfelds
//FoV.updateXY(&player);
FoV.radiusDecrease(&player, &FoV, &gameOver, &tombstone);
FoV.updateSprite(&player);
//Abfrage ob Item eingesammelt wird bzw. benutz wird
items.collectItem(&player, &inventory, &FoV, FuelSprite, ItemSprite);
items.useItem(&inventory, &FoV, &player);
//Update der Fuel Anzeige, entsprechend der Spielzeit
showFuel.updateFuel(&FoV);
//Überprüft ob ein Level geschafft wurde, lädt die neuen Level, steuert die 'Animationen' und stellt die Zeit dar
levelScreen.levelUp(&player, &FoV, &victory, &cup, &items);
animation.blood(&FoV);
animation.speedRunTime(beginning.getSpeedRunStamp(), &levelScreen);
}
// Global system tick
systemtime = millis();
// Buttons
buttons.update();
// Global timed rendering with render queue
matrix.update();
//Sounds
sound.deathSound(&FoV);
sound.levelUpSound(&levelScreen);
sound.victorySound(&levelScreen);
}