1 | using System; |
---|
2 | using System.Collections.Generic; |
---|
3 | using Jypeli; |
---|
4 | |
---|
5 | public class Sq : PhysicsGame |
---|
6 | { |
---|
7 | //List<Vector> ps, crc; |
---|
8 | //int initsqmag = 50, initsqdist = 2; //killSwitch = 1; |
---|
9 | //double rad = 50, radc = 0.01; |
---|
10 | |
---|
11 | List<Square> sqs = new List<Square>(); |
---|
12 | |
---|
13 | public override void Begin() |
---|
14 | { |
---|
15 | Level.Width = Level.Height = Window.Width = Window.Height = 800; |
---|
16 | Mouse.IsCursorVisible = true; |
---|
17 | Level.Background.Color = Color.Black; |
---|
18 | |
---|
19 | sqs.Add(new Square(100, 5)); |
---|
20 | //crc = CreateCircle(rad, pts); |
---|
21 | } |
---|
22 | |
---|
23 | // r = radius, n = number of pts |
---|
24 | List<Vector> CreateCircle(double r, double n) |
---|
25 | { |
---|
26 | List<Vector> crc = new List<Vector>(); |
---|
27 | for (int i = 0; i <= n; i++) |
---|
28 | crc.Add(new Vector(Math.Sin(i) * r, Math.Cos(i) * r)); |
---|
29 | return crc; |
---|
30 | } |
---|
31 | |
---|
32 | void Rotate(List<Vector> vs, bool reverse = false) |
---|
33 | { |
---|
34 | double d = Time.SinceLastUpdate.TotalSeconds; |
---|
35 | if (reverse) d = -d; |
---|
36 | for (int i = 0; i < vs.Count; i++) |
---|
37 | vs[i] = new Vector(vs[i].X * Math.Cos(-d) - vs[i].Y * Math.Sin(-d), |
---|
38 | vs[i].X * Math.Sin(-d) + vs[i].Y * Math.Cos(-d)); |
---|
39 | } |
---|
40 | |
---|
41 | protected override void Paint(Canvas c) |
---|
42 | { |
---|
43 | c.BrushColor = Color.Red; |
---|
44 | |
---|
45 | // checks if squeeze direction should be reversed |
---|
46 | // merging this into the above loop will fuck everything up |
---|
47 | // also tries to create new squares |
---|
48 | for (int i = 0; i < sqs.Count; i++) |
---|
49 | { |
---|
50 | for (int j = 0; j < sqs[i].Count; j++) |
---|
51 | if (sqs[i][j].Magnitude < sqs[i].minmag) |
---|
52 | { |
---|
53 | Square newsq = new Square(sqs[i].mag-1, sqs[i].dist+1); |
---|
54 | //newsq.mag = 10; |
---|
55 | sqs.Add(newsq); |
---|
56 | sqs.Remove(sqs[i]); |
---|
57 | //sqs[i].magc = -sqs[i].magc; |
---|
58 | break; |
---|
59 | } |
---|
60 | else if (sqs[i][j].Magnitude > sqs[i].maxmag) |
---|
61 | { |
---|
62 | sqs[i].magc = -sqs[i].magc; |
---|
63 | break; |
---|
64 | } |
---|
65 | } |
---|
66 | |
---|
67 | // draws and squeezes the square |
---|
68 | foreach (Square sq in sqs) |
---|
69 | for (int i = 0; i < sq.Count; i++) |
---|
70 | { |
---|
71 | c.DrawLine(sq[i % sq.Count], sq[(i + sq.Count / 4) % sq.Count]); |
---|
72 | sq[i] = Vector.FromLengthAndAngle(sq[i].Magnitude + sq.magc, sq[i].Angle); |
---|
73 | } |
---|
74 | |
---|
75 | c.BrushColor = Color.Blue; |
---|
76 | |
---|
77 | // draws and squeezes the circle |
---|
78 | //for (int i = 0; i < crc.Count; i++) |
---|
79 | //{ |
---|
80 | // c.DrawLine(crc[i % crc.Count], crc[(i + 2) % crc.Count]); |
---|
81 | // crc[i] = new Vector(Math.Sin(i) * rad, Math.Cos(i) * rad); |
---|
82 | // if (rad < minrad || rad > maxrad) radc = -radc; |
---|
83 | // rad -= radc; |
---|
84 | //} |
---|
85 | |
---|
86 | //foreach (Square sq in sqs) Rotate(sq);/* Rotate(crc, true);*/ |
---|
87 | |
---|
88 | base.Paint(c); |
---|
89 | } |
---|
90 | } |
---|
91 | |
---|
92 | class Square : List<Vector> |
---|
93 | { |
---|
94 | public double dist = 5, mag = 100, minmag = 5, maxmag = 300, magc = 2; |
---|
95 | |
---|
96 | public Square(double s, double d) |
---|
97 | { |
---|
98 | for (double i = -s; i <= s; i += d) Add(new Vector(-s, i)); |
---|
99 | for (double i = -s; i <= s; i += d) Add(new Vector(i, s)); |
---|
100 | for (double i = s; i >= -s; i -= d) Add(new Vector(s, i)); |
---|
101 | for (double i = s; i >= -s; i -= d) Add(new Vector(i, -s)); |
---|
102 | dist = d; maxmag = mag * 5; |
---|
103 | |
---|
104 | } |
---|
105 | } |
---|