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

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