浏览代码

correctly position some things

feature/replace-renderer
Martin Dørum 3 年前
父节点
当前提交
33eda68f12

+ 1
- 1
core.mod/src/entities/PlayerEntity.h 查看文件

Swan::Animation(ctx.world.getSprite("core::entity/player-still"), 0.8), Swan::Animation(ctx.world.getSprite("core::entity/player-still"), 0.8),
Swan::Animation( Swan::Animation(
ctx.world.getSprite("core::entity/player-running"), ctx.world.getSprite("core::entity/player-running"),
1, Cygnet::Mat3gf{}.scale({-1, 1})),
1, Cygnet::Mat3gf{}.scale({-1, 1}).translate({1, 0})),
Swan::Animation(ctx.world.getSprite("core::entity/player-running"), 1), Swan::Animation(ctx.world.getSprite("core::entity/player-running"), 1),
} {} } {}



+ 8
- 0
include/swan-common/Matrix3.h 查看文件

return *this; return *this;
} }


constexpr Vec translation() {
return {at(2, 0), at(2, 1)};
}

constexpr Matrix3<T> &scale(Vec vec) { constexpr Matrix3<T> &scale(Vec vec) {
at(0, 0) *= vec.x; at(0, 0) *= vec.x;
at(1, 1) *= vec.y; at(1, 1) *= vec.y;
return *this; return *this;
} }


constexpr Vec scale() {
return {at(0, 0), at(1, 1)};
}

constexpr Matrix3<T> &rotate(T rads) { constexpr Matrix3<T> &rotate(T rads) {
T s = std::sin(rads); T s = std::sin(rads);
T c = std::cos(rads); T c = std::cos(rads);

+ 3
- 2
libcygnet/include/cygnet/Renderer.h 查看文件

struct RenderCamera { struct RenderCamera {
SwanCommon::Vec2 pos; SwanCommon::Vec2 pos;
SwanCommon::Vec2i size; SwanCommon::Vec2i size;
float zoom = 0;
float zoom = 1;
}; };


class Renderer { class Renderer {
} }


inline void Renderer::drawSpriteFlipped(RenderSprite sprite, SwanCommon::Vec2 pos, int frame) { inline void Renderer::drawSpriteFlipped(RenderSprite sprite, SwanCommon::Vec2 pos, int frame) {
drawSprites_.push_back({Mat3gf{}.translate(pos).scale({ -1, 1 }), frame, sprite});
// TODO: Translate X by sprite.scale.x?
drawSprites_.push_back({Mat3gf{}.translate(pos).scale({-1, 1}), frame, sprite});
} }


} }

+ 1
- 1
libswan/src/Animation.cc 查看文件

} }


void Animation::draw(const Vec2 &pos, Cygnet::Renderer &rnd) { void Animation::draw(const Vec2 &pos, Cygnet::Renderer &rnd) {
rnd.drawSprite(sprite_, mat_, frame_);
rnd.drawSprite(sprite_, Cygnet::Mat3gf(mat_).translate(pos), frame_);
} }


void Animation::reset() { void Animation::reset() {

+ 2
- 1
libswan/src/World.cc 查看文件



void World::draw(Cygnet::Renderer &rnd) { void World::draw(Cygnet::Renderer &rnd) {
ZoneScopedN("World draw"); ZoneScopedN("World draw");
game_->cam_.pos = player_->pos; // - (win.getSize() / 2) + (player_->size / 2); TODO
planes_[currentPlane_]->draw(rnd); planes_[currentPlane_]->draw(rnd);
} }


ZoneScopedN("World update"); ZoneScopedN("World update");
for (auto &plane: planes_) for (auto &plane: planes_)
plane->update(dt); plane->update(dt);

game_->cam_.pos = player_->pos + Vec2{0.5, 0.5}; // - (win.getSize() / 2) + (player_->size / 2); TODO
} }


void World::tick(float dt) { void World::tick(float dt) {

+ 3
- 3
src/cygnet-test.cc 查看文件

y += 1 * dt; y += 1 * dt;
} }


rnd.drawChunk(chunk, { 0, 0 });
rnd.drawChunk(chunk, {0, 0});


rnd.drawSprite(playerSprite, { x, y }, (int)animAcc % 2);
cam.pos = { x + 0.5f, y + 0.5f };
rnd.drawSprite(playerSprite, {x, y}, (int)animAcc % 2);
cam.pos = {x + 0.5f, y + 0.5f};


win.clear(); win.clear();
rnd.draw(cam); rnd.draw(cam);

正在加载...
取消
保存