source: 2017/30/MikkoH/Sq/Sq/Sq/Sq.cs @ 9308

Revision 9308, 3.6 KB checked in by mianhayr, 3 years ago (diff)

squaari spinnaa ja squeezaa täysin oikein ebin

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