source: 2016/27/SimoR/SimplePhysicsTest/SimplePhysicsTest/SimplePhysicsTest/SimplePhysicsTest.cs @ 7639

Revision 7639, 5.4 KB checked in by sieerinn, 3 years ago (diff)

Liikkuvat tasanteet toimii

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class SimplePlatformCharacter : SimplePhysics.Object
10{
11    public bool IsGrounded { get; private set; }
12
13    public SimplePlatformCharacter(double width, double height) : base(width, height)
14    {
15    }
16
17    public override void Update(Time time)
18    {
19        base.Update(time);
20        IsGrounded = Game.Collisions(this, new Vector(0, -2), true).Count > 0;
21    }
22}
23
24class MovingPlatform : SimplePhysics.Object
25{
26    private readonly Vector startPosition;
27
28    private Vector direction;
29
30    public MovingPlatform(Vector position, double width, double height) : base(width, height)
31    {
32        direction = new Vector(100, 0);
33        Position = startPosition = position;
34        IgnoresGravity = true;
35    }
36
37    public override void Update(Time time)
38    {
39        if (Vector.Distance(startPosition, Position) > 100)
40        {
41            direction = -direction;
42        }
43        Velocity = direction;
44        Game.UpdateMovingPlatform(this, time);
45        //base.Update(time);
46    }
47}
48
49public class SimplePhysicsTest : SimplePhysics.Game
50{
51    private SimplePlatformCharacter player;
52
53    public SimplePhysicsTest() : base(tileSize: 30)
54    {
55    }
56
57    public override void Begin()
58    {
59        Debug.SetLabelPosition(new Vector(0, Screen.Top - 50));
60        IsMouseVisible = true;
61
62        Gravity = new Vector(0, -600);
63
64        var tilemap = new SimplePhysics.TileMap("level1");
65        tilemap.SetTileMethod(Color.Black, CreateTile);
66        tilemap.SetTileMethod(Color.FromHexCode("C6723D"), CreateOneWayTile);
67        tilemap.SetTileMethod(Color.FromHexCode("00FFFF"), CreateIceTile);
68        tilemap.SetTileMethod(Color.FromHexCode("FFFF00"), CreateMovingPlatform);
69        tilemap.SetTileMethod(Color.FromHexCode("B70909"), CreateDangerousBlock);
70        tilemap.SetTileMethod(Color.Blue, CreatePlayer);
71        tilemap.SetTileMethod(Color.Red, CreateEnemy);
72        tilemap.SetTileMethod(Color.Red, CreateEnemy);
73        tilemap.Execute();
74
75        Camera.ZoomToLevel();
76
77        Keyboard.Listen(Key.Right, ButtonState.Down, Walk, null, player, 200.0);
78        Keyboard.Listen(Key.Left, ButtonState.Down, Walk, null, player, -200.0);
79        Keyboard.Listen(Key.Up, ButtonState.Down, Jump, null, player);
80        Keyboard.Listen(Key.R, ButtonState.Pressed, () => { ClearAll(); Begin(); }, "Lopeta peli");
81        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
82    }
83
84    #region Tile Methods
85
86    private void CreateTile(int x, int y)
87    {
88        var tile = new SimplePhysics.Object(TileSize, TileSize) { IsStatic = true };
89        tile.Color = Color.Green;
90        Add(tile);
91        SetTile(x, y, tile);
92    }
93
94    private void CreateIceTile(int x, int y)
95    {
96        var tile = new SimplePhysics.Object(TileSize, TileSize) { IsStatic = true };
97        tile.Color = Color.Cyan;
98        tile.Friction = 0.0;
99        Add(tile);
100        SetTile(x, y, tile);
101    }
102
103    private void CreateDangerousBlock(int x, int y)
104    {
105        var tile = new SimplePhysics.Object(TileSize, TileSize) { IsStatic = true };
106        tile.Color = Color.Red;
107        tile.Tag = "death";
108        Add(tile);
109        SetTile(x, y, tile);
110    }
111
112    private void CreateOneWayTile(int x, int y)
113    {
114        var tile = new SimplePhysics.Object(TileSize, TileSize) { IsStatic = true };
115        tile.Color = Color.Brown;
116        tile.OneWayPlatform = true;
117        Add(tile, -1);
118        SetTile(x, y, tile);
119    }
120
121    private void CreatePlayer(int x, int y)
122    {
123        player = new SimplePlatformCharacter(TileSize * 0.98, TileSize * 1.98);
124        player.Position = TileToWorldPosition(x, y);
125        player.Tag = "player";
126        player.Crushed += player.Destroy;
127        Add(player);
128
129        player.AddCollisionHandler("enemy", HitsEnemy);
130        player.AddCollisionHandler("death", (a, b) => player.Destroy());
131    }
132
133    private void CreateMovingPlatform(int x, int y)
134    {
135        var pos = TileToWorldPosition(x, y);
136        var platform = new MovingPlatform(pos, 3*TileSize, TileSize);
137        Add(platform);
138    }
139
140    private void CreateEnemy(int x, int y)
141    {
142        var enemy = new SimplePhysics.Object(TileSize * 0.99, TileSize * 0.99);
143        enemy.Position = TileToWorldPosition(x, y);
144        enemy.Tag = "enemy";
145        Add(enemy);
146    }
147
148    #endregion
149
150    private void Walk(SimplePhysics.Object obj, double speed)
151    {
152        player.Velocity = new Vector(speed, player.Velocity.Y);
153    }
154
155    private void Jump(SimplePlatformCharacter obj)
156    {
157        if (obj.IsGrounded)
158            player.Velocity = new Vector(player.Velocity.X, 500);
159    }
160
161    private void HitsEnemy(SimplePhysics.Object player, SimplePhysics.Object enemy)
162    {
163        //player.Destroy();
164        enemy.Destroy();
165    }
166
167    protected override void Paint(Canvas canvas)
168    {
169        Debug.DrawOnCanvas(canvas);
170        Debug.Rects.Clear();
171        base.Paint(canvas);
172    }
173
174    protected override void Update(Time time)
175    {
176        var mouseTile = WorldToTilePosition(Mouse.PositionOnWorld);
177        Debug.ShowValue("mouse", $"x: {mouseTile.X}, y: {mouseTile.Y}");
178        Debug.DrawTile(mouseTile);
179        base.Update(time);
180    }
181}
Note: See TracBrowser for help on using the repository browser.