public override bool Update()
    {
        PositionGlobal gpos = gm.getGlobalPosition(npcNome);

        Debug.Log("gpos.initialized =" + gpos.initialized);
        if (!gpos.initialized)
        {
            gm.setGlobalPosition(npcNome);
        }
        return(true);
    }
	// Use this for initialization
	void Start () { 
		g = GameObject.FindGameObjectWithTag("GameManager");
		gm = (GameController) g.GetComponent(typeof(GameController));

		examinable = true;

		LoadState();

		PositionGlobal pg = gm.getGlobalPosition(this.nome);

		Vector3 pos = pg.position;

		//if (pg.position != null) {
		//	Debug.Log(this.nome+" position is: x="+pg.position.x+" y="+pg.position.y);
		//	pos = pg.position;
		//}
		//else {
		//	Debug.Log(this.nome+" position is: null");
		//	pos = transform.position;
		//}
		pos.z = pos.y;
		transform.position = pos;

		ani = this.GetComponent<Animator> ();
		if (ani != null) {
			dirX = ani.GetFloat("dirX");
			dirY = ani.GetFloat("dirY");
			ani.SetBool("running", false);
		}
		
		for (int i = 0; i < waypoints.Length; i++) {
			Vector3 position = waypoints[i].gameObject.transform.position;
			position.z = position.y;
			waypoints[i].gameObject.transform.position = position;
		}

		storedWaypoints = new ArrayList();
		if (waypoints.Length > 0) {
			storedWaypoints.Add(waypoints[0].gameObject.transform.position);
		}
		currentIndex = 0;
	}
    public bool LoadGame(string savefile)
    {
        if (fm.checkFile("GameData/saves", savefile, "sav"))
        {
            SaveGameStructure save = (SaveGameStructure)fm.ReadBinaryFile("GameData/saves", savefile, "sav");
            inventorio = new Inventorio();
            gerEstados.reset();
            backlog.reset();

            //Debug.Log("itempegos: "+save.itempegos.GetLength(0));
            for (int i = 0; i < save.itempegos.GetLength(0); i++)
            {
                Debug.Log("item: " + save.itempegos[i, 0] + ", sprite: " + save.itempegos[i, 1]);
                inventorio.addItem(save.itempegos[i, 0], save.itempegos[i, 1]);
            }
            item_grid = inventorio.getItemGrid();

            for (int i = 0; i < save.events.Length; i++)
            {
                if (save.events[i])
                {
                    gerEstados.setEventActive(i);
                }
                else
                {
                    gerEstados.setEventDeactive(i);
                }
            }

            string[] nomes = save.nomes;
            for (int i = 0; i < nomes.Length; i++)
            {
                gerEstados.alterarEstado(nomes[i], save.states[i], null);
                PositionGlobal p = save.getPositionGlobal(i);
                if (nomes[i] != "Player")
                {
                    if (p.initialized)
                    {
                        gerEstados.setGlobalPosition(nomes[i], p.position, p.scene_index);
                    }
                }
                else
                {
                    init_spot.transform.position = p.position;
                    init_scene = p.scene_index;
                }
            }

            int n = save.profiles.GetLength(0);
            perfis = new Profile[n];
            for (int i = 0; i < n; i++)
            {
                perfis[i] = new Profile(save.profiles[i, 0], save.profiles[i, 1], save.profiles[i, 2], save.profiles[i, 3]);
            }

            string[] rotulos = save.getRotulosBacklog();
            for (int i = 0; i < rotulos.Length; i++)
            {
                backlog.addToBacklog(rotulos[i]);
            }

            _GI.PlayerNotes = save.getPlayerNotes();

            init_music   = save.music;
            init_anbient = save.anbient;

            pendingshowmenuGUI = save.show_menu;

            return(true);
        }
        return(false);
    }
    public SaveGameStructure()
    {
        GameObject     g  = GameObject.FindGameObjectWithTag("GameManager");
        GameController gm = (GameController)g.GetComponent(typeof(GameController));

        show_menu = gm.GameInterface.ShowingQuickMenuGUI;        //.show_menu_GUI;

        events = gm.getEvents();

        ArrayList l = gm.getNomePersonagens();

        nomes     = new string[l.Count];
        states    = new int[l.Count];
        positions = new PositionGlobalSerializable[l.Count];

        for (int i = 0; i < l.Count; i++)
        {
            nomes[i]  = (string)l[i];
            states[i] = gm.getStateIndex(nomes[i]);
            PositionGlobal             pg = gm.getGlobalPosition(nomes[i]);
            PositionGlobalSerializable pgs;
            pgs.is_initialized = pg.initialized;
            pgs.x           = pg.position.x;
            pgs.y           = pg.position.y;
            pgs.z           = pg.position.z;
            pgs.scene_index = pg.scene_index;
            positions[i]    = pgs;
        }

        Item[] IL = gm.getItems();

        itempegos = new string[IL.Length, 2];
        for (int i = 0; i < IL.Length; i++)
        {
            itempegos[i, 0] = IL[i].getNome();
            itempegos[i, 1] = IL[i].getSpritePath();
        }

        Profile[] perfis = gm.Profiles;
        profiles = new string[perfis.Length, 4];
        for (int i = 0; i < perfis.Length; i++)
        {
            profiles[i, 0] = perfis[i].Nome;
            profiles[i, 1] = perfis[i].Idade;
            profiles[i, 2] = perfis[i].Sexo;
            profiles[i, 3] = perfis[i].Descricao;
        }

        BacklogManager bm = BacklogManager.getInstance();

        Conversa[] historic = bm.getHistoric();
        backlog = "";
        for (int i = 0; i < historic.Length; i++)
        {
            Conversa c = historic[i];
            backlog = backlog + c.getRotulo() + "\n";
        }

        string[] playernotes = gm.GameInterface.PlayerNotes;
        notes = "";
        for (int i = 0; i < playernotes.Length; i++)
        {
            if (playernotes[i].Length > 0)
            {
                notes = notes + i.ToString("00") + playernotes[i] + '\0';
            }
        }
        //bnotes = Encoding.UTF8.GetBytes(notes);

        music   = gm.getMusic();
        anbient = gm.getAnbient();
    }