401841f700
now using App and SFML's loop, but haven't properly set up data vs logic vs UI yet. added setuptimers() sortdata currently member var, should either make vec, or attach it to a different object
102 lines
2.4 KiB
C++
102 lines
2.4 KiB
C++
// for now juist CLI, print an arr, then print each it
|
|
#include <SFML/Graphics/Color.hpp>
|
|
#include <SFML/Graphics/Font.hpp>
|
|
#include <SFML/Graphics/RenderWindow.hpp>
|
|
#include <SFML/Graphics/Text.hpp>
|
|
#include <SFML/Window/Window.hpp>
|
|
#include <chrono>
|
|
#include <cstddef>
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <thread>
|
|
#include <vector>
|
|
|
|
#include <SFML/Window.hpp>
|
|
#include <SFML/Graphics.hpp>
|
|
|
|
#include "timer.hpp"
|
|
#include "sorters.hpp"
|
|
|
|
using namespace std::chrono;
|
|
using namespace std;
|
|
|
|
void displaynumbers(SortingData in_arr) {
|
|
for (size_t i = 0; i < in_arr.data.size(); ++i) {
|
|
printf("array:%d ", in_arr.data[i]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void stepbubblesort(vector<int> &data, size_t step) {
|
|
data[step%data.size()]++;
|
|
}
|
|
|
|
vector<int> dataprovider(){
|
|
return vector<int> {9,8,1,2,7,3,6,4,5};
|
|
}
|
|
|
|
void setuptimers(TimerManager &mytimermanager, SortingData &mysd){
|
|
|
|
unique_ptr<Timer> mytimer = make_unique<Timer>(
|
|
"sort1", 0,
|
|
[&mysd](Timer &t) { stepbubblesort(mysd.data, t.triggercounter); },
|
|
milliseconds(1000));
|
|
unique_ptr<Timer> mydisplaytimer = make_unique<Timer>("display", 0,
|
|
[&mysd](Timer &t){displaynumbers(mysd);},
|
|
milliseconds(1000));
|
|
mytimermanager.add_timer(move(mytimer));
|
|
mytimermanager.add_timer(move(mydisplaytimer));
|
|
}
|
|
|
|
struct App{
|
|
sf::RenderWindow mywindow;
|
|
sf::Font myfont;
|
|
sf::Text text;
|
|
TimerManager mytimermanager;
|
|
SortingData mysortdata;
|
|
|
|
sf::Font load_font(const string &filename) {
|
|
sf::Font font;
|
|
if (!font.openFromFile(filename)){
|
|
fprintf(stderr, "failed to load font");
|
|
std::exit(1);
|
|
}
|
|
return font;
|
|
}
|
|
|
|
App():mywindow(sf::VideoMode({800,600}), "mywindow"),
|
|
myfont(load_font("assets/NS-R.ttf")),
|
|
text(myfont),
|
|
mysortdata("arr1", dataprovider()) {
|
|
text.setFont(myfont);
|
|
text.setString("Hello world");
|
|
text.setCharacterSize(24);
|
|
text.setFillColor(sf::Color::Red);
|
|
|
|
setuptimers(mytimermanager, mysortdata);
|
|
|
|
}
|
|
|
|
void run(){
|
|
while (mywindow.isOpen()){
|
|
while (const optional event = mywindow.pollEvent()){
|
|
if (event->is<sf::Event::Closed>())
|
|
mywindow.close();
|
|
}
|
|
|
|
mywindow.clear(sf::Color::Black);
|
|
mywindow.draw(text);
|
|
mytimermanager.update_timers();
|
|
mywindow.display();
|
|
this_thread::sleep_for(milliseconds(1000));
|
|
}
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
App myapp;
|
|
myapp.run();
|
|
}
|