source: 2011/24/Heksa/FysiikkaMagneetti/Peli.cs @ 2018

Revision 2018, 2.1 KB checked in by tojukarp, 8 years ago (diff)

Bug fix

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    PhysicsObject magneetti;
12    PhysicsObject rautapallo;
13
14    // Sähkövaraukset (coulombeja)
15    double MagneettiVaraus = -6.2;
16    double RautapalloVaraus = 0.1;
17
18    // Vakiot: tyhjiön permittiivisyys ja Coulombin lain kerroin
19    const double perm0 = 8.854e-12;
20    const double CoulombKerroin = 1 / ( 4 * Math.PI * perm0 );
21
22    public override void Begin()
23    {
24        TeeReunat();
25
26        magneetti = new PhysicsObject( 50, 50, Shape.Rectangle );
27        magneetti.Mass = Double.PositiveInfinity;
28        magneetti.X = -300;
29        magneetti.CanRotate = false;
30        magneetti.CollisionIgnoreGroup = 1;
31        Add( magneetti );
32
33        rautapallo = new PhysicsObject( 60, 60, Shape.Circle );
34        rautapallo.Color = Color.LightGray;
35        rautapallo.Mass = 500;
36        rautapallo.X = 300;
37        Add( rautapallo );
38
39        Mouse.ListenMovement( 0.01, SiirraMagneettia, null );
40    }
41
42    void TeeReunat()
43    {
44        PhysicsObject vasen = Level.CreateLeftBorder();
45        vasen.CollisionIgnoreGroup = 1;
46        PhysicsObject oikea = Level.CreateRightBorder();
47        oikea.CollisionIgnoreGroup = 1;
48        PhysicsObject yla = Level.CreateTopBorder();
49        yla.CollisionIgnoreGroup = 1;
50        PhysicsObject ala = Level.CreateBottomBorder();
51        ala.CollisionIgnoreGroup = 1;
52    }
53
54    void SiirraMagneettia( AnalogState siirto )
55    {
56        magneetti.Position += siirto.MouseMovement;
57    }
58       
59
60    protected override void Update( Time time )
61    {
62        Vector d = rautapallo.Position - magneetti.Position;
63
64        if ( d.Magnitude < rautapallo.Width )
65        {
66            rautapallo.Stop();
67            return;
68        }
69
70        double voima = CoulombKerroin * MagneettiVaraus * RautapalloVaraus / Math.Pow( d.Magnitude, 2 );
71        rautapallo.Push( voima * d.Normalize() );
72
73        base.Update(time);
74    }
75}
Note: See TracBrowser for help on using the repository browser.