/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package de.nplusc.iZc.MazeGame.Level.Builders;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.yaml.snakeyaml.Yaml;

/**
 *
 * @author LH
 */
public abstract class LevelGenerations
{
    public static List<LevelGenerations> levels = new ArrayList<>();
    
    //HashMap-Patterns für die gängigsten Stiegen und Gänge
    
    //eben_standard
    
    public static final Yaml d = new Yaml();
    
    
    public static HashMap<Integer,boolean[]> P_EW = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_NS = new HashMap<>(); // Eingänge und ausgänge
    
    public static HashMap<Integer,boolean[]> P_NE = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_SE = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_SW = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_NW = new HashMap<>(); // Eingänge und ausgänge
    
    public static HashMap<Integer,boolean[]> P_NEW = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_NSW = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_ESW = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_NES = new HashMap<>(); // Eingänge und ausgänge
    
    public static HashMap<Integer,boolean[]> P_ALL = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> P_NUL = new HashMap<>(); // Eingänge und ausgänge
    
    
        /**
         * Toters ende nach norden offen
         */
    public static HashMap<Integer,boolean[]> DE_N = new HashMap<>(); // Eingänge und ausgänge
    
    /**
     * Totes Ende nach Osten offen
     */
    public static HashMap<Integer,boolean[]> DE_E = new HashMap<>(); // Eingänge und ausgänge
    
    /**
     * Totes Ende nach Süden offen
     */
    public static HashMap<Integer,boolean[]> DE_S = new HashMap<>(); // Eingänge und ausgänge
    
    
    /**
     * Totes ende nach Ersten offen
     */
    public static HashMap<Integer,boolean[]> DE_W = new HashMap<>(); // Eingänge und ausgänge
    
    
    //Stiegen
    //gerade
    public static HashMap<Integer,boolean[]> S_NS = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_EW = new HashMap<>(); // Eingänge und ausgänge
    //anderstrum
    public static HashMap<Integer,boolean[]> S_SN = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_WE = new HashMap<>(); // Eingänge und ausgänge
    //kurve
    
    
    public static HashMap<Integer,boolean[]> S_NE = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_SE = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_SW = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_NW = new HashMap<>(); // Eingänge und ausgänge
    //anderstrum
    public static HashMap<Integer,boolean[]> S_EN = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_ES = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_WS = new HashMap<>(); // Eingänge und ausgänge
    public static HashMap<Integer,boolean[]> S_WN = new HashMap<>(); // Eingänge und ausgänge

    
   
    
    
    static
    {
        P_EW.put(0, new boolean[]{false,true,false,true});
        P_NS.put(0, new boolean[]{true,false,true,false});
        
        P_NE.put(0, new boolean[]{true,true,false,false});
        P_SE.put(0, new boolean[]{false,true,true,false});
        P_SW.put(0, new boolean[]{false,false,true,true});
        P_NW.put(0, new boolean[]{true,false,false,true});
        
        P_NEW.put(0, new boolean[]{true,true,false,true});
        P_NSW.put(0, new boolean[]{true,false,true,true});
        P_ESW.put(0, new boolean[]{false,true,true,true});
        P_NES.put(0, new boolean[]{true,true,false,false});
         
        P_ALL.put(0, new boolean[]{true,true,true,true});
        P_NUL.put(0, new boolean[]{false,false,false,false});
        
        
        

        DE_N.put(0, new boolean[]{true,false,false,false});
        DE_E.put(0, new boolean[]{false,true,false,false});
        DE_S.put(0, new boolean[]{false,false,true,false});
        DE_W.put(0, new boolean[]{false,false,false,true});
        
        //stiegen
        
        S_NS.put(0, new boolean[]{true,false,false,false});
        S_NS.put(1, new boolean[]{false,false,true,false});
        
        S_SN.put(1, new boolean[]{true,false,false,false});
        S_SN.put(0, new boolean[]{false,false,true,false});
        
        
        S_EW.put(0, new boolean[]{false,true,false,false});
        S_EW.put(1, new boolean[]{false,false,false,true});
        
        S_WE.put(1, new boolean[]{false,false,false,true});
        S_WE.put(0, new boolean[]{false,true,false,false});
        
        
        
        
        
        S_NE.put(0, new boolean[]{true,false,false,false});
        S_NE.put(1, new boolean[]{false,true,false,false});
        
        S_EN.put(0, new boolean[]{false,true,false,false});
        S_EN.put(1, new boolean[]{true,false,false,false});
        
        S_SE.put(0, new boolean[]{false,false,true,false});
        S_SE.put(1, new boolean[]{false,true,false,false});
        
        S_ES.put(0, new boolean[]{false,true,false,false});
        S_ES.put(1, new boolean[]{false,false,true,false});
        
        
                
        S_SW.put(0, new boolean[]{false,false,true,false});
        S_SW.put(1, new boolean[]{false,false,false,true});
        
        S_WS.put(0, new boolean[]{false,false,false,true});
        S_WS.put(1, new boolean[]{false,false,true,false});
        
        
        S_NW.put(0, new boolean[]{true,false,false,false});
        S_NW.put(1, new boolean[]{false,false,false,true});
        
        S_WN.put(0, new boolean[]{false,false,false,true});
        S_WN.put(1, new boolean[]{true,false,false,false});
        
        
        
        
    }
    
    
    
    /**
     * Erzeugt die YAML-dateien für die Chunks damit diese vom game selber gelesen werden können;
     */
    public abstract void export();
    
    
    
}
