source: 2014/27/AleksanteriV/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor.cs @ 5388

Revision 5388, 6.3 KB checked in by mijoilmo, 6 years 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 Proto236b : PhysicsGame //true survivor
10{
11    private Player player;
12    public Player Player { get { return player; } set { player = value; } }
13    Hud hud;
14    private ColorTileMap map;
15    public ColorTileMap Map { get { return map; } set { map = value; } }
16    private Dictionary<string, Image> images = new Dictionary<string, Image>();
17    public Dictionary<string, Image> Images { get { return images; } set { images = value; } }
18    private Dictionary<string, Image[]> imageLists = new Dictionary<string, Image[]>();
19    public Dictionary<string, Image[]> ImageLists { get { return imageLists; } set { imageLists = value; } }
20    private ProtoLevel currentLevel;
21    public ProtoLevel CurrentLevel { get { return currentLevel; } set { currentLevel = value; } }
22    private ScreenView gameScreen;
23    public ScreenView GameScreen { get { return gameScreen; } set { gameScreen = value; } }
24
25    void AssignKeys()
26    {
27        Keyboard.Listen(Key.Escape, ButtonState.Down, Exit, "Lento");
28        Keyboard.Listen(Key.Up, ButtonState.Down, player.thrusterStart, "Lento", 1.0);
29        Keyboard.Listen(Key.Up, ButtonState.Released, player.thrusterEnd, "Lento");
30        Keyboard.Listen(Key.Down, ButtonState.Down, player.thrusterStart, "Lento", -0.2);
31        Keyboard.Listen(Key.Down, ButtonState.Released, player.thrusterEnd, "Lento");
32        Keyboard.Listen(Key.Left, ButtonState.Down, player.rotate, "Lento", 4.0);
33        Keyboard.Listen(Key.Right, ButtonState.Down, player.rotate, "Lento", -4.0);
34        Keyboard.Listen(Key.LeftControl, ButtonState.Down, player.shoot, "Lento");
35    }
36    void LoadAllImages()
37    {
38        images["background0"]               = LoadImage("graphics/backgrounds/space_background");
39        images["backgroundmars"]            = LoadImage("graphics/backgrounds/Mars");
40        images["backgroundplanet1"]         = LoadImage("graphics/backgrounds/planet1");
41        images["player"]                    = LoadImage("graphics/ships/player");
42        images["tile0"]                     = LoadImage("graphics/tiles/tile0");
43
44        imageLists["player_thruster"]       = LoadImages("graphics/effects/thrusters/thruster0.1", "graphics/effects/thrusters/thruster0.2");
45        imageLists["enemy1"]                = LoadImages("graphics/Enemy/Enemy1.0", "graphics/Enemy/Enemy1.1", "graphics/Enemy/Enemy1.2");
46        imageLists["HUD_radar"]             = LoadImages("graphics/HUD/HUD_radar1.0","graphics/HUD/HUD_radar1.1","graphics/HUD/HUD_radar1.2");
47    }
48    void LoadLevel(ProtoLevel level)
49    {
50        ClearAll();
51        currentLevel = level;
52        if (level.IsPlanet)
53        {
54            Gravity = new Vector(0, -200);
55            player.LinearDamping = 0.99;//ns ilmanvastus
56        }
57        else {
58            Gravity = new Vector(0, 0);
59            player.LinearDamping = 1;//avaruudessa ei ilmanvastusta
60        }
61        Add(this.player,1);
62        Camera.Follow(this.player);
63        AssignKeys();
64        initializeHUD();
65        LevelFromImage("graphics/levels/" + level.TileMapSrc);
66    }
67    void CreateBg(string id,int offset) {
68        GameObject bg = new GameObject(Level.Width, Level.Height);
69        bg.Image = images[id];
70        bg.X += Level.Width * offset;
71        bg.Y += Level.Height / 2;
72        Add(bg, -3);
73    }
74    void LevelFromImage(string levelName)
75    {
76        Dictionary<String, String> convert = new Dictionary<String, String>();
77        convert.Add("000000", "tile0");
78        ColorTileMap tileMap = ColorTileMap.FromLevelAsset(levelName);
79        tileMap.SetTileMethod(Color.FromHexCode("000000"), createTile, convert["000000"]);
80        tileMap.SetTileMethod(Color.FromHexCode("ff0000"), spawnPlayer);
81        tileMap.SetTileMethod(Color.FromHexCode("00ff00"), spawnEnemy);
82
83        double w = 40, h = 40;
84        tileMap.Execute(w, h);
85        map = tileMap;
86        //int laskValk = 0;
87        //int laskPun = 0;
88        //int lask = 0;
89        for (int y = 0; y < tileMap.RowCount; y++)
90        {
91            for (int x = 0; x < tileMap.ColumnCount; x++)
92            {
93                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6);
94
95                //if (hexColor == "FFFFFF") { laskValk++; continue; }
96                //if (hexColor == "FF00FF") { laskPun++; continue; }
97                //if (hexColor == "FF0000") { lask++; continue; }
98                //if (hexColor == "FF0000") { lask++; continue; }
99                if (convert.ContainsKey(hexColor))
100                {
101                    //tätä ei ole optimoitu; nyt kopioi koko kentän vaikka tarvitsisi vain murto-osan kentästä
102                    createTile(new Vector(x * w + w / 2 - Level.Width / 2 - Level.Width, (tileMap.RowCount - y - 1) * h + h / 2 - Level.Height / 2), w, h, convert[hexColor]);
103                    createTile(new Vector(x * w + w / 2 - Level.Width / 2 + Level.Width, (tileMap.RowCount - y - 1) * h + h / 2 - Level.Height / 2), w, h, convert[hexColor]);
104                }
105            }
106        }
107
108        //luo backgroundit (3)
109        CreateBg("backgroundplanet1", -1);
110        CreateBg("backgroundplanet1", 0);
111        CreateBg("backgroundplanet1", 1);
112    }
113    void initializeHUD()
114    {
115        hud = new Hud(this);
116    }
117    void createTile(Vector position, double w, double h, string id)
118    {
119        if (id == "") { return; }
120        MikonPhysicsObject tile = new MikonPhysicsObject(this, w, h);
121        tile.MakeStatic();
122        tile.AbsolutePosition = position;
123        tile.Image = images[id];
124        Add(tile);
125    }
126    void spawnPlayer(Vector position, double w, double h)
127    {
128        player.Position = position;
129    }
130    void spawnEnemy(Vector position, double w, double h)
131    {
132        new Enemy1(this, w, h, position);
133    }
134    public override void Begin()
135    {
136        // TODO: Kirjoita peli tähän
137        LoadAllImages();
138
139        this.player = new Player(this);
140        this.player.attachWeapon();
141        this.player.IsUpdated = true;
142
143        this.gameScreen = Screen;
144
145        LoadLevel(new ProtoLevel(this, "standardi", true));//tää on huono metodi, TODO: luo level-classit ennen lataamista
146    }
147}
Note: See TracBrowser for help on using the repository browser.