starting doing this :3
This commit is contained in:
39
source/Bakery2D/Level/Level.cpp
Normal file
39
source/Bakery2D/Level/Level.cpp
Normal file
@@ -0,0 +1,39 @@
|
||||
#include "Level.hpp"
|
||||
|
||||
template <typename T>
|
||||
Level::Level(T* levelName, char* spritesheetPath, C3D_RenderTarget* top, C3D_RenderTarget* bottom) : level(levelName), top(top), bottom(bottom) {
|
||||
this->spritesheet = C2D_SpriteSheetLoad(spritesheetPath);
|
||||
size_t numImages = C2D_SpriteSheetCount(spritesheet);
|
||||
|
||||
for (size_t i = 0; i < numImages; i++) {
|
||||
Sprite* thisSprite = &sprites[i];
|
||||
float x = SCREEN_WIDTH / 2;
|
||||
float y = SCREEN_HEIGHT / 2;
|
||||
|
||||
C2D_SpriteFromSheet(&thisSprite->spr, spritesheet, i);
|
||||
C2D_SpriteSetCenter(&thisSprite->spr, 0.5f, 0.5f);
|
||||
thisSprite->setPosition(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
void Level::run() {
|
||||
if (!hasBeenSetup) {
|
||||
level->setup();
|
||||
this->hasBeenSetup = true;
|
||||
}
|
||||
level->update();
|
||||
|
||||
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
||||
C2D_TargetClear(top, C3D_CLEAR_COLOR);
|
||||
C2D_SceneBegin(top);
|
||||
level->drawTop();
|
||||
|
||||
C2D_TargetClear(bottom, C3D_CLEAR_COLOR);
|
||||
C2D_SceneBegin(bottom);
|
||||
level->drawBottom();
|
||||
C3D_FrameEnd(0);
|
||||
}
|
||||
|
||||
void Level::cleanup() {
|
||||
C2D_SpriteSheetFree(spriteSheet);
|
||||
}
|
||||
75
source/Bakery2D/Level/Level.hpp
Normal file
75
source/Bakery2D/Level/Level.hpp
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
Level.hpp
|
||||
Bakery2D
|
||||
Created by breadone
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef LEVEL_HPP
|
||||
#define LEVEL_HPP
|
||||
|
||||
#include <citro2d.h>
|
||||
#include "../Sprite/Sprite.hpp"
|
||||
|
||||
#define SCREEN_WIDTH 400
|
||||
#define SCREEN_HEIGHT 240
|
||||
#define MAX_SPRITES 768
|
||||
/**
|
||||
The Level class, the backdrops for your game, and the gateway to how they are controlled.
|
||||
|
||||
Example:
|
||||
```cpp
|
||||
struct mainLevel: Level {
|
||||
mainLevel(): Level(this, "romfs:/gfx/mainlevel/sprites.t3x");
|
||||
|
||||
int score = 0;
|
||||
bool gameOver = false;
|
||||
|
||||
void setup() {
|
||||
// set background sprite to correct location and scale
|
||||
sprites[0].setPosition(200, 120);
|
||||
C2D_SpriteSetScale(&sprites[SPR_BG].spr, 2.7778, 2.7907); // scale image to 400x240 (3ds screen res)
|
||||
}
|
||||
|
||||
void update() {
|
||||
sprites[1].move(0, -0.4); // move bird down
|
||||
sprites[2].move(-1, 0); // move pipe left
|
||||
|
||||
// other game logic goes here...
|
||||
}
|
||||
|
||||
void drawTop() {
|
||||
sprites[0].draw(); // draw background
|
||||
sprites[1].draw(); // draw bird
|
||||
sprites[2].draw(); // draw pipe
|
||||
}
|
||||
|
||||
void drawBottom() {
|
||||
sprites[3].draw(); // draw scorecard
|
||||
}
|
||||
};
|
||||
```
|
||||
*/
|
||||
class Level {
|
||||
public:
|
||||
Sprite sprites[MAX_SPRITES];
|
||||
C2D_SpriteSheet spritesheet;
|
||||
C3D_RenderTarget* top;
|
||||
C3D_RenderTarget* bottom;
|
||||
Level* level;
|
||||
bool hasBeenSetup = false;
|
||||
|
||||
virtual void setup() = 0;
|
||||
virtual void update() = 0;
|
||||
virtual void drawTop() = 0;
|
||||
virtual void drawBottom() = 0;
|
||||
|
||||
template <typename T>
|
||||
Level(T* levelName, char* spritesheetPath, C3D_RenderTarget* top, C3D_RenderTarget* bottom);
|
||||
|
||||
// sets up the level if it hasnt been, then updates the logic, and draws the frame
|
||||
void run();
|
||||
|
||||
virtual void cleanup();
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user