source: 2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore/VenienteFragore.cs @ 7734

Revision 7734, 3.7 KB checked in by sieerinn, 3 years ago (diff)

Liikkuvia tasanteita

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class VenienteFragore : SimplePhysics.Game
10{
11    private delegate void ObjectMethod(Vector position, double width, double height, Dictionary<string, string> properties);
12    private Dictionary<string, ObjectMethod> objectMethods;
13
14    public VenienteFragore() : base(tileSize: 50)
15    {
16    }
17
18    public override void Begin()
19    {
20        objectMethods = new Dictionary<string, ObjectMethod>();
21        objectMethods.Add("ball", TestBall);
22        objectMethods.Add("player", CreatePlayer);
23        objectMethods.Add("moving", CreatePlayer);
24
25        var tileMap = TiledTileMap.FromLevelAsset("thehub");
26        tileMap.SetTileMethod("Tile Layer 1", TileMethod);
27        tileMap.SetObjectMethod("Object Layer 1", CreateObject);
28        tileMap.Execute();
29
30        Gravity = new Vector(0, -800);
31
32        Camera.ZoomToAllObjects();
33
34        Level.Background.Color = Color.AshGray;
35
36        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
37    }
38
39    private void CreateObject(Vector position, double width, double height, Angle angle, Shape shape, string name, Dictionary<string, string> properties)
40    {
41        objectMethods[name](position, width, height, properties);
42    }
43
44    void TestBall(Vector position, double width, double height, Dictionary<string, string> properties)
45    {
46        var testObject = new SimplePhysics.Object(TileSize * 0.99, TileSize * 0.99);
47        testObject.Position = position;
48        testObject.Color = Color.DarkGreen;
49        testObject.Shape = Shape.Circle;
50        testObject.RestitutionX = 0.5;
51        testObject.RestitutionY = 0.5;
52        testObject.CollisionIgnoreGroup = 1;
53        Add(testObject);
54    }
55
56    void CreatePlayer(Vector position, double width, double height, Dictionary<string, string> properties)
57    {
58       
59    }
60
61    private void CreateMovingPlatform(Vector position, double width, double height, Dictionary<string, string> properties)
62    {
63        var dirX = double.Parse(properties["directionx"]);
64        var dirY = double.Parse(properties["directiony"]);
65        var distance = double.Parse(properties["distance"]);
66        var platform = new MovingPlatform(position, new Vector(dirX, dirY), distance, width, height);
67        Add(platform);
68    }
69
70    private void TileMethod(int x, int y, Image image, string layerName, Dictionary<string, string> properties)
71    {
72        var tile = new SimplePhysics.Object(TileSize, TileSize) { IsStatic = true };
73        tile.Image = image;
74        Add(tile);
75        SetTile(x, y, tile);
76
77        if (properties.ContainsKey("type"))
78        {
79            var features = properties["type"].Split(',');
80            foreach (var feature in features)
81            {
82                ApplyFeature(tile, feature);
83            }
84        }
85    }
86
87    private void ApplyFeature(SimplePhysics.Object tile, string feature)
88    {
89        switch (feature)
90        {
91            case "ice":
92                tile.Friction = 0.0;
93                break;
94
95            case "death":
96                tile.Tag = "death";
97                break;
98
99            case "oneway":
100                tile.OneWayPlatform = true;
101                break;
102
103            case "break":
104                tile.AddCollisionHandler("player", (t, player) =>
105                {
106                    if (player.Top <= tile.Bottom)
107                    {
108                        tile.Destroy();
109                    }
110                });
111                break;
112            default:
113                throw new Exception("Unknown tile feature: " + feature);
114        }
115    }
116}
Note: See TracBrowser for help on using the repository browser.