Skip to content

Commit 031654a

Browse files
committed
Made Arena class
1 parent 9349554 commit 031654a

File tree

9 files changed

+146
-29
lines changed

9 files changed

+146
-29
lines changed

src/arena/Arena.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include "Arena.h"
2+
3+
namespace arena {
4+
Arena::Arena(ArenaType arena_type, Canvas canvas) : arena_type(arena_type), canvas(canvas)
5+
{
6+
}
7+
8+
tl::expected<Arena, std::string> Arena::create(ArenaType arena_type)
9+
{
10+
std::string arenaFile;
11+
switch (arena_type)
12+
{
13+
case Training:
14+
arenaFile = "./assets/arena/Bone.png";
15+
break;
16+
default:
17+
break;
18+
}
19+
auto imageResult = Image::fromFile(arenaFile);
20+
if (!imageResult.has_value()) {
21+
return tl::make_unexpected(imageResult.error());
22+
}
23+
auto image = imageResult.value();
24+
Canvas canvas = Canvas(image.get_width(), image.get_height());
25+
canvas.draw_image(image, SkRect::MakeXYWH(0, 0, image.get_width(), image.get_height()));
26+
canvas.save("./tests.png");
27+
return Arena(arena_type, canvas);
28+
}
29+
30+
Arena::~Arena()
31+
{
32+
33+
}
34+
35+
Arena Arena::clone()
36+
{
37+
return Arena(this->arena_type, this->canvas.clone());
38+
}
39+
tl::expected<nullptr_t, std::string> Arena::save(std::string fileName)
40+
{
41+
return this->canvas.save(fileName);
42+
}
43+
}

src/arena/Arena.h

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include "ArenaType.h"
2+
#include "../canvas/Canvas.h"
3+
#ifndef ARENA_H
4+
#define ARENA_H
5+
6+
#pragma once
7+
8+
using namespace canvas;
9+
10+
namespace arena {
11+
class Arena
12+
{
13+
public:
14+
static tl::expected<Arena, std::string> create(ArenaType arena_type);
15+
~Arena();
16+
Arena clone();
17+
tl::expected<nullptr_t, std::string> save(std::string fileName);
18+
private:
19+
Arena(ArenaType arena_type, Canvas canvas);
20+
ArenaType arena_type;
21+
Canvas canvas;
22+
};
23+
}
24+
25+
#endif

src/arena/ArenaType.h

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#ifndef ARENATYPE_H
2+
#define ARENATYPE_H
3+
4+
#pragma once
5+
6+
#include <string>
7+
8+
enum ArenaType
9+
{
10+
Training,
11+
};
12+
13+
#endif

src/Canvas.cpp src/canvas/Canvas.cpp

+30-3
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,47 @@
33
namespace canvas {
44
Canvas::Canvas(int width, int height)
55
{
6-
surface = SkSurface::MakeRasterN32Premul(width, height);
6+
this->surface = SkSurface::MakeRasterN32Premul(width, height);
77
//canvas = std::make_unique<SkCanvas>(surface->getCanvas());
88
}
99

10-
Canvas::~Canvas()
10+
Canvas Canvas::clone()
1111
{
12+
int width = this->get_width();
13+
int height = this->get_height();
14+
Canvas canvas = Canvas(width, width);
15+
canvas.draw_image(this->snapshot(), SkRect::MakeLTRB(0, 0, width, height));
16+
return canvas;
17+
}
1218

19+
Canvas::~Canvas()
20+
{
1321
}
1422

15-
void Canvas::drawImage(Image image, SkRect dstRect)
23+
void Canvas::draw_image(Image image, SkRect dstRect)
1624
{
1725
surface->getCanvas()->drawImageRect(image.getImage(), dstRect, SkSamplingOptions());
1826
}
1927

28+
Canvas Canvas::crop(const SkRect& cropRect)
29+
{
30+
Canvas croppedCanvas = Canvas(cropRect.fRight - cropRect.fLeft, cropRect.fTop - cropRect.fBottom);
31+
croppedCanvas.draw_image(this->surface->makeImageSnapshot(), cropRect);
32+
return croppedCanvas;
33+
}
34+
35+
Canvas Canvas::stretch(const SkPoint& stretchVector)
36+
{
37+
Canvas stretchedCanvas = Canvas(stretchVector.fX, stretchVector.fY);
38+
stretchedCanvas.draw_image(this->surface->makeImageSnapshot(), SkRect::MakeXYWH(0, 0, stretchVector.fX, stretchVector.fY));
39+
return stretchedCanvas;
40+
}
41+
42+
sk_sp<SkImage> Canvas::snapshot()
43+
{
44+
return this->surface->makeImageSnapshot();
45+
}
46+
2047
void Canvas::clear()
2148
{
2249
surface->getCanvas()->clear(SK_ColorTRANSPARENT);

src/Canvas.h src/canvas/Canvas.h

+12-2
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,20 @@ namespace canvas {
2323
{
2424
public:
2525
Canvas(int width, int height);
26+
Canvas clone();
2627
~Canvas();
27-
void drawImage(Image image, SkRect dstRect);
28-
void clear();
28+
int get_width() {
29+
return this->surface->width();
30+
}
31+
int get_height() {
32+
return this->surface->height();
33+
}
34+
void draw_image(Image image, SkRect dstRect);
35+
Canvas crop(const SkRect& cropRect);
36+
Canvas stretch(const SkPoint& stretchVector);
37+
sk_sp<SkImage> snapshot();
2938
tl::expected<nullptr_t, std::string> save(std::string fileName);
39+
void clear();
3040

3141
private:
3242
sk_sp<SkSurface> surface;

src/Image.cpp src/canvas/Image.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "Image.h"
22

33
namespace canvas {
4-
tl::expected<Image, std::string> Image::create(std::string fileName)
4+
tl::expected<Image, std::string> Image::fromFile(std::string fileName)
55
{
66
sk_sp<SkData> imageData = SkData::MakeFromFileName(fileName.c_str());
77
if (!imageData) {
@@ -12,10 +12,10 @@ namespace canvas {
1212
if (!image) {
1313
return tl::make_unexpected("Failed to create SkImage from encoded data!");
1414
}
15-
return Image(imageData, image);
15+
return Image(image);
1616
}
1717

18-
Image::Image(sk_sp<SkData> imageData, sk_sp<SkImage> image) : imageData(imageData), image(image)
18+
Image::Image(sk_sp<SkImage> image) : image(image)
1919
{
2020
}
2121

src/Image.h src/canvas/Image.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,19 @@ namespace canvas {
1212
class Image
1313
{
1414
public:
15-
static tl::expected<Image, std::string> create(std::string fileName);
15+
static tl::expected<Image, std::string> fromFile(std::string file);
16+
Image(sk_sp<SkImage> image);
1617
~Image();
1718
sk_sp<SkImage> getImage() {
1819
return image;
1920
}
20-
21+
int get_width() {
22+
return this->image->width();
23+
}
24+
int get_height() {
25+
return this->image->height();
26+
}
2127
private:
22-
Image(sk_sp<SkData> imageData, sk_sp<SkImage> image);
23-
sk_sp<SkData> imageData;
2428
sk_sp<SkImage> image;
2529
};
2630
}

src/main.cpp

+10-17
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
#include <iostream>
2-
#include "Canvas.h"
3-
4-
#include "core/SkBitmap.h"
5-
#include "core/SkCanvas.h"
6-
#include "core/SkData.h"
7-
#include "core/SkImage.h"
8-
#include "core/SkRect.h"
9-
#include "core/SkStream.h"
10-
#include "core/SkSurface.h"
11-
#include "core/SkTypes.h"
2+
#include "canvas/Canvas.h"
3+
#include "arena/Arena.h"
124

135
using namespace canvas;
6+
using namespace arena;
147

158
int main() {
16-
Canvas* canvas = new Canvas(200, 200);
17-
SkRect dstRect = SkRect::MakeXYWH(50, 50, 200, 200); // Left, top, width, height
18-
auto imageResult = Image::create("./assets/arena/Bone.png");
19-
if (imageResult.has_value()) {
20-
auto image = imageResult.value();
21-
canvas->drawImage(image, dstRect);
22-
canvas->save("./tests.png");
9+
auto arenaResult = Arena::create(ArenaType::Training);
10+
if (arenaResult.has_value()) {
11+
Arena arena = arenaResult.value();
12+
arena.save("./testArena.png");
13+
}
14+
else {
15+
std::cerr << "An error has occurred: " << arenaResult.error() << '\n';
2316
}
2417
return 0;
2518
}

xmake.lua

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ target("CR-Battle-Dataset-Generator")
66
set_kind("binary")
77
add_files("src/*.cpp")
88
add_headerfiles("src/*.h")
9+
add_files("src/*/*.cpp")
10+
add_headerfiles("src/*/*.h")
911
add_packages("skia")
1012
add_packages("tl_expected")
1113
--

0 commit comments

Comments
 (0)