add FLower, Order and PriorityQueue classes
This commit is contained in:
parent
9f651765a3
commit
5369e2c57c
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"python.pythonPath": "/usr/bin/python3.6"
|
"python.pythonPath": "/usr/local/bin/python3"
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
25
magazine/static/magazine/flower.js
Normal file
25
magazine/static/magazine/flower.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
class Flower {
|
||||||
|
constructor(type) {
|
||||||
|
this.type = type;
|
||||||
|
this.maturity = 0;
|
||||||
|
this.maxMaturity;
|
||||||
|
this.grown = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
grow() {
|
||||||
|
if(!this.isReady()) {
|
||||||
|
this.maturity++;
|
||||||
|
if(this.grown == false && this.maturity == this.maxMaturity) {
|
||||||
|
this.grown == true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isReady() {
|
||||||
|
return this.grown;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMaxMaturity(maxMaturity) {
|
||||||
|
this.maxMaturity = maxMaturity;
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,8 @@ class Forklift {
|
|||||||
this.direction = createVector(0, 0);
|
this.direction = createVector(0, 0);
|
||||||
this.end = false;
|
this.end = false;
|
||||||
this.currentSection = 0;
|
this.currentSection = 0;
|
||||||
|
this.cargo = null;
|
||||||
|
this.queue = new PriorityQueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
draw() {
|
draw() {
|
||||||
@ -28,8 +30,12 @@ class Forklift {
|
|||||||
if (this.targetId < this.path.length) {
|
if (this.targetId < this.path.length) {
|
||||||
this.currentTarget = this.path[this.targetId];
|
this.currentTarget = this.path[this.targetId];
|
||||||
} else {
|
} else {
|
||||||
|
// Final destination reached
|
||||||
|
magazineState[this.currentTarget].push(this.cargo);
|
||||||
|
this.removeCargo();
|
||||||
this.end = true;
|
this.end = true;
|
||||||
this.targetId = 0;
|
this.targetId = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +62,14 @@ class Forklift {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setCargo(cargo) {
|
||||||
|
this.cargo = cargo;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeCargo() {
|
||||||
|
this.cargo = null;
|
||||||
|
}
|
||||||
|
|
||||||
sub(target, pos) {
|
sub(target, pos) {
|
||||||
return createVector(target.x - pos.x, target.y - pos.y);
|
return createVector(target.x - pos.x, target.y - pos.y);
|
||||||
}
|
}
|
||||||
|
25
magazine/static/magazine/order.js
Normal file
25
magazine/static/magazine/order.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
class Order {
|
||||||
|
|
||||||
|
constructor(from, what, to, message){
|
||||||
|
this.from = from;
|
||||||
|
this.what = what;
|
||||||
|
this.to = to;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
getFrom() {
|
||||||
|
return this.from;
|
||||||
|
}
|
||||||
|
|
||||||
|
getWhat() {
|
||||||
|
return this.what;
|
||||||
|
}
|
||||||
|
|
||||||
|
getTo() {
|
||||||
|
return this.to;
|
||||||
|
}
|
||||||
|
|
||||||
|
getMessage() {
|
||||||
|
console.log(this.message);
|
||||||
|
}
|
||||||
|
}
|
37
magazine/static/magazine/priorityQueue.js
Normal file
37
magazine/static/magazine/priorityQueue.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
class PriorityQueue {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.collection = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
enqueue(element) {
|
||||||
|
if(this.collection.isEmpty()) {
|
||||||
|
this.collection.push(element);
|
||||||
|
}else {
|
||||||
|
let added = false;
|
||||||
|
for(var i = 0; i < this.collection.length; i++) {
|
||||||
|
if(element[1] < this.collection[i][1]) {
|
||||||
|
this.collection.splice(i,0,element);
|
||||||
|
added = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!added) {
|
||||||
|
this.collection.push(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dequeue() {
|
||||||
|
let value = this.collection.shift();
|
||||||
|
return value[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
size() {
|
||||||
|
return this.collection.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
isEmpty() {
|
||||||
|
return (this.collection.length == 0);
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ let roads;
|
|||||||
let packageClaim;
|
let packageClaim;
|
||||||
let going = false;
|
let going = false;
|
||||||
let forklift;
|
let forklift;
|
||||||
|
let magazineState = { 1: [], 2: [], 3: [], 4: [], 5: [], 6: [] };
|
||||||
|
|
||||||
// This runs once at start
|
// This runs once at start
|
||||||
function setup() {
|
function setup() {
|
||||||
@ -18,8 +19,10 @@ function setup() {
|
|||||||
sepalLength = select('#sepalLength');
|
sepalLength = select('#sepalLength');
|
||||||
petalWidth = select('#petalWidth');
|
petalWidth = select('#petalWidth');
|
||||||
petalLength = select('#petalLength');
|
petalLength = select('#petalLength');
|
||||||
|
|
||||||
// Create a forklift instance
|
// Create a forklift instance
|
||||||
forklift = new Forklift(sections[0].x, sections[0].y);
|
forklift = new Forklift(sections[0].x, sections[0].y);
|
||||||
|
setInterval(ageFlowers, 5000)
|
||||||
}
|
}
|
||||||
|
|
||||||
// This runs every frame
|
// This runs every frame
|
||||||
@ -77,6 +80,7 @@ function getIrisType() {
|
|||||||
petalLength: pl,
|
petalLength: pl,
|
||||||
};
|
};
|
||||||
httpPost(serverUrl + '/classify', data, response => {
|
httpPost(serverUrl + '/classify', data, response => {
|
||||||
|
forklift.setCargo(new Flower(response))
|
||||||
deliver(response);
|
deliver(response);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -147,3 +151,26 @@ function magazineToGraph() {
|
|||||||
}
|
}
|
||||||
return graph;
|
return graph;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ageFlowers() {
|
||||||
|
for (let key of Object.keys(magazineState)) {
|
||||||
|
for (let flower of magazineState[key]) {
|
||||||
|
flower.grow();
|
||||||
|
if(flower.isReady()) {
|
||||||
|
let order;
|
||||||
|
let priority;
|
||||||
|
if(int(key) == 0) {
|
||||||
|
order = new Order(0, flower, int(flower), "Delivering new flower");
|
||||||
|
priority = 1;
|
||||||
|
} else if(int(key) > 3) {
|
||||||
|
order = new Order(int(key), flower, 0, "Fully grown flower ready");
|
||||||
|
priority = 3;
|
||||||
|
} else {
|
||||||
|
order = new Order(int(key), flower, (int(key) + 3), "Moving grown flower seedling");
|
||||||
|
priority = 2;
|
||||||
|
}
|
||||||
|
forklift.queue.enqueue([order, priority]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,7 +4,9 @@
|
|||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/addons/p5.dom.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/addons/p5.dom.min.js"></script>
|
||||||
<script src="{% static 'magazine/forklift.js' %}"></script>
|
<script src="{% static 'magazine/forklift.js' %}"></script>
|
||||||
|
<script src="{% static 'magazine/flower.js' %}"></script>
|
||||||
<script src="{% static 'magazine/sketch.js' %}"></script>
|
<script src="{% static 'magazine/sketch.js' %}"></script>
|
||||||
|
<script src="{% static 'magazine/priorityQueue.js' %}"></script>
|
||||||
<link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
@ -41,13 +43,13 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="package">
|
<div class="package">
|
||||||
<h3 style="margin-top: 0;">Package description</h1>
|
<h3 style="margin-top: 0;">Package description</h1>
|
||||||
<label for="width">Sepal Width</label>
|
<label >Sepal Width</label>
|
||||||
<input type="number" id="sepalWidth">
|
<input type="number" id="sepalWidth">
|
||||||
<label for="topWidth">Sepal Length</label>
|
<label >Sepal Length</label>
|
||||||
<input type="number" id="sepalLength">
|
<input type="number" id="sepalLength">
|
||||||
<label for="botWidth">Petal Width</label>
|
<label >Petal Width</label>
|
||||||
<input type="number" id="petalWidth">
|
<input type="number" id="petalWidth">
|
||||||
<label for="height">Petal Length</label>
|
<label >Petal Length</label>
|
||||||
<input type="number" id="petalLength">
|
<input type="number" id="petalLength">
|
||||||
<button id="button">Send Package</button>
|
<button id="button">Send Package</button>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user