summaryrefslogblamecommitdiff
path: root/src/gui/newskill.cpp
blob: be62cd5f6d231cace67fb6edbd023333e92efaaf (plain) (tree)





















                                                                             
 




                                                                      


                                    
                   


                        
 
                            

                        
                                                                
                                                         
                         

                                                                            

                         

                                                               
                           

                                                             










                                                                               
                                 



                                                                         

                                          
 
 


                                 
                   
                                               
     






                                                                
     


                              

                                  

               
 
                      
                                   








                                                       
 
                             







                                                                 
                                                         
                                       
                     
 
                        


                                       

                                                       
                          



                           
                                                  


                      











































                                                      

                                                                  
                         




                                                                 


             


                                               

          
 
/*
 *  The Mana World
 *  Copyright 2004 The Mana World Development Team
 *
 *  This file is part of The Mana World.
 *
 *  The Mana World is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  any later version.
 *
 *  The Mana World is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with The Mana World; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *  $Id$
 */

 /* This file implements the new skill dialog for use under the latest
  * version of the skill system as of 2005/02/20
  */

#include "newskill.h"

#include <guichan/widgets/label.hpp>

#include "button.h"
#include "progressbar.h"

#include "../graphics.h"

const char *skill_name[] = {
    // 0-99
    // weapon skills 0-9
    "Short Blades", "Long Blades", "Hammers", "Archery", "Whip",
    "Staves", "Throwing", "Piercing", "Hand to Hand", "",
    // magic skills 10-19
    "Epyri (Fire)", "Merene (Water)", "Geon (Earth)", "Izurial (Air)",
    "Lumine (Light)", "Tenebrae (Dark)", "Chronos (Time)", "Teless (Space)",
    "Gen (Mana)", "",
    // craft skills 20-29
    "Metalworking", "Woodworking", "Jeweler", "Cook", "Tailor",
    "Alchemist", "Artisan", "Synthesis", "", "",
    // general skills 30-39
    "Running", "Searching", "Sneak", "Trading", "Intimidate",
    "Athletics", "", "", "","",
    // combat skills 40-49
    "Dodge", "Accuracy", "Critical", "Block", "Parry", "Diehard", "Magic Aura",
    "Counter", "", "",
    // resistance skills 50-59
    "Poison", "Silence", "Petrify", "Paralyze", "Blind", "Slow", "Zombie",
    "Critical", "", "",
    // element reistance 60-69
    "Heat (Fire)", "Chill (Water)", "Stone (Earth)", "Wind (Air)", 
    "Shine (Light)", "Shadow (Dark)", "Decay (Time)", "Chaos (Space)", "", "",
    // hunting skills 70-79
    "Insects", "Birds", "Lizards", "Amorphs", "Undead", "Machines", "Arcana",
    "Humanoids", "Plantoids", "",
    // stats 80-89
    "Strength", "Fortitude", "Vitality", "Menality", "Awareness", "Mana",
    "Dexterity", "", "", "",
    // unused (reserved) 90-99
    "", "", "", "", "", "", "", "", "", ""
};


NewSkillDialog::NewSkillDialog():
    Window("Skills")
{
    startPoint = 0;
    for ( int i = 0; i < N_SKILL_CAT_SIZE; i++)
    {
        mSkillLabel[i] = new gcn::Label("Empty               ");
        mSkillLevel[i] = new gcn::Label("00000");
        mSkillbar[i] = new ProgressBar(0.0f,0,0,100,15,0,0,255);
        mSkillLevel[i]->setAlignment(Graphics::RIGHT);
        add(mSkillLabel[i],40,5+i*25);
        add(mSkillLevel[i],150,5+i*25);
        add(mSkillbar[i],180,5+i*25);
    }
    // initialize the skills
    for(int i=0;i<N_SKILL;i++)
    {
        mPlayerSkill[i].level = 0;
        mPlayerSkill[i].exp = 0;
    }
    resetNSD();

    // create controls
    Button *catButton[N_SKILL_CAT];
    catButton[0] = new Button("Weapons", "g1", this);
    catButton[1] = new Button("Magic", "g2", this);
    catButton[2] = new Button("Craft", "g3", this);
    catButton[3] = new Button("General", "g4", this);
    catButton[4] = new Button("Combat", "g5", this);
    catButton[5] = new Button("E. Resist", "g6", this);
    catButton[6] = new Button("S. Resist", "g7", this);
    catButton[7] = new Button("Hunting", "g8", this);
    catButton[8] = new Button("Stat", "g9", this);

    setContentSize(350, 250);

    for (int i = 0; i < 9; ++i) {
        catButton[i]->setDimension(gcn::Rectangle(0, 0, 60, 20));
        catButton[i]->setPosition(290, 20 * i);
        add(catButton[i]);
    }

    Button *closeButton = new Button("Close", "close", this);
    closeButton->setDimension(gcn::Rectangle(0,0,60,20));
    closeButton->setPosition(290, 230);
    add(closeButton);

    // finsihing touches
    setLocationRelativeTo(getParent());
}

void NewSkillDialog::action(const std::string& eventId)
{
     int osp = startPoint;
    if (eventId == "close")
    {
        setVisible(false);
    }
    else if (eventId == "g1") // weapons group 0-9
    {
        startPoint =0;
    }
    else if (eventId == "g2") // magic group 10-19
    {
        startPoint =10;
    }
    else if (eventId == "g3") // craft group 20-29
    {
        startPoint =20;
    }
    else if (eventId == "g4") // general group 30-39
    {
        startPoint =30;
    }
    else if (eventId == "g5") // combat group 40-49
    {
        startPoint =40;
    }
    else if (eventId == "g6") // e. resist group 50-59
    {
        startPoint =50;
    }
    else if (eventId == "g7") // s resist group 60-69
    {
        startPoint =60;
    }
    else if (eventId == "g8") // hunting group 70-79
    {
        startPoint =70;
    }
    else if (eventId == "g9") // stats group 80-89
    {
        startPoint =80;
    }
    if(osp != startPoint)
    {
        resetNSD();
    }
}

void NewSkillDialog::resetNSD()
{
     for(int a=0;a<N_SKILL_CAT_SIZE;a++)
     {
         if(skill_name[a+startPoint] != "")
         {
             mSkillLabel[a]->setCaption(skill_name[a+startPoint]);
             mSkillLabel[a]->setVisible(true);
             char tmp[5];
             sprintf(tmp, "%d",mPlayerSkill[a+startPoint].level);
             mSkillLevel[a]->setCaption(tmp);
             mSkillLevel[a]->setVisible(true);
             mSkillbar[a]->setProgress(0.0f);
             mSkillbar[a]->setVisible(true);
         }
         else
         {
             mSkillLevel[a]->setVisible(false);
             mSkillLabel[a]->setVisible(false);
             mSkillbar[a]->setVisible(false);
         }
     }
}