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

Revision 5395, 7.5 KB checked in by mijoilmo, 5 years ago (diff)

Optimoitu levelin kopioimista. Lisätty basic !space leveli

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    private Dictionary<string, ProtoLevel> levels = new Dictionary<string, ProtoLevel>();
25
26    void AssignKeys()
27    {
28        Keyboard.Listen(Key.Escape, ButtonState.Down, Exit, "Lento");
29        Keyboard.Listen(Key.Up, ButtonState.Down, player.thrusterStart, "Lento", 1.0);
30        Keyboard.Listen(Key.Up, ButtonState.Released, player.thrusterEnd, "Lento");
31        Keyboard.Listen(Key.Down, ButtonState.Down, player.thrusterStart, "Lento", -0.2);
32        Keyboard.Listen(Key.Down, ButtonState.Released, player.thrusterEnd, "Lento");
33        Keyboard.Listen(Key.Left, ButtonState.Down, player.rotate, "Lento", 4.0);
34        Keyboard.Listen(Key.Right, ButtonState.Down, player.rotate, "Lento", -4.0);
35        Keyboard.Listen(Key.LeftControl, ButtonState.Down, player.shoot, "Lento");
36    }
37    void LoadAllImages()
38    {
39        images["space_background"] = LoadImage("graphics/backgrounds/Space_esim");
40        images["mars_background"] = LoadImage("graphics/backgrounds/Mars");
41        images["planet1_background"] = LoadImage("graphics/backgrounds/planet1");
42        images["planet2_background"] = LoadImage("graphics/backgrounds/planet2");
43        images["player"] = LoadImage("graphics/ships/player");
44        images["tile0"] = LoadImage("graphics/tiles/tile0");
45
46        imageLists["player_thruster"] = LoadImages("graphics/effects/thrusters/thruster0.1", "graphics/effects/thrusters/thruster0.2");
47        imageLists["enemy1"] = LoadImages("graphics/Enemy/Enemy1.0", "graphics/Enemy/Enemy1.1", "graphics/Enemy/Enemy1.2");
48        imageLists["HUD_radar"] = LoadImages("graphics/HUD/HUD_radar1.0", "graphics/HUD/HUD_radar1.1");
49        imageLists["HUD_ship"] = LoadImages("graphics/HUD/cross1.0", "graphics/HUD/cross1.1");
50    }
51    public void LoadLevel(string levelId)
52    {
53        ClearAll();
54
55        ProtoLevel level = this.levels[levelId];
56        MessageDisplay.Add("loading level '" + level.TileMapSrc + "'...");
57        currentLevel = level;
58
59        Level.Background.Color = Color.Black;
60        this.player.Velocity = Vector.Zero;
61        Add(this.player, 1);
62        Camera.Follow(this.player);
63        if (level.IsPlanet)
64        {
65            Gravity = new Vector(0, -200);
66            player.LinearDamping = 0.99;//ns ilmanvastus
67        }
68        else
69        {
70            Gravity = new Vector(0, 0);
71            player.LinearDamping = 1;//avaruudessa ei ilmanvastusta
72            Camera.Zoom(0.8);
73        }
74
75        AssignKeys();
76        initializeHUD();
77        LevelFromImage(level);
78    }
79    void CreateBg(string id, int offset)
80    {
81        double h = 1;
82        if (currentLevel.IsPlanet)
83        {
84            h = 150 * 40;
85        }
86        else
87        {
88            h = Level.Height;
89        }
90        GameObject bg = new GameObject(Level.Width, h);
91        bg.Image = images[id];
92        if (currentLevel.IsPlanet)
93        {
94            bg.Y = Level.Top - (150 * 40) / 2;
95        }
96        else
97        {
98            bg.Y += Level.Height * offset;
99        }
100        bg.X += Level.Width * offset;
101        Add(bg, -3);
102    }
103    void LevelFromImage(ProtoLevel level)
104    {
105        Dictionary<String, String> convert = new Dictionary<String, String>();
106        convert.Add("000000", "tile0");
107        ColorTileMap tileMap = ColorTileMap.FromLevelAsset(level.TileMapSrc);
108        tileMap.SetTileMethod(Color.FromHexCode("000000"), createTile, convert["000000"]);
109        tileMap.SetTileMethod(Color.FromHexCode("ff0000"), spawnPlayer);
110        tileMap.SetTileMethod(Color.FromHexCode("00ff00"), spawnEnemy);
111
112        //kaikki spacessa olevat jutut voisi alkaa CC
113        tileMap.SetTileMethod(Color.FromHexCode("ccffff"), createPlanet, "planet1");//planeetta 1
114
115        double w = 40, h = 40;
116        tileMap.Execute(w, h);
117        map = tileMap;
118
119        //lasketaan montako tiiltä tarvitaan
120        var tilesNeeded = Math.Floor((Screen.Width/2/40)*Camera.ZoomFactor);
121
122        //vasen puoli
123        for (int x = 0; x < tilesNeeded; x++)
124        {
125            for (int y = 0; y < tileMap.RowCount; y++)
126            {
127                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6);
128                if (convert.ContainsKey(hexColor))
129                    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]);
130            }
131        }
132        //oikea puoli
133        for (int x = tileMap.ColumnCount-1; x > tileMap.ColumnCount-1-tilesNeeded; x--)
134        {
135            for (int y = 0; y < tileMap.RowCount; y++)
136            {
137                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6);
138                if (convert.ContainsKey(hexColor))
139                    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]);
140            }
141        }
142
143        //luo backgroundit (3)
144        CreateBg(level.BackgroundId, -1);
145        CreateBg(level.BackgroundId, 0);
146        CreateBg(level.BackgroundId, 1);
147    }
148    void initializeHUD()
149    {
150        if (hud != null)
151        {
152            //poista vanha hud
153            hud.Destroy();
154        }
155        hud = new Hud(this);
156    }
157    void createTile(Vector position, double w, double h, string id)
158    {
159        if (id == "") { return; }
160        PhysicsObject tile = new PhysicsObject(w, h);
161        tile.MakeStatic();
162        tile.AbsolutePosition = position;
163        tile.Image = images[id];
164        Add(tile);
165    }
166    void createPlanet(Vector position, double w, double h, string id)
167    {
168        Planet planet = new Planet(100);
169        planet.Position = position;
170    }
171    void spawnPlayer(Vector position, double w, double h)
172    {
173        player.Position = position;
174    }
175    void spawnEnemy(Vector position, double w, double h)
176    {
177        new Enemy1(this, w, h, position);
178    }
179    void LoadAllLevels()
180    {
181        this.levels["space"] = new ProtoLevel(this, "!space", false, "space_background");
182        this.levels["planet2"] = new ProtoLevel(this, "planet2", true, "planet2_background");
183    }
184    public override void Begin()
185    {
186        // TODO: Kirjoita peli tähän
187        LoadAllImages();
188        LoadAllLevels();
189
190        this.player = new Player(this);
191        this.player.attachWeapon();
192        this.player.IsUpdated = true;
193
194        this.gameScreen = Screen;
195
196        LoadLevel("planet2");
197    }
198}
Note: See TracBrowser for help on using the repository browser.