
package hu.swankey.ammo.common.yggdrasil.ext;

import hu.swankey.ammo.common.yggdrasil.basics.ComplexYObject;
import hu.swankey.ammo.common.yggdrasil.basics.IntegerField.YIntegerClass;
import hu.swankey.ammo.common.yggdrasil.definition.VariableDefinition;


public class FieldObject extends ComplexYObject {
    
    public static final String KEY_COORDX = "coordx";
    public static final String KEY_COORDY = "coordy";
    
    public FieldObject(String name, ComplexYClass type) {
        super(name, type);
    }
    
    public void setCoordX(Integer newValue){
        set(KEY_COORDX, newValue);
    }
    
    public Integer getCoordX(){
        return getIntegerField(KEY_COORDX).getValue();
    }
    
    public void setCoordY(Integer newValue){
        set(KEY_COORDY, newValue);
    }
    
    public Integer getCoordY(){
        return getIntegerField(KEY_COORDY).getValue();
    }
    
    
    public static FieldObjectClass yclass() {
        return FieldObjectClass.singleton();
    }
    
    @Override
    public FieldObjectClass getYClass(){
        return (FieldObjectClass) super.getYClass();
    }

    public static class FieldObjectClass extends ComplexYClass {

        private static final String CLASS_NAME = "FieldObject";
        private static FieldObjectClass singleton;
        
        public static FieldObjectClass singleton() {
            
            if (singleton == null){
                singleton = new FieldObjectClass(CLASS_NAME);
                singleton.addElement( VariableDefinition.yclass().create(KEY_COORDY, YIntegerClass.singleton(),  null));
                singleton.addElement( VariableDefinition.yclass().create(KEY_COORDX, YIntegerClass.singleton(),  null));
                placeClass(singleton);
            }
            
            return singleton;
        }
        
        protected FieldObjectClass(String name) {
            super(name, null);
        }
        
        
        @Override
        public FieldObject create(String name) {
            FieldObject newFieldObject = new FieldObject(name, this);
            init(newFieldObject);
            return newFieldObject;
        }
        
        public FieldObject create(String name, Integer coordx, Integer coordy){
            FieldObject fieldObject = new FieldObject(name, this);          
            init(fieldObject);
            
            fieldObject.setCoordX(coordx);
            fieldObject.setCoordY(coordy);
            
            return fieldObject;
        }
        
    }

}

