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

Revision 5398, 9.5 KB checked in by mijoilmo, 7 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 Music music;
21    public Music Music { get { return music; } set { music = value; } }
22    private ProtoLevel currentLevel;
23    public ProtoLevel CurrentLevel { get { return currentLevel; } set { currentLevel = value; } }
24    private ScreenView gameScreen;
25    public ScreenView GameScreen { get { return gameScreen; } set { gameScreen = value; } }
26    private Dictionary<string, ProtoLevel> levels = new Dictionary<string, ProtoLevel>();
27    private Galaxy galaxy;
28    public Galaxy Galaxy { get { return galaxy; } set { galaxy = value; } }
29
30    void AssignKeys()
31    {
32        Keyboard.Listen(Key.Escape, ButtonState.Down, Exit, "Lento");
33        Keyboard.Listen(Key.Up, ButtonState.Down, player.thrusterStart, "Lento", 1.0);
34        Keyboard.Listen(Key.Up, ButtonState.Released, player.thrusterEnd, "Lento");
35        Keyboard.Listen(Key.Down, ButtonState.Down, player.thrusterStart, "Lento", -0.2);
36        Keyboard.Listen(Key.Down, ButtonState.Released, player.thrusterEnd, "Lento");
37        Keyboard.Listen(Key.Left, ButtonState.Down, player.rotate, "Lento", 4.0);
38        Keyboard.Listen(Key.Right, ButtonState.Down, player.rotate, "Lento", -4.0);
39        Keyboard.Listen(Key.LeftControl, ButtonState.Down, player.shoot, "Lento");
40    }
41    void LoadAllImages()
42    {
43        images["space_background"] = LoadImage("graphics/backgrounds/Space_esim");
44        images["mars_background"] = LoadImage("graphics/backgrounds/Mars");
45        images["planet1_background"] = LoadImage("graphics/backgrounds/planet1");
46        images["planet2_background"] = LoadImage("graphics/backgrounds/planet2");
47        images["player"] = LoadImage("graphics/ships/player");
48        images["tile0"] = LoadImage("graphics/tiles/tile0");
49        images["galaxy_map"] = LoadImage("graphics/HUD/galaxy_map");
50
51        imageLists["player_thruster"] = LoadImages("graphics/effects/thrusters/thruster0.1", "graphics/effects/thrusters/thruster0.2");
52        imageLists["enemy1"] = LoadImages("graphics/Enemy/Enemy1.0", "graphics/Enemy/Enemy1.1", "graphics/Enemy/Enemy1.2");
53        imageLists["HUD_radar"] = LoadImages("graphics/HUD/HUD_radar1.0", "graphics/HUD/HUD_radar1.1");
54        images["HUD_ship"] = LoadImage("graphics/HUD/cross1.0");
55    }
56    void LoadAllMusic()
57    {
58        this.music = new Music();
59        music.PlanetMusic.Add("planet2","music/esimerkki");
60    }
61    public void LoadLevel(string levelId, Angle planetAngle/*PlanetAngle määrittää missä kulmassa planeettaan tullaan tai sieltä poistutaan*/)
62    {
63        ClearAll();
64
65        ProtoLevel level = this.levels[levelId];
66        MessageDisplay.Add("loading level '" + level.TileMapSrc + "'...");
67        currentLevel = level;
68
69        Level.Background.Color = Color.Black;
70        this.player.Velocity = Vector.Zero;//resetoi pelaajan velocity
71        Add(this.player, 1);
72        Camera.Follow(this.player);
73
74        LevelFromImage(level);
75
76        if (level.IsPlanet)
77        {
78            Gravity = new Vector(0, -200);
79            player.LinearDamping = 0.99;//ns ilmanvastus
80            galaxy.CurrentPlanet = galaxy.Planets[level.Id];//aseta galaksiin tiedot nykyisestä planeetasta
81            player.Y = Level.Top - Screen.Height;
82            MediaPlayer.Play(galaxy.Planets[level.Id].Music);
83            //player.x on jotain
84        }
85        else
86        {
87            Gravity = new Vector(0, 0);
88            player.LinearDamping = 1;//avaruudessa ei ilmanvastusta
89            Camera.Zoom(0.8);
90            if (galaxy.CurrentPlanet != null)//current planet voi olla null jos pelaaja ei vielä ole käynyt millään planeetalla.
91            {
92                //aseta pelaaja galaksiin
93                player.Position = galaxy.CurrentPlanet.Position;
94                //laske vielä vektori, mistä suunnasta pelaaja poistui
95                player.Position += Vector.FromLengthAndAngle(galaxy.CurrentPlanet.Radius + 50, planetAngle);
96                player.AbsoluteAngle = planetAngle - Angle.RightAngle;//JOSSAIN VAIHEESSA KÄÄNNETÄÄN ALUS NIIN ETTEI NÄITÄ TARVITA
97            }
98            Layers[-3].RelativeTransition = new Vector(0.06, 0.06);
99        }
100
101        AssignKeys();
102        initializeHUD();
103    }
104    void CreateBg(string id, int offset, double scale = 1)
105    {
106        double h = 1, w = 1;
107        if (currentLevel.IsPlanet)
108        {
109            h = 150 * 40;
110            w = Level.Width;
111        }
112        else
113        {
114            h = Level.Height * scale;
115            w = Level.Width * scale;
116        }
117        GameObject bg = new GameObject(w, h);
118        bg.Image = images[id];
119        if (currentLevel.IsPlanet)
120        {
121            bg.Y = Level.Top - (150 * 40) / 2;
122        }
123        else
124        {
125            bg.Y += Level.Height * offset;
126        }
127        bg.X += Level.Width * offset;
128        Add(bg, -3);
129    }
130    void LevelFromImage(ProtoLevel level)
131    {
132        Dictionary<String, String> convert = new Dictionary<String, String>();
133        convert.Add("000000", "tile0");
134        ColorTileMap tileMap = ColorTileMap.FromLevelAsset(level.TileMapSrc);
135        tileMap.SetTileMethod(Color.FromHexCode("000000"), createTile, convert["000000"]);
136        tileMap.SetTileMethod(Color.FromHexCode("ff0000"), spawnPlayer);
137        tileMap.SetTileMethod(Color.FromHexCode("00ff00"), spawnEnemy);
138
139        //kaikki spacessa olevat jutut voisi alkaa CC
140        tileMap.SetTileMethod(Color.FromHexCode("ccffff"), createPlanet, "planet2");//planeetta 2
141
142        double w = 0, h = 0;
143        if (CurrentLevel.IsPlanet)
144        {
145            w = 40; h = 40;
146        }
147        else
148        {
149            w = 2000; h = 2000;
150        }
151
152        tileMap.Execute(w, h);
153        map = tileMap;
154
155        //lasketaan montako tiiltä tarvitaan
156        var tilesNeeded = Math.Floor((Screen.Width / 2 / 40) * Camera.ZoomFactor);
157
158        //vasen puoli
159        for (int x = 0; x < tilesNeeded; x++)
160        {
161            for (int y = 0; y < tileMap.RowCount; y++)
162            {
163                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6);
164                if (convert.ContainsKey(hexColor))
165                    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]);
166            }
167        }
168        //oikea puoli
169        for (int x = tileMap.ColumnCount - 1; x > tileMap.ColumnCount - 1 - tilesNeeded; x--)
170        {
171            for (int y = 0; y < tileMap.RowCount; y++)
172            {
173                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6);
174                if (convert.ContainsKey(hexColor))
175                    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]);
176            }
177        }
178        if (currentLevel.IsPlanet)
179        {
180            //luo backgroundit (2 valetta ja 1 oikea)
181            CreateBg(level.BackgroundId, -1);
182            CreateBg(level.BackgroundId, 0);
183            CreateBg(level.BackgroundId, 1);
184        }
185        else
186        {
187            CreateBg(level.BackgroundId, 0, 0.06);
188        }
189    }
190    void initializeHUD()
191    {
192        if (hud != null)
193        {
194            //poista vanha hud
195            hud.Destroy();
196        }
197        hud = new Hud(this);
198    }
199    void createTile(Vector position, double w, double h, string id)
200    {
201        if (id == "") { return; }
202        PhysicsObject tile = new PhysicsObject(w, h);
203        tile.MakeStatic();
204        tile.AbsolutePosition = position;
205        tile.Image = images[id];
206        Add(tile);
207    }
208    void createPlanet(Vector position, double w, double h, string id)
209    {
210        Planet planet = new Planet(this, position, 1000, id);
211        Add(planet);
212    }
213    void spawnPlayer(Vector position, double w, double h)
214    {
215        player.Position = position;
216    }
217    void spawnEnemy(Vector position, double w, double h)
218    {
219        new Enemy1(this, w, h, position);
220    }
221    void LoadAllLevels()
222    {
223        this.levels["space"] = new ProtoLevel(this, "!space", false, "space_background");
224        this.levels["planet2"] = new ProtoLevel(this, "planet2", true, "planet2_background");
225    }
226    public override void Begin()
227    {
228        // TODO: Kirjoita peli tähän
229        LoadAllImages();
230        LoadAllMusic();
231        LoadAllLevels();
232
233        this.player = new Player(this);
234        this.player.attachWeapon();
235        this.player.IsUpdated = true;
236
237        this.gameScreen = Screen;
238        this.galaxy = new Galaxy(this);
239
240        LoadLevel("space", Angle.Zero);//avaruus ladataan jotta galaksi saa planeettansa
241        LoadLevel("planet2", Angle.Zero);
242    }
243}
Note: See TracBrowser for help on using the repository browser.