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

Revision 9372, 3.8 KB checked in by mianhayr, 4 years ago (diff)

toimiva hidastuminen toteutettu rumasti

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; Level.Background.Color = Color.Black;
16
17        sqs.Add(new Square(1, 400, 10));
18        //crc = CreateCircle(rad, pts);
19    }   
20
21    // r = radius, n = number of pts
22    //List<Vector> CreateCircle(double r, double n)
23    //{
24    //    List<Vector> crc = new List<Vector>();
25    //    for (int i = 0; i <= n; i++)
26    //        crc.Add(new Vector(Math.Sin(i) * r, Math.Cos(i) * r));
27    //    return crc;
28    //}
29
30    void Rotate(List<Vector> vs, bool reverse = false)
31    {
32        double d = Time.SinceLastUpdate.TotalSeconds;
33        if (reverse) d = -d;
34        for (int i = 0; i < vs.Count; i++)
35            vs[i] = new Vector(vs[i].X * Math.Cos(-d) - vs[i].Y * Math.Sin(-d),
36                               vs[i].X * Math.Sin(-d) + vs[i].Y * Math.Cos(-d));
37    }
38
39    protected override void Paint(Canvas c)
40    {
41        c.BrushColor = Color.Red;
42
43        // loops through all squares to be drawn
44        for (int i = 0; i < sqs.Count; i++)
45        {
46            sqs[i].magc = (sqs[i].maxmag-sqs[i].mag)/(Math.Sign(sqs[i].magc)*30); // calculate magnitude change
47            if (sqs[i].magc < -3) sqs[i].magc = -3; if (sqs[i].magc > 3) sqs[i].magc = 3;
48            sqs[i].mag += sqs[i].magc; // reduce current magnitude, todo: clean
49            for (int j = 0; j < sqs[i].Count; j++)
50                c.DrawLine(sqs[i][j % sqs[i].Count] * sqs[i].mag,
51                           sqs[i][(j + sqs[i].Count / 4) % sqs[i].Count] * sqs[i].mag);
52                //sq[i] = /*sq[i] * sq.mag;*/Vector.FromLengthAndAngle(sq[i].Magnitude * sq.mag, sq[i].Angle);
53                //sq[i] += new Vector(1, 1);
54
55            if (sqs[i].mag < sqs[i].minmag)
56            {
57                if (sqs[i].n == 0) Exit(); // minimum number of pts reached
58                sqs[i].magc = -sqs[i].magc;   // reverse squeeze
59                sqs.Add(new Square(sqs[i].minmag, sqs[i].maxmag, sqs[i].n-1));
60                sqs.Remove(sqs[i]);
61            }
62            else if (sqs[i].mag > sqs[i].maxmag-5) // todo: replace offset const
63                sqs[i].magc = -sqs[i].magc; // reverse squeeze
64        }
65
66
67        // checks if squeeze direction should be reversed
68        // merging this into the above loop will fuck everything up
69        // also tries to create new squares
70        //for (int i = 0; i < sqs.Count; i++)
71           
72
73        //c.BrushColor = Color.Blue;
74
75        ////draws and squeezes the circle
76        //for (int i = 0; i < crc.Count; i++)
77        //{
78        //    c.DrawLine(crc[i % crc.Count], crc[(i + 2) % crc.Count]);
79        //    crc[i] = new Vector(Math.Sin(i) * rad, Math.Cos(i) * rad);
80        //    if (rad < minrad || rad > maxrad) radc = -radc;
81        //    rad -= radc;
82        //}
83
84        foreach (Square sq in sqs) Rotate(sq); //Rotate(crc, true);
85
86        base.Paint(c);
87    }
88}
89
90class Square : List<Vector>
91{
92    public double n, mag, minmag , maxmag, magc = 3, lim;
93
94    // min and max magnitude, d = number of pts/side
95    public Square(double min, double max, double d)
96    {
97        n = d; mag = minmag = min; maxmag = max; lim = 2/(d+1);
98        for (double i = -1; i < 1; i += lim) Add(new Vector(-1, i));
99        for (double i = -1; i < 1; i += lim) Add(new Vector(i, 1));
100        for (double i = 1; i > -1; i -= lim) Add(new Vector(1, i));
101        for (double i = 1; i > -1; i -= lim) Add(new Vector(i, -1));       
102    }
103}
Note: See TracBrowser for help on using the repository browser.