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

Revision 5457, 11.9 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 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-0"] = LoadImage("graphics/backgrounds/Space0");
44        images["space_background-1"] = LoadImage("graphics/backgrounds/Space-1");
45        images["space_background-2"] = LoadImage("graphics/backgrounds/Space-2");
46        images["space_background-3"] = LoadImage("graphics/backgrounds/Space-3");
47        images["mars_background"] = LoadImage("graphics/backgrounds/Mars");
48        images["planet1_background"] = LoadImage("graphics/backgrounds/planet1");
49        images["planet2_background"] = LoadImage("graphics/backgrounds/planet2");
50        images["planet2_valetta"] = LoadImage("graphics/backgrounds/planet2_valetta");
51        images["planet2"] = LoadImage("graphics/Planets/MapPlanet1");
52        images["planet1"] = LoadImage("graphics/Planets/MapPlanet3");
53        images["player"] = LoadImage("graphics/ships/player1.0");
54        images["galaxy_map"] = LoadImage("graphics/HUD/galaxy_map");
55        imageLists["planet_map"] = LoadImages("graphics/HUD/RadarPlaneetta1.0", "graphics/HUD/RadarPlaneetta1.1");
56
57        //kaikki tilet
58        images["grass1"] = LoadImage("graphics/tiles/tilenurmi");
59        images["soil1"] = LoadImage("graphics/tiles/tilemulta");
60        images["wood1"] = LoadImage("graphics/tiles/tilepuu");
61
62        imageLists["player_thruster"] = LoadImages("graphics/effects/thrusters/thruster0.1", "graphics/effects/thrusters/thruster0.2");
63        imageLists["enemy1"] = LoadImages("graphics/Enemy/Enemy1.0", "graphics/Enemy/Enemy1.1", "graphics/Enemy/Enemy1.2");
64        imageLists["HUD_radar"] = LoadImages("graphics/HUD/HUD_radar1.0", "graphics/HUD/HUD_radar1.1");
65        images["HUD_ship"] = LoadImage("graphics/HUD/cross1.0");
66    }
67    void LoadAllMusic()
68    {
69        this.music = new Music();
70    }
71    public SoundEffect loadSound(string ef) {
72        return LoadSoundEffect(ef);
73    }
74    public void LoadLevel(string levelId, Angle planetAngle/*PlanetAngle määrittää missä kulmassa planeettaan tullaan tai sieltä poistutaan*/)
75    {
76        ClearAll();
77
78        ProtoLevel level = this.levels[levelId];
79        //MessageDisplay.Add("loading level '" + level.TileMapSrc + "'...");
80        currentLevel = level;
81
82        Level.Background.Color = Color.Black;
83        this.player.Velocity = Vector.Zero;//resetoi pelaajan velocity
84        Add(this.player, 1);
85        Camera.Follow(this.player);
86
87        LevelFromImage(level);
88
89        if (level.IsPlanet)
90        {
91            Gravity = new Vector(0, -200);
92            player.LinearDamping = 0.99;//ns ilmanvastus
93            galaxy.CurrentPlanet = galaxy.Planets[level.Id];//aseta galaksiin tiedot nykyisestä planeetasta
94            player.Y = Level.Top - Screen.Height;
95            Camera.Zoom(0.8);
96            MediaPlayer.Stop();
97            MediaPlayer.Play(galaxy.Planets[level.Id].Music);
98            player.X = (planetAngle.Degrees / Angle.FullAngle.Degrees) * Level.Width - Level.Width / 2;
99        }
100        else
101        {
102            MediaPlayer.Stop();
103            MediaPlayer.Play(music.SpaceMusic[RandomGen.NextInt(0,music.SpaceMusic.Count)]);
104            Gravity = new Vector(0, 0);
105            player.LinearDamping = 1;//avaruudessa ei ilmanvastusta
106            Camera.Zoom(0.6);
107            if (galaxy.CurrentPlanet != null)//current planet voi olla null jos pelaaja ei vielä ole käynyt millään planeetalla.
108            {
109                //aseta pelaaja galaksiin
110                player.Position = galaxy.CurrentPlanet.Position;
111                //laske vielä vektori, mistä suunnasta pelaaja poistui
112                player.Position += Vector.FromLengthAndAngle(galaxy.CurrentPlanet.Radius + 50, planetAngle);
113                player.AbsoluteAngle = planetAngle - Angle.RightAngle;//JOSSAIN VAIHEESSA KÄÄNNETÄÄN ALUS NIIN ETTEI NÄITÄ TARVITA
114            }
115            Layers[-3].RelativeTransition = new Vector(0.06, 0.06);
116            Layers[-2].RelativeTransition = new Vector(0.08, 0.08);
117            Layers[-1].RelativeTransition = new Vector(0.1, 0.1);
118        }
119
120        AssignKeys();
121        initializeHUD();
122    }
123    void CreateBg(string id, string valettaId, int offset, double scale = 1, int layer = -3)
124    {
125        double h = 1, w = 1;
126        if (currentLevel.IsPlanet)
127        {
128            h = 150 * 40;
129            w = Level.Width;
130        }
131        else
132        {
133            h = Level.Height * scale;
134            w = Level.Width * scale;
135        }
136        GameObject bg = new GameObject(w, h);
137        bg.Image = images[id];
138        bg.X += Level.Width * offset;
139        if (currentLevel.IsPlanet)
140        {
141            GameObject bg2 = new GameObject(Level.Width, Level.Height);
142            bg.Y = Level.Top - (150 * 40) / 2;
143            bg2.X += Level.Width * offset;
144            bg2.Image = images[valettaId];
145            Add(bg2, -2);
146        }
147        else
148        {
149            bg.Y += Level.Height * offset;
150        }
151        Add(bg, layer);
152    }
153    void LevelFromImage(ProtoLevel level)
154    {
155        Dictionary<String, String> convert = new Dictionary<String, String>();
156        convert.Add("000000", "grass1");
157        convert.Add("00ffff", "wood1");
158        ColorTileMap tileMap = ColorTileMap.FromLevelAsset(level.TileMapSrc);
159        tileMap.SetTileMethod(Color.FromHexCode("000000"), createTile, convert["000000"], false);
160        tileMap.SetTileMethod(Color.FromHexCode("00ffff"), createTile, convert["00ffff"], true);
161        tileMap.SetTileMethod(Color.FromHexCode("ff0000"), spawnPlayer);
162        tileMap.SetTileMethod(Color.FromHexCode("00ff00"), spawnEnemy);
163
164        //kaikki spacessa olevat jutut voisi alkaa CC
165        tileMap.SetTileMethod(Color.FromHexCode("ccffff"), createPlanet, "planet2");//planeetta 2
166        tileMap.SetTileMethod(Color.FromHexCode("ccffcc"), createPlanet, "planet1");//planeetta 1
167
168        double w = 0, h = 0;
169        if (CurrentLevel.IsPlanet)
170        {
171            w = 40; h = 40;
172        }
173        else
174        {
175            w = 2000; h = 2000;
176        }
177        tileMap.Execute(w, h);
178        map = tileMap;
179
180        //lasketaan montako tiiltä tarvitaan
181        var tilesNeeded = Math.Floor((Screen.Width / 2 / 40) * Camera.ZoomFactor);
182
183        //vasen puoli
184        for (int x = 0; x < tilesNeeded; x++)
185        {
186            for (int y = 0; y < tileMap.RowCount; y++)
187            {
188                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6).ToLower();
189                if (convert.ContainsKey(hexColor))
190                    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], false);
191            }
192        }
193        //oikea puoli
194        for (int x = tileMap.ColumnCount - 1; x > tileMap.ColumnCount - 1 - tilesNeeded; x--)
195        {
196            for (int y = 0; y < tileMap.RowCount; y++)
197            {
198                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6).ToLower();
199                if (convert.ContainsKey(hexColor))
200                    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], false);
201            }
202        }
203        if (currentLevel.IsPlanet)
204        {
205            //luo backgroundit (2 valetta ja 1 oikea)
206            CreateBg(level.BackgroundId, level.ValettaId, -1);
207            CreateBg(level.BackgroundId, level.ValettaId, 0);
208            CreateBg(level.BackgroundId, level.ValettaId, 1);
209        }
210        else
211        {
212            CreateBg("space_background-3", "", 0, 0.06);
213            CreateBg("space_background-2", "", 0, 0.07,-2);
214            CreateBg("space_background-1", "", 0, 0.08,-1);
215            //CreateBg("space_background-0", "", 0, 0.09,0);
216        }
217    }
218    void initializeHUD()
219    {
220        if (hud != null)
221        {
222            //poista vanha hud
223            hud.Destroy();
224        }
225        hud = new Hud(this);
226    }
227    void createTile(Vector position, double w, double h, string id, bool breakable = false)
228    {
229        if (id == "") { return; }
230        if (breakable)
231        {
232            MikonPhysicsObject tile = new MikonPhysicsObject(this, w, h);
233            tile.MakeStatic();
234            tile.AbsolutePosition = position;
235            tile.Image = images[id];
236            Add(tile);
237        }
238        else
239        {
240            PhysicsObject tile = new PhysicsObject(w, h);
241            tile.MakeStatic();
242            tile.AbsolutePosition = position;
243            tile.Image = images[id];
244            Add(tile);
245        }
246    }
247    void createPlanet(Vector position, double w, double h, string id)
248    {
249        Planet planet = new Planet(this, position, 1000, id);
250        Add(planet);
251    }
252    void spawnPlayer(Vector position, double w, double h)
253    {
254        player.Position = position;
255    }
256    void spawnEnemy(Vector position, double w, double h)
257    {
258        new Enemy1(this, w, h, position);
259    }
260    void LoadAllLevels()
261    {
262        this.levels["space"] = new ProtoLevel(this, "!space", false, "space_background");
263        this.levels["planet2"] = new ProtoLevel(this, "planet2", true, "planet1_background");
264        this.levels["planet1"] = new ProtoLevel(this, "planet3", true, "planet2_background");
265    }
266    public override void Begin()
267    {
268        // TODO: Kirjoita peli tähän
269        SmoothTextures = false;
270        LoadAllMusic();
271        LoadAllImages();
272        LoadAllLevels();
273
274        this.player = new Player(this);
275        this.player.attachWeapon();
276        this.player.IsUpdated = true;
277
278        this.gameScreen = Screen;
279        this.galaxy = new Galaxy(this);
280
281        LoadLevel("space", Angle.Zero);//avaruus ladataan jotta galaksi saa planeettansa
282        LoadLevel("planet2", Angle.Zero);
283    }
284}
Note: See TracBrowser for help on using the repository browser.