Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion include/Graphics/BartaSprite.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,14 @@ enum class SpriteType {
* color2 (rgba),
* color3 (rgba)
*/
TRIANGLE
TRIANGLE,
/*
x, y, z, // orgin of vector
dx, dy, dz, // delta of vector
thickness,
color(rgba)
*/
ARROW
};

class BartaSprite {
Expand Down
27 changes: 27 additions & 0 deletions include/Graphics/SpriteBuilder/ArrowSprite.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once
#include "../Color.h"
#include "../../Geometrics/Vector2f.h"

namespace Barta {
struct ArrowSprite {
public:
ArrowSprite(
Vector2f ogrin,
Vector2f value,
float thickness,
float capSize,
Color color
) noexcept:
ogrin(ogrin),
value(value),
thickness(thickness),
capSize(capSize),
color(color) {}

const Vector2f ogrin;
const Vector2f value;
const float thickness;
const float capSize;
const Color color;
};
}
3 changes: 3 additions & 0 deletions include/Graphics/SpriteBuilder/SpriteMerger.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "SpriteBuilder.h"
#include "StringSprite.h"
#include "TriangleSprite.h"
#include "ArrowSprite.h"

namespace Barta {
class SpriteMerger {
Expand All @@ -20,6 +21,8 @@ class SpriteMerger {

SpriteMerger* addTriangle(const TriangleSprite& triangleSprite);

SpriteMerger* addArrow(const ArrowSprite& arrowSprite);

BartaSprite merge(bool reloadCache);

protected:
Expand Down
5 changes: 5 additions & 0 deletions include/pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,8 @@

// C++ 20+
#include <concepts>


#ifndef M_PI
#define M_PI 3.141592f
#endif
2 changes: 1 addition & 1 deletion lib/Geometrics/Vector2f.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include <Geometrics/Vector2f.h>
#include <pch.h>
#include <strings.h>
#include <string.h>

Barta::Vector2f::Vector2f(
const Vector2f& second
Expand Down
52 changes: 52 additions & 0 deletions lib/Graphics/SFML_GraphicsBridge.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <Graphics/SFML_GraphicsBridge.h>
#include <Geometrics/SFML_Transformable.h>
#include <Graphics/SFML_Bridge/SpriteResourceMatcher.h>
#include <Geometrics/Vector2f.h>

Barta::SFML_GraphicsBridge::SFML_GraphicsBridge(
std::unique_ptr<ResourceContainerInterface> resourceContainer,
Expand Down Expand Up @@ -239,6 +240,57 @@ void Barta::SFML_GraphicsBridge::handleCustomResource(

dataOffset += 3 * 3 + 4 * 3;
}

if (type == SpriteType::ARROW) {

float posarr[2] = {data[dataOffset],data[dataOffset+1]};
float valuearr[2] = {data[dataOffset+2],data[dataOffset+3]};
float thikness = data[dataOffset+4];
float capSize = data[dataOffset+5];

Vector2f x={posarr[0],posarr[1]};
Vector2f dx={valuearr[0],valuearr[1]};
//dx=dx.rotated(1.0);

Vector2f dxNorm=dx.normalised();
Vector2f n = dx.perpendicular().normalised();

//coords line
Vector2f x1=x-thikness*n*0.5;
Vector2f x2=x+thikness*n*0.5;
Vector2f x1v=x1+dx-capSize*dxNorm;//.rotated(0.2);
Vector2f x2v=x2+dx-capSize*dxNorm;//.rotated(0.2);
//
Vector2f C=x+dx;
Vector2f A=x-capSize*n+dx-capSize*dxNorm;
Vector2f B=x+capSize*n+dx-capSize*dxNorm;

sf::Color c=sf::Color(
static_cast<sf::Uint8>(data[dataOffset + 6]),
static_cast<sf::Uint8>(data[dataOffset + 7]),
static_cast<sf::Uint8>(data[dataOffset + 8]),
static_cast<sf::Uint8>(data[dataOffset + 9])
);

auto triangle = sf::VertexArray(sf::PrimitiveType::Triangles, 9);

triangle[0]=sf::Vertex(transform.transformPoint(x1.x,x1.y),c);
triangle[1]=sf::Vertex(transform.transformPoint(x2.x,x2.y),c);
triangle[2]=sf::Vertex(transform.transformPoint(x1v.x,x1v.y),c);

triangle[3]=sf::Vertex(transform.transformPoint(x1v.x,x1v.y),c);
triangle[4]=sf::Vertex(transform.transformPoint(x2.x,x2.y),c);
triangle[5]=sf::Vertex(transform.transformPoint(x2v.x,x2v.y),c);

triangle[6]=sf::Vertex(transform.transformPoint(A.x,A.y),c);
triangle[7]=sf::Vertex(transform.transformPoint(B.x,B.y),c);
triangle[8]=sf::Vertex(transform.transformPoint(C.x,C.y),c);

this->sf_window->draw(triangle);

dataOffset += 2+2+1+1+4;
}

}
}

Expand Down
23 changes: 23 additions & 0 deletions lib/Graphics/SpriteBuilder/SpriteMerger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,29 @@ Barta::SpriteMerger* Barta::SpriteMerger::addTriangle(
return this;
}

Barta::SpriteMerger* Barta::SpriteMerger::addArrow(
const ArrowSprite& arrowSprite
) {
this->types.push_back(SpriteType::ARROW);

for (const auto& vector: {arrowSprite.ogrin,arrowSprite.value}) {
this->data.push_back(vector.getX());
this->data.push_back(vector.getY());
}

this->data.push_back(arrowSprite.thickness);
this->data.push_back(arrowSprite.capSize);

for (const auto& color: {arrowSprite.color}) {
this->data.push_back(color.r);
this->data.push_back(color.g);
this->data.push_back(color.b);
this->data.push_back(color.a);
}

return this;
}

Barta::BartaSprite Barta::SpriteMerger::merge(
bool reloadCache
) {
Expand Down
3 changes: 3 additions & 0 deletions lib/Objects/Rigid/RigidObjectRepository.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Barta::RigidObjectInterface* Barta::RigidObjectRepository::addNewAABB(
spriteBuilder.setAllColors(color);
auto merger = SpriteMerger();
merger.addRectangleWithColors(spriteBuilder.build());
// merger.add
auto aabb = new RigidObject(
{
Barta::SFML_GraphicsBridge::createNewTransformableInstance(),
Expand All @@ -52,6 +53,8 @@ Barta::RigidObjectInterface* Barta::RigidObjectRepository::addNewCircle(
) {
auto merger = SpriteMerger();
merger.addCircleSprite(CircleSprite(Circle(radius, Vector2f(radius, radius)), color));
merger.addArrow(ArrowSprite(Vector2f(radius, radius),Vector2f(radius*0.5f,radius*3.5f),radius*0.2f,radius*0.5,
Color(255,255,255)));
auto circle = new RigidObject(
{
Barta::SFML_GraphicsBridge::createNewTransformableInstance(),
Expand Down