source: 2016/27/PaavoH/GoldbergMachineSimulator/GoldbergMachineSimulator/GoldbergMachineSimulator/GoldbergMachineSimulator.cs @ 10141

Revision 10141, 3.6 KB checked in by paharvol, 2 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class GoldbergMachineSimulator : PhysicsGame
10{
11    PhysicsObject bottle;
12   
13    bool paalla = false;
14
15    public override void Begin()
16    {
17        PhoneBackButton.Listen(ConfirmExit, null);
18        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
19
20        Gravity = new Vector(0.0, -800.0);
21
22        Bottle();
23
24        var plank = PhysicsObject.CreateStaticObject(300.0, 30);
25        plank.Y = -90;
26        plank.Color = Color.Violet;
27        Add(plank);
28
29        var plank2 = PhysicsObject.CreateStaticObject(300.0, 30);
30        plank2.Y = -40;
31        plank2.Angle = Angle.FromDegrees(45);
32        plank2.Color = Color.Violet;
33        Add(plank2);
34
35        Keyboard.Listen(Key.Space, ButtonState.Released, delegate { Bottle(); }, "Pelaaja liikkuu vasemmalle");
36        Mouse.ListenWheel(Scroll, "Rullaat!");
37        Mouse.Listen(MouseButton.Left,ButtonState.Down, MoveWithMouse, null);
38        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, delegate
39        {
40            GameObject b = GetObjectAt(Mouse.PositionOnWorld);
41            if (b != null && b is PhysicsObject)
42            {
43                if (GetObjectAt(Mouse.PositionOnWorld)?.Tag == "Bottle")
44                {
45                    bottle = (PhysicsObject)b;
46                    paalla = true;
47                    bottle.IgnoresPhysicsLogics = true;
48                }
49            }
50                   
51        }, null);
52        Mouse.Listen( MouseButton.Left, ButtonState.Up, delegate { paalla = false; if(bottle != null)bottle.IgnoresPhysicsLogics = false; bottle = null; }, null);
53
54        //Keyboard.Listen(Key.A, ButtonState.Pressed, irrota, null);
55    }
56
57    void irrota(PhysicsObject collidingObject, PhysicsObject otherObject)
58    {
59        bottle = bottle;
60        if(bottle != null)
61        {
62            SynchronousList<GameObject> lapset = bottle.Objects;
63            foreach(PhysicsObject a in lapset)
64            {
65                PhysicsObject b = a as PhysicsObject;
66                Vector pos = b.AbsolutePosition;
67                bottle.Remove(b);
68                DoNextUpdate(() => Add(b));
69                b.Position = pos;
70                b.IgnoresPhysicsLogics = false;
71                b.IgnoresCollisionResponse = false;
72
73            }
74        }
75    }
76
77    private void Scroll()
78    {
79        if(paalla)
80        {
81            double speed = 10;
82            bottle.Angle += Angle.FromDegrees(Mouse.WheelChange * speed);
83        }
84    }
85
86    //protected override void Update(Time time)
87    //{
88    //    if(Mouse.PositionOnScreen == bottle.Position)
89    //    {
90    //        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, MoveWithMouse, "");
91    //    }
92    //}
93
94    void Bottle()
95    {
96        //PhysicsStructure fullBottle
97
98        PhysicsObject bottle = new PhysicsObject(30.0, 70.0);
99        bottle.Color = Color.Violet;
100        bottle.Position = (new Vector (0, 0));
101        bottle.Mass = 5;
102        bottle.CollisionIgnoreGroup = 2;
103        Add(bottle);
104        bottle.Tag = "Bottle";
105
106        PhysicsObject cap = new PhysicsObject(10.0, 5.0);
107        cap.Color = Color.Red;
108        bottle.Add(cap);
109        cap.Position = new Vector(0, 0);
110        cap.Mass = 2;
111        cap.CollisionIgnoreGroup = 2;
112        AddCollisionHandler(cap, irrota);
113
114
115
116    }
117
118    void MoveWithMouse()
119    {
120        if (paalla)
121        {
122           
123            bottle.Position = Mouse.PositionOnWorld;
124        }
125    }
126}
Note: See TracBrowser for help on using the repository browser.