/
drawtrains.go
77 lines (67 loc) · 2.21 KB
/
drawtrains.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
import (
"image/color"
"math"
. "github.com/felipe-vieira/multithreadinggo/deadlockstrain/domain"
"github.com/hajimehoshi/ebiten/v2"
)
var (
colours = [4]color.RGBA{
{233, 33, 40, 255},
{78, 151, 210, 255},
{251, 170, 26, 255},
{11, 132, 54, 255},
}
white = color.RGBA{R: 185, G: 185, B: 185, A: 255}
)
func DrawIntersections(screen *ebiten.Image) {
drawIntersection(screen, intersections[0], 145, 145)
drawIntersection(screen, intersections[1], 175, 145)
drawIntersection(screen, intersections[2], 175, 175)
drawIntersection(screen, intersections[3], 145, 175)
}
func DrawTracks(screen *ebiten.Image) {
for i := 0; i < 300; i++ {
screen.Set(10+i, 135, white)
screen.Set(185, 10+i, white)
screen.Set(310-i, 185, white)
screen.Set(135, 310-i, white)
}
}
func DrawTrains(screen *ebiten.Image) {
drawXTrain(screen, 0, 1, 10, 135)
drawYTrain(screen, 1, 1, 10, 185)
drawXTrain(screen, 2, -1, 310, 185)
drawYTrain(screen, 3, -1, 310, 135)
}
func drawIntersection(screen *ebiten.Image, intersection *Intersection, x int, y int) {
c := white
if intersection.LockedBy >= 0 {
c = colours[intersection.LockedBy]
}
screen.Set(x-1, y, c)
screen.Set(x, y-1, c)
screen.Set(x, y, c)
screen.Set(x+1, y, c)
screen.Set(x, y+1, c)
}
func drawXTrain(screen *ebiten.Image, id int, dir int, start int, yPos int) {
//log.Printf("Draw X %d %d %d\n", id, trains[id].Front, trains[id].TrainLength)
s := start + (dir * (trains[id].Front - trains[id].TrainLength))
e := start + (dir * trains[id].Front)
for i := math.Min(float64(s), float64(e)); i <= math.Max(float64(s), float64(e)); i++ {
screen.Set(int(i)-dir, yPos-1, colours[id])
screen.Set(int(i), yPos, colours[id])
screen.Set(int(i)-dir, yPos+1, colours[id])
}
}
func drawYTrain(screen *ebiten.Image, id int, dir int, start int, xPos int) {
//log.Printf("Draw Y %d %d %d\n", id, trains[id].Front, trains[id].TrainLength)
s := start + (dir * (trains[id].Front - trains[id].TrainLength))
e := start + (dir * trains[id].Front)
for i := math.Min(float64(s), float64(e)); i <= math.Max(float64(s), float64(e)); i++ {
screen.Set(xPos-1, int(i)-dir, colours[id])
screen.Set(xPos, int(i), colours[id])
screen.Set(xPos+1, int(i)-dir, colours[id])
}
}