Пример #1
0
void ImplItem::bind(NameSema& sema) const {
    sema.push_scope();
    bind_ast_type_params(sema);
    if (trait())
        trait()->bind(sema);
    ast_type()->bind(sema);
    for (auto&& fn : methods())
        fn->bind(sema);
    sema.lambda_depth_ -= num_ast_type_params();
    sema.pop_scope();
}
Пример #2
0
int GameCritterObject::statBonus(unsigned int num)
{
    if (num >= _statsBonus.size()) throw Exception("GameCritterObject::statBonus(num) - num out of range:" + std::to_string(num));
    int bonus = 0;
    if (trait(TRAITS_GIFTED)) bonus += 1;
    switch (num)
    {
        case STATS_STRENGTH:
            if (trait(TRAITS_BRUISER)) bonus += 2;
            break;
        case STATS_AGILITY:
            if (trait(TRAITS_SMALL_FRAME)) bonus += 1;
            break;
    }
    return _statsBonus.at(num) + bonus;
}
Пример #3
0
bool PlayerCreateState::_traitToggle(unsigned int num)
{
    auto player = Game::getInstance()->player();
    if (player->trait(num))
    {
        player->setTrait(num, 0);
        return true;
    }
    else
    {
        unsigned int selectedTraits = 0;
        for (unsigned int i = 0; i != 16; ++i) if (player->trait(i)) selectedTraits++;
        if (selectedTraits < 2)
        {
            player->setTrait(num, 1);
            return true;
        }
    }
    return false;
}
Пример #4
0
void NewGameState::_changeCharacter()
{
    auto dude = _characters.at(_selectedCharacter);
    std::stringstream ss;
    auto msg = ResourceManager::msgFileType("text/english/game/stat.msg");
    ss << msg->message(100)->text() << " " << (dude->stat(0) < 10 ? "0" : "") << dude->stat(0) << "\n"
       << msg->message(101)->text() << " " << (dude->stat(1) < 10 ? "0" : "") << dude->stat(1) << "\n"
       << msg->message(102)->text() << " " << (dude->stat(2) < 10 ? "0" : "") << dude->stat(2) << "\n"
       << msg->message(103)->text() << " " << (dude->stat(3) < 10 ? "0" : "") << dude->stat(3) << "\n"
       << msg->message(104)->text() << " " << (dude->stat(4) < 10 ? "0" : "") << dude->stat(4) << "\n"
       << msg->message(105)->text() << " " << (dude->stat(5) < 10 ? "0" : "") << dude->stat(5) << "\n"
       << msg->message(106)->text() << " " << (dude->stat(6) < 10 ? "0" : "") << dude->stat(6) << "\n";
    getTextArea("stats_1")->setText(ss.str());

    ss.str("");
    ss << _statToString(dude->stat(0)) << "\n"
       << _statToString(dude->stat(1)) << "\n"
       << _statToString(dude->stat(2)) << "\n"
       << _statToString(dude->stat(3)) << "\n"
       << _statToString(dude->stat(4)) << "\n"
       << _statToString(dude->stat(5)) << "\n"
       << _statToString(dude->stat(6)) << "\n";
    getTextArea("stats_2")->setText(ss.str());

    getTextArea("bio")->setText(dude->biography());
    getTextArea("name")->setText(dude->name());
    getImageList("images")->setCurrentImage(_selectedCharacter);

    auto msgMisc = ResourceManager::msgFileType("text/english/game/misc.msg");

    std::string stats3 = msgMisc->message(16)->text() +  "\n"    // Hit Points
                       + msg->message(109)->text()    + "\n"     // Armor Class
                       + msgMisc->message(15)->text() + "\n"     // Action Points
                       + msg->message(111)->text()    + "\n";    // Melee Damage

    std::string stats3_values = std::to_string(dude->hitPointsMax()) + "/" + std::to_string(dude->hitPointsMax()) + "\n"
                              + std::to_string(dude->armorClass())   + "\n"
                              + std::to_string(dude->actionPoints()) + "\n"
                              + std::to_string(dude->meleeDamage())  + "\n";

    for (unsigned int i=0; i != 17; ++i) if (dude->skill(i))
    {
        stats3 += "\n" + ResourceManager::msgFileType("text/english/game/skill.msg")->message(100 + i)->text();
        stats3_values += "\n" + std::to_string(dude->skillValue(i)) + "%";
    }
    for (unsigned int i=0; i != 16; ++i) if (dude->trait(i))
    {
        stats3 += "\n" + ResourceManager::msgFileType("text/english/game/trait.msg")->message(100 + i)->text();
    }
    getTextArea("stats_3")->setText(stats3);
    getTextArea("stats3_values")->setText(stats3_values);
}
Пример #5
0
int ExportSolarPhenotype (individual *indlist)
{
  individual *ind;
  char mkrname[NAMESIZE], tempstr[NAMESIZE];
  int i;
  double currentpos, value;
  

  currentpos = 0;
  // Makes the marker file
  cfopen ("solar.phe", "w");

  // Prints the trait names
  fprintf(F,"id");
  for (i = 1; i<=numberoftraits(); i++)
  {
    // Remove white spaces in marker name
    RemoveWhiteSpace(tempstr, GetName(traitnames, i));
    strncpy(mkrname, tempstr, 18);

    fprintf(F, ",%s", mkrname);
  }
  fprintf(F,"\n");

  for (ind = indlist; ind; ind = ind->next)
  {
    fprintf(F, "%s", ind->id);
    for (i = 1; i<=numberoftraits(); i++)
    {
      fprintf(F, ",");
      if (!traitmiss(ind, i)) {
	value = trait(ind, i);
	// Print only integer part if it is an integer
	if ( (int) value == value) {
	  fprintf(F, "%d", (int) value);
	}
	else {
	  fprintf(F, "%f", value);
	}
      }
    }
    fprintf(F,"\n");
  }

  fclose(F);
  puts("Made Solar phenotype file");
  return 0;
}
Пример #6
0
void Noun::onTransferZones( NodeZone * pNewZone, NodeZone * pOldZone )
{
	// notify our traits
	for(int i=0;i<traitCount();++i)
		trait(i)->onTransferZones( pNewZone, pOldZone );
}
Пример #7
0
int GameCritterObject::skillValue(unsigned int num)
{
    if (num >= _skills.size()) throw Exception("GameCritterObject::skillValue(num) - num out of range:" + std::to_string(num));
    int value = 0;
    switch(num)
    {
        case SKILLS_SMALL_GUNS:
            value += 5 + 4 * statTotal(STATS_AGILITY);
            if (trait(TRAITS_GOOD_NATURED)) value -= 10;
            break;
        case SKILLS_BIG_GUNS:
            value += 2*statTotal(STATS_AGILITY);
            if (trait(TRAITS_GOOD_NATURED)) value -= 10;
            break;
        case SKILLS_ENERGY_WEAPONS:
            value += 2*statTotal(STATS_AGILITY);
            if (trait(TRAITS_GOOD_NATURED)) value -= 10;
            break;
        case SKILLS_UNARMED:
            value += 30 + 2*(statTotal(STATS_AGILITY) + statTotal(STATS_STRENGTH));
            if (trait(TRAITS_GOOD_NATURED)) value -= 10;
            break;
        case SKILLS_MELEE_WEAPONS:
            value += 20 + 2*(statTotal(STATS_AGILITY) + statTotal(STATS_STRENGTH));
            if (trait(TRAITS_GOOD_NATURED)) value -= 10;
            break;
        case SKILLS_THROWING:
            value += 4*statTotal(STATS_AGILITY);
            if (trait(TRAITS_GOOD_NATURED)) value -= 10;
            break;
        case SKILLS_FIRST_AID:
            value += 2*(statTotal(STATS_PERCEPTION) + statTotal(STATS_INTELLIGENCE));
            if (trait(TRAITS_GOOD_NATURED)) value += 15;
            break;
        case SKILLS_DOCTOR:
            value += 5 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_INTELLIGENCE));
            if (trait(TRAITS_GOOD_NATURED)) value += 15;
            break;
        case SKILLS_SNEAK:
            value += 5 + 3*statTotal(STATS_AGILITY);
            break;
        case SKILLS_LOCKPICK:
            value += 10 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_AGILITY));
            break;
        case SKILLS_STEAL:
            value += 3*statTotal(STATS_AGILITY);
            break;
        case SKILLS_TRAPS:
            value += 10 + (statTotal(STATS_PERCEPTION) + statTotal(STATS_AGILITY));
            break;
        case SKILLS_SCIENCE:
            value += 4*statTotal(STATS_INTELLIGENCE);
            break;
        case SKILLS_REPAIR:
            value += 3*statTotal(STATS_INTELLIGENCE);
            break;
        case SKILLS_SPEECH:
            value += 5*statTotal(STATS_CHARISMA);
            if (trait(TRAITS_GOOD_NATURED)) value += 15;
            break;
        case SKILLS_BARTER:
            value += 4*statTotal(STATS_CHARISMA);
            if (trait(TRAITS_GOOD_NATURED)) value += 15;
            break;
        case SKILLS_GAMBLING:
            value += 5*statTotal(STATS_LUCK);
            break;
        case SKILLS_OUTDOORSMAN:
            value += 2 * (statTotal(STATS_ENDURANCE) + statTotal(STATS_INTELLIGENCE));
            break;
    }

    if (trait(TRAITS_GIFTED))
    {
        value -= 10;
    }

    if (skill(num))
    {
        value += 20;
    }

    return value;
}
Пример #8
0
void PlayerCreateState::think()
{
    State::think();
    auto player = Game::getInstance()->player();
    auto msgEditor = ResourceManager::msgFileType("text/english/game/editor.msg");

    _labels.at("name")->setText(player->name());
    _labels.at("age")->setText(msgEditor->message(104))->appendText(" ")->appendText(std::to_string(player->age()));
    _labels.at("gender")->setText(msgEditor->message(player->gender() == 0 ? 107 : 108)); // 0 - male   1 - female

    _counters.at("statsPoints")->setNumber(player->statsPoints());
    _counters.at("skillsPoints")->setNumber(player->skillsPoints());

    _labels.at("health_1")->setText(msgEditor->message(300))->appendText("  ")->appendText(std::to_string(player->hitPointsMax()))->appendText("/")->appendText(std::to_string(player->hitPointsMax()));
    _labels.at("params_1_value")->setText(player->armorClass());
    _labels.at("params_2_value")->setText(player->actionPoints());
    _labels.at("params_3_value")->setText(player->carryWeightMax());
    _labels.at("params_4_value")->setText(player->meleeDamage());
    _labels.at("params_5_value")->setText(player->damageResistance())->appendText("%");
    _labels.at("params_6_value")->setText(player->poisonResistance())->appendText("%");
    _labels.at("params_7_value")->setText(player->radiationResistance())->appendText("%");
    _labels.at("params_8_value")->setText(player->sequence());
    _labels.at("params_9_value")->setText(player->healingRate());
    _labels.at("params_10_value")->setText(player->criticalChance())->appendText("%");

    // Stats counters and labels
    for (unsigned int i = 0; i < 7; i++)
    {
        std::stringstream ss;
        ss << "stats_" << (i+1);
        unsigned int val = player->statTotal(i);
        _counters.at(ss.str())->setNumber(val);
        _counters.at(ss.str())->setColor(BigCounter::COLOR_WHITE);
        if (val > 10)
        {
            val = 10;
            _counters.at(ss.str())->setColor(BigCounter::COLOR_RED);
        }
        _labels.at(ss.str())->setText(msgEditor->message(199 + (val < 1 ? 1 : val)));
    }

    // Skills values
    for (unsigned int i = 0; i != 18; ++i)
    {
        std::stringstream ss;
        ss << "skills_" << (i + 1) << "_value";
        _labels.at(ss.str())->setText(player->skillValue(i))->appendText("%");
    }

    // Default labels colors
    for(auto it = _labels.begin(); it != _labels.end(); ++it)
    {
        std::string name = it->first;

        auto font1_3ff800ff = ResourceManager::font("font1.aaf", 0x3ff800ff);
        auto font1_a0a0a0ff = ResourceManager::font("font1.aaf", 0xa0a0a0ff);
        auto font1_183018ff = ResourceManager::font("font1.aaf", 0x183018ff);

        if (name.find("stats_") == 0 || name.find("params_") == 0)
        {
            it->second->setFont(font1_3ff800ff);
        }

        if (name.find("traits_") == 0)
        {
            unsigned int number = atoi(name.substr(7).c_str());
            it->second->setFont(player->trait(number - 1) ? font1_a0a0a0ff : font1_3ff800ff);
        }

        if (name.find("skills_") == 0)
        {
            unsigned int number = atoi(name.substr(7).c_str());
            it->second->setFont(player->skill(number - 1) ? font1_a0a0a0ff : font1_3ff800ff);
        }

        if (name.find("health_") == 0)
        {
            it->second->setFont(name.compare("health_1") == 0 ? font1_3ff800ff : font1_183018ff);
        }
    }

    // Selected labels colors
    for(auto it = _labels.begin(); it != _labels.end(); ++it)
    {
        if (_selectedLabel != it->second) continue;

        std::string name = it->first;

        _title->setText(_titles.at(name));
        _description->setText(_descriptions.at(name));
        _selectedImage->setTexture(_images.at(name)->texture());

        auto font1_ffff7fff = ResourceManager::font("font1.aaf", 0xffff7fff);
        auto font1_ffffffff = ResourceManager::font("font1.aaf", 0xffffffff);
        auto font1_707820ff = ResourceManager::font("font1.aaf", 0x707820ff);

        if (name.find("stats_") == 0)
        {
            it->second->setFont(font1_ffff7fff);
        }

        if (name.find("params_") == 0)
        {
            it->second->setFont(font1_ffff7fff);
            _labels.at(name+"_value")->setFont(font1_ffff7fff);
        }

        if (name.find("traits_") == 0)
        {
            unsigned int number = atoi(name.substr(7).c_str());
            it->second->setFont(player->trait(number - 1) ? font1_ffffffff : font1_ffff7fff);
        }

        if (name.find("skills_") == 0)
        {
            unsigned int number = atoi(name.substr(7).c_str());
            it->second->setFont(player->skill(number - 1) ? font1_ffffffff : font1_ffff7fff);
            _labels.at(name+"_value")->setFont(player->skill(number - 1) ? font1_ffffffff : font1_ffff7fff);
        }

        if (name.find("health_") == 0)
        {
            it->second->setFont(name.compare("health_1") == 0 ? font1_ffff7fff : font1_707820ff);
        }
    }

}
Пример #9
0
void ExportMendelPedigree (individual *indlist)
{
  int i;
  namelist *pedigree, *pedlist;
  markerlist *marker;

  individual *ind;
  pedlist = MakePedigreeList(indlist);

  cfopen ("mendel.ped", "w");
  fprintf(F, "(I4,A15,A8)\n");
  fprintf(F, "(3A11,3A2");

  // Add marker info
  if (numberofmarkers()>0)
    fprintf(F, ",%d(1X,A7)", numberofmarkers());
  if (numberoftraits()>0)
    fprintf(F, ",%d(1X,A8)", numberoftraits());

  fprintf(F, ")\n");

  for (pedigree = pedlist; pedigree; pedigree = pedigree ->next) {
    fprintf(F, "%-4d%-15s\n",FamilySize(indlist, pedigree->name), pedigree->name);

    for (ind = indlist; ind; ind = ind->next)
    {
      if (!strcmpl(pedigree->name, ind->pedigree)) {
	if (founder(ind)) {
	  fprintf(F, "%-11s%-11s%-11s", ind->id, "","");
	}
	else {
 	  fprintf(F, "%-11s%-11s%-11s", ind->id, ind->father->id, ind->mother->id);
	}
	// Spaces here for non-existing disease status and monozygotic twin status?
	fprintf(F, "%2s    ", ind->sex==S_MALE ? "M" : "F");

        // Now write the marker information
     
	for (i=1; i<=numberofmarkers(); i++) {
	  marker = markernumber(ind, order[i]);
	  if (marker->allele1 == 0 || marker->allele2 == 0) {
	    fprintf(F, " %7s", "");
	  }
	  else {
	    //	    fprintf(F, " %3d/%-3d", marker->allele1, marker->allele2);
	    fprintf(F, " %3c/%-3c", 64+marker->allele1, 64+marker->allele2);
	  }
	}

        // Then write the trait information
	for (i=1; i<=numberoftraits(); i++) {
	  if (!traitmiss(ind, i)) 
	    fprintf(F, " %8f", trait(ind, i));
	  else
	    fprintf(F, " %8s", "");

	}
        fprintf(F, "\n");
      }
    }
  }

  freelist(pedlist);  
  fclose(F);
}