Ignore:
Timestamp:
2014-07-03 21:24:16 (5 years ago)
Author:
mijoilmo
Message:

Optimoitu levelin kopioimista. Lisätty basic !space leveli

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2014/27/AleksanteriV/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor.cs

    r5390 r5395  
    2222    private ScreenView gameScreen; 
    2323    public ScreenView GameScreen { get { return gameScreen; } set { gameScreen = value; } } 
     24    private Dictionary<string, ProtoLevel> levels = new Dictionary<string, ProtoLevel>(); 
    2425 
    2526    void AssignKeys() 
     
    3637    void LoadAllImages() 
    3738    { 
    38         images["background0"] = LoadImage("graphics/backgrounds/space_background"); 
    39         images["backgroundmars"] = LoadImage("graphics/backgrounds/Mars"); 
    40         images["backgroundplanet1"] = LoadImage("graphics/backgrounds/planet1"); 
     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"); 
    4143        images["player"] = LoadImage("graphics/ships/player"); 
    4244        images["tile0"] = LoadImage("graphics/tiles/tile0"); 
     
    4446        imageLists["player_thruster"] = LoadImages("graphics/effects/thrusters/thruster0.1", "graphics/effects/thrusters/thruster0.2"); 
    4547        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"); 
     48        imageLists["HUD_radar"] = LoadImages("graphics/HUD/HUD_radar1.0", "graphics/HUD/HUD_radar1.1"); 
    4749        imageLists["HUD_ship"] = LoadImages("graphics/HUD/cross1.0", "graphics/HUD/cross1.1"); 
    4850    } 
    49     void LoadLevel(ProtoLevel level) 
     51    public void LoadLevel(string levelId) 
    5052    { 
    5153        ClearAll(); 
     54 
     55        ProtoLevel level = this.levels[levelId]; 
     56        MessageDisplay.Add("loading level '" + level.TileMapSrc + "'..."); 
    5257        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); 
    5363        if (level.IsPlanet) 
    5464        { 
     
    6070            Gravity = new Vector(0, 0); 
    6171            player.LinearDamping = 1;//avaruudessa ei ilmanvastusta 
     72            Camera.Zoom(0.8); 
    6273        } 
    63         Add(this.player, 1); 
    64         Camera.Follow(this.player); 
     74 
    6575        AssignKeys(); 
    6676        initializeHUD(); 
    67         LevelFromImage("graphics/levels/" + level.TileMapSrc); 
     77        LevelFromImage(level); 
    6878    } 
    6979    void CreateBg(string id, int offset) 
    7080    { 
    71         GameObject bg = new GameObject(Level.Width, Level.Height); 
     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); 
    7291        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        } 
    73100        bg.X += Level.Width * offset; 
    74         bg.Y += Level.Height / 2; 
    75101        Add(bg, -3); 
    76102    } 
    77     void LevelFromImage(string levelName) 
     103    void LevelFromImage(ProtoLevel level) 
    78104    { 
    79105        Dictionary<String, String> convert = new Dictionary<String, String>(); 
    80106        convert.Add("000000", "tile0"); 
    81         ColorTileMap tileMap = ColorTileMap.FromLevelAsset(levelName); 
     107        ColorTileMap tileMap = ColorTileMap.FromLevelAsset(level.TileMapSrc); 
    82108        tileMap.SetTileMethod(Color.FromHexCode("000000"), createTile, convert["000000"]); 
    83109        tileMap.SetTileMethod(Color.FromHexCode("ff0000"), spawnPlayer); 
    84110        tileMap.SetTileMethod(Color.FromHexCode("00ff00"), spawnEnemy); 
    85111 
     112        //kaikki spacessa olevat jutut voisi alkaa CC 
     113        tileMap.SetTileMethod(Color.FromHexCode("ccffff"), createPlanet, "planet1");//planeetta 1 
     114 
    86115        double w = 40, h = 40; 
    87116        tileMap.Execute(w, h); 
    88117        map = tileMap; 
    89         //int laskValk = 0; 
    90         //int laskPun = 0; 
    91         //int lask = 0; 
    92         for (int y = 0; y < tileMap.RowCount; y++) 
     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++) 
    93124        { 
    94             for (int x = 0; x < tileMap.ColumnCount; x++) 
     125            for (int y = 0; y < tileMap.RowCount; y++) 
    95126            { 
    96127                String hexColor = tileMap.GetTile(y, x).ToString().Substring(2, 6); 
    97  
    98                 //if (hexColor == "FFFFFF") { laskValk++; continue; } 
    99                 //if (hexColor == "FF00FF") { laskPun++; continue; } 
    100                 //if (hexColor == "FF0000") { lask++; continue; } 
    101                 //if (hexColor == "FF0000") { lask++; continue; } 
    102128                if (convert.ContainsKey(hexColor)) 
    103                 { 
    104                     //tätä ei ole optimoitu; nyt kopioi koko kentän vaikka tarvitsisi vain murto-osan kentästä 
     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)) 
    105139                    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]); 
    106                     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]); 
    107                 } 
    108140            } 
    109141        } 
    110142 
    111143        //luo backgroundit (3) 
    112         CreateBg("backgroundplanet1", -1); 
    113         CreateBg("backgroundplanet1", 0); 
    114         CreateBg("backgroundplanet1", 1); 
     144        CreateBg(level.BackgroundId, -1); 
     145        CreateBg(level.BackgroundId, 0); 
     146        CreateBg(level.BackgroundId, 1); 
    115147    } 
    116148    void initializeHUD() 
    117149    { 
     150        if (hud != null) 
     151        { 
     152            //poista vanha hud 
     153            hud.Destroy(); 
     154        } 
    118155        hud = new Hud(this); 
    119156    } 
     
    121158    { 
    122159        if (id == "") { return; } 
    123         MikonPhysicsObject tile = new MikonPhysicsObject(this, w, h); 
     160        PhysicsObject tile = new PhysicsObject(w, h); 
    124161        tile.MakeStatic(); 
    125162        tile.AbsolutePosition = position; 
    126163        tile.Image = images[id]; 
    127164        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; 
    128170    } 
    129171    void spawnPlayer(Vector position, double w, double h) 
     
    135177        new Enemy1(this, w, h, position); 
    136178    } 
     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    } 
    137184    public override void Begin() 
    138185    { 
    139186        // TODO: Kirjoita peli tähän 
    140187        LoadAllImages(); 
     188        LoadAllLevels(); 
    141189 
    142190        this.player = new Player(this); 
     
    146194        this.gameScreen = Screen; 
    147195 
    148         LoadLevel(new ProtoLevel(this, "standardi", true));//tää on huono metodi, TODO: luo level-classit ennen lataamista 
     196        LoadLevel("planet2"); 
    149197    } 
    150198} 
Note: See TracChangeset for help on using the changeset viewer.