<repo_name>capsuletechnology/RPGzinho<file_sep>/RPGzinho/RPGzinho/View/NovoPersonagem.xaml.cs
﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace RPGzinho.View
{
    public partial class NovoPersonagem : ContentPage
    {
        int slotPersonagem;

        public NovoPersonagem(int slot)
        {
            NavigationPage.SetHasNavigationBar(this, false);
            InitializeComponent();
            slotPersonagem = slot;
            backLayout.BackgroundColor = Color.FromHex("#FFAB00");
        }

        protected override bool OnBackButtonPressed()
        {
            return Model.Repositorio.SairAplicativo(this);
        }

        async void BackClicked(object sender, EventArgs e)
        {
            await Model.Repositorio.FadeButton(backButton);
            Application.Current.MainPage = new Inicio();
        }

        void WarriorClicked(object sender, EventArgs e)
        {
            Line1.IsVisible = true;
            Line2.IsVisible = false;
            Line3.IsVisible = false;

            archerGrid.IsVisible = false;
            mageGrid.IsVisible = false;
            warriorGrid.IsVisible = true;
        }

        void ArcherClicked(object sender, EventArgs e)
        {
            Line2.IsVisible = true;
            Line1.IsVisible = false;
            Line3.IsVisible = false;

            mageGrid.IsVisible = false;
            warriorGrid.IsVisible = false;
            archerGrid.IsVisible = true;
        }

        void MageClicked(object sender, EventArgs e)
        {
            Line3.IsVisible = true;
            Line1.IsVisible = false;
            Line2.IsVisible = false;

            archerGrid.IsVisible = false;
            warriorGrid.IsVisible = false;
            mageGrid.IsVisible = true;
        }

        void warriorInfo(object sender, EventArgs e)
        {
            DisplayAlert("Classe Guerreiro", "- Vida: 125\n- Força: 15\n\n- Dano médio.\n- Defesa alta.", "OK");
        }

        void archerInfo(object sender, EventArgs e)
        {
            DisplayAlert("Classe Arqueiro", "- Vida: 100\n- Força: 12\n\n- Dano alto.\n- Defesa média.", "OK");
        }

        void mageInfo(object sender, EventArgs e)
        {
            DisplayAlert("Classe Mago", "- Vida: 85\n- Força: 8\n\n- Dano muito alto.\n- Defesa baixa.", "OK");
        }

        async void ConfirmarWarrior(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(Entry1.Text) || String.IsNullOrWhiteSpace(Entry1.Text))
            {
                await DisplayAlert(null, "Digite um nome.", "OK");
                return;
            }
            else
            {
                using (var dados = new DAO.PersonagemDAO())
                {
                    dados.Insert(Model.Repositorio.CriarPersonagem(Entry1.Text, "Guerreiro", slotPersonagem));
                }

                await DisplayAlert(Entry1.Text + " - Guerreiro", "Personagem criado com sucesso!", "OK");
            }
        }

        async void ConfirmarArcher(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(Entry2.Text) || String.IsNullOrWhiteSpace(Entry2.Text))
            {
                await DisplayAlert(null, "Digite um nome.", "OK");
                return;
            }
            else
            {
                using (var dados = new DAO.PersonagemDAO())
                {
                    dados.Insert(Model.Repositorio.CriarPersonagem(Entry2.Text, "Arqueiro", slotPersonagem));
                }

                await DisplayAlert(Entry2.Text + " - Arqueiro", "Personagem criado com sucesso!", "OK");
            }
        }

        async void ConfirmarMage(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(Entry3.Text) || String.IsNullOrWhiteSpace(Entry3.Text))
            {


                await DisplayAlert(null, "Digite um nome.", "OK");
                return;
            }
            else
            {
                using (var dados = new DAO.PersonagemDAO())
                {
                    dados.Insert(Model.Repositorio.CriarPersonagem(Entry3.Text, "Mago", slotPersonagem));
                }

                await DisplayAlert(Entry3.Text + " - Mago", "Personagem criado com sucesso!", "OK");
            }
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/Model/Repositorio.cs
﻿using RPGzinho.Helper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace RPGzinho.Model
{
    public class Repositorio
    {
        public async static Task Fade(Image imagem)
        {
            await imagem.FadeTo(.5);
            await imagem.FadeTo(1);
        }

        public async static Task FadeButton(Button button)
        {
            await button.FadeTo(.5);
            await button.FadeTo(1);
        }

        public static Personagem CriarPersonagem(string nome, string classe, int slot)
        {
            Personagem personagem = new Personagem();

            if (classe.Equals("Guerreiro"))
            {
                personagem.Nome = nome;
                personagem.Classe = classe;
                personagem.Vida = 125;
                personagem.Forca = 15;
                personagem.Defesa = 0;
                personagem.Level = 1;
                personagem.Exp = 0;
                personagem.Slot = slot;
            }
            else if (classe.Equals("Arqueiro"))
            {
                personagem.Nome = nome;
                personagem.Classe = classe;
                personagem.Vida = 100;
                personagem.Forca = 12;
                personagem.Defesa = 0;
                personagem.Level = 1;
                personagem.Exp = 0;
                personagem.Slot = slot;
            }
            else if (classe.Equals("Mago"))
            {
                personagem.Nome = nome;
                personagem.Classe = classe;
                personagem.Vida = 85;
                personagem.Forca = 8;
                personagem.Defesa = 0;
                personagem.Level = 1;
                personagem.Exp = 0;
                personagem.Slot = slot;
            }

            return personagem;
        }

        // Impede de fechar o app sem confirmação caso o botão voltar do celular seja pressionado.
        // Usar no método 'protected override bool OnBackButtonPressed()'
        public static bool SairAplicativo(Page page)
        {
            Task<bool> question = page.DisplayAlert("SAIR DO APLICATIVO", "Deseja sair do aplicativo?", "Sim", "Não");
            question.ContinueWith(task =>
            {
                if (task.Result) { DependencyService.Get<ICloseApplication>().closeApplication(); }
            });
            return true;
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/DAO/PersonagemDAO.cs
﻿using RPGzinho.Model;
using SQLiteNetExtensions.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RPGzinho.DAO
{
    public class PersonagemDAO : GenericDAO<Personagem>
    {
        public PersonagemDAO()
        {
            init();
        }

        public List<Personagem> Listar()
        {
            return _conexao.Table<Personagem>().ToList();        
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/Model/ArmaPrimaria.cs
﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RPGzinho.Model
{
    public class ArmaPrimaria : Item
    {
        public int Dano { get; set; }
        public int RestricaoLvl { get; set; }
        public string RestricaoClasse { get; set; }
    }
}
<file_sep>/RPGzinho/RPGzinho/DAO/GenericDAO.cs
﻿using RPGzinho.Services;
using SQLite.Net.Interop;
using SQLiteNetExtensions.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace RPGzinho.DAO
{
    public abstract class GenericDAO<T> : IDisposable
    {
        public SQLite.Net.SQLiteConnection _conexao { get; set; }

        public void init()
        {
            var config = DependencyService.Get<IConfig>();
            _conexao = new SQLite.Net.SQLiteConnection(config.Plataforma, System.IO.Path.Combine(config.Diretorio, "banco1.db3"));
            _conexao.CreateTable<T>();
        }

        public void Insert(T objeto)
        {
            _conexao.Insert(objeto);
        }

        public void Update(T objeto)
        {
            _conexao.Update(objeto);
        }

        public async Task Deletar(T objeto)
        {
            _conexao.Delete(objeto, recursive: true);
        }

        public void Delete(T objeto)
        {
            _conexao.Delete(objeto, recursive: true);
        }

        public void Dispose()
        {
            _conexao.Dispose();
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/View/Inventario.xaml.cs
﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace RPGzinho.View
{
    public partial class Inventario : ContentPage
    {
        public Inventario()
        {
            InitializeComponent();
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/View/Inicio.xaml.cs
﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace RPGzinho.View
{
    public partial class Inicio : ContentPage
    {
        ObservableCollection<Model.Personagem> ListaPersonagem;
        Model.Personagem personagem1;
        Model.Personagem personagem2;

        bool Character1 = false;
        bool Character2 = false;

        public Inicio()
        {
            NavigationPage.SetHasNavigationBar(this, false);
            GridMaster.IsVisible = false;
            InitializeComponent();            

            //if (FixFrame1) { Frame1Layout.Padding = new Thickness(0, 0, 0, 0); }
            //if (FixFrame2) { Frame2Layout.Padding = new Thickness(0, 0, 0, 0); }

            Frame1.BackgroundColor = Color.FromRgb(250, 250, 210);
            Frame2.BackgroundColor = Color.FromRgb(250, 250, 210);
        }

        protected override async void OnAppearing()
        {
            await Task.WhenAll(
                Logo.RotateYTo(360 * 10, 1000, Easing.CubicIn),
                Logo.FadeTo(1, 1000, Easing.CubicIn),
                Titulo.FadeTo(1, 1500, Easing.CubicIn)
                //SubGrid.FadeTo(1, 1500, Easing.CubicIn)
            );

            Animation2();
        }

        async void Animation2()
        {
            for (int i = 0; i < 10; i++)
            {
                await Logo.FadeTo(.7, 700);
                await Logo.FadeTo(1, 700);
            }
        }

        void Carregar()
        {
            GridMaster.IsVisible = false;

            using (var dados = new DAO.PersonagemDAO())
            {
                ListaPersonagem = new ObservableCollection<Model.Personagem>(dados.Listar());
            }

            foreach (var item in ListaPersonagem)
            {
                if (item.Slot == 1)
                {
                    Character1 = true;
                    personagem1 = item;
                }

                if (item.Slot == 2)
                {
                    Character2 = true;
                    personagem2 = item;
                }
            }

            if (Character1)
            {
                ImagemRow0.Source = "map.png";
                LbNome1.Text = personagem1.Nome;
                LbClasse1.Text = personagem1.Classe;
                LbClasse1.IsVisible = true;
                x1.IsVisible = true;
            }
            else
            {
                LbClasse1.IsVisible = false;
                x1.IsVisible = false;
                ImagemRow0.Source = "letter.png";
                LbNome1.Text = "Toque na carta para começar...";
            }

            if (Character2)
            {
                ImagemRow1.Source = "map.png";
                LbNome2.Text = personagem2.Nome;
                LbClasse2.Text = personagem2.Classe;
                LbClasse2.IsVisible = true;
                x2.IsVisible = true;
            }
            else
            {
                LbClasse2.IsVisible = false;
                x2.IsVisible = false;
                ImagemRow1.Source = "letter.png";
                LbNome2.Text = "Toque na carta para começar...";
            }

            GridMaster.IsVisible = true;
        }

        async void Image1Tapped(object sender, EventArgs e)
        {
            await Model.Repositorio.Fade(ImagemRow0);

            if (Character1)
                Application.Current.MainPage = new Principal();
            else
                Application.Current.MainPage = new NovoPersonagem(1);
        }

        async void Image2Tapped(object sender, EventArgs e)
        {
            await Model.Repositorio.Fade(ImagemRow1);

            if (Character2)
                Application.Current.MainPage = new Principal();
            else
                Application.Current.MainPage = new NovoPersonagem(2);
        }


        async void Excluir1Tapped(object sender, EventArgs e)
        {
            await Model.Repositorio.Fade(x1);

            Task<bool> question = DisplayAlert("DELETAR PERSONAGEM", "Tem certeza que deseja deletar esse personagem?", "Sim", "Não");
            await question.ContinueWith(task =>
            {
                if (task.Result)
                {
                    using (var dados = new DAO.PersonagemDAO())
                    {
                        foreach (var item in dados.Listar())
                        {
                            if (item.Nome.Equals(LbNome1.Text))
                            {
                                dados.Delete(item);
                            }
                        }
                    }
                }
            });

            return;
        }


        async void Excluir2Tapped(object sender, EventArgs e)
        {
            await Model.Repositorio.Fade(x2);

            Task<bool> question = DisplayAlert("DELETAR PERSONAGEM", "Tem certeza que deseja deletar esse personagem?", "Sim", "Não");
            await question.ContinueWith(task =>
            {
                if (task.Result)
                {
                    using (var dados = new DAO.PersonagemDAO())
                    {
                        foreach (var item in dados.Listar())
                        {
                            if (item.Nome.Equals(LbNome2.Text))
                            {
                                dados.Delete(item);
                            }
                        }
                    }
                }
            });
            return;
        }

        //async void TapImagem(object sender, EventArgs e)
        //{
        //    //await Model.Repositorio.Fade(Logo);

        //    //await image.TranslateTo(-100, 0, 1000);    // Move image left
        //    //await image.TranslateTo(-100, -100, 1000); // Move image up
        //    //await image.TranslateTo(100, 100, 2000);   // Move image diagonally down and right
        //    //await image.TranslateTo(0, 100, 1000);     // Move image left
        //    //await image.TranslateTo(0, 0, 1000);       // Move image up

        //    //await Task.Delay(1000);

        //    //await image.TranslateTo(0, 200, 2000, Easing.BounceIn);
        //    //await image.ScaleTo(2, 2000, Easing.CubicIn);
        //    //await image.RotateTo(360, 2000, Easing.SinInOut);
        //    //await image.ScaleTo(1, 2000, Easing.CubicOut);
        //    //await image.TranslateTo(0, -200, 2000, Easing.BounceOut);

        //    // 10 minute animation
        //    //uint duration = 10 * 60 * 1000;
        //    //await Task.WhenAll(
        //    //image.RotateTo(307 * 360, duration),
        //    //image.RotateXTo(251 * 360, duration),
        //    //image.RotateYTo(199 * 360, duration)
        //    //);

        //    //ViewExtensions.CancelAnimations(image);
        //}

        protected override bool OnBackButtonPressed()
        {
            return Model.Repositorio.SairAplicativo(this);
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/Model/Personagem.cs
﻿using SQLite.Net.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RPGzinho.Model
{
    [Table("Personagem")]
    public class Personagem
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Classe { get; set; }
        public int Vida { get; set; }
        public int Forca { get; set; }
        public int Defesa { get; set; }
        public int Level { get; set; }
        public int Exp { get; set; }
        public int Slot { get; set; }
    }
}
<file_sep>/RPGzinho/RPGzinho.iOS/CloseApplication.cs
﻿using RPGzinho.iOS;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;

[assembly: Xamarin.Forms.Dependency(typeof(CloseApplication))]
namespace RPGzinho.iOS
{
    public class CloseApplication : Helper.ICloseApplication
    {
        public void closeApplication()
        {
            Process.GetCurrentProcess().CloseMainWindow();
            Process.GetCurrentProcess().Close();
        }
    }
}
<file_sep>/RPGzinho/RPGzinho/View/Principal.xaml.cs
﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;

namespace RPGzinho.View
{
    public partial class Principal : ContentPage
    {
        public Principal()
        {
            NavigationPage.SetHasNavigationBar(this, false);
            InitializeComponent();
        }

        async void BackClicked(object sender, EventArgs e)
        {            
            await Model.Repositorio.FadeButton(backButton);
            Application.Current.MainPage = new Inicio();
        }
    }
}
