Exemplo n.º 1
0
/**
 * Recalc derived stats from base stats + effect bonuses
 */
void StatBlock::applyEffects() {

	// preserve hp/mp states
	prev_maxhp = get(STAT_HP_MAX);
	prev_maxmp = get(STAT_MP_MAX);
	pres_hp = hp;
	pres_mp = mp;

	// calculate primary stats
	// refresh the character menu if there has been a change
	for (size_t i = 0; i < primary.size(); ++i) {
		if (get_primary(i) != primary[i] + effects.bonus_primary[i])
			refresh_stats = true;

		primary_additional[i] = effects.bonus_primary[i];
	}

	calcBase();

	for (size_t i=0; i<STAT_COUNT + DAMAGE_TYPES_COUNT; i++) {
		current[i] = base[i] + effects.bonus[i];
	}

	for (unsigned i=0; i<effects.bonus_resist.size(); i++) {
		vulnerable[i] = vulnerable_base[i] - effects.bonus_resist[i];
	}

	current[STAT_HP_MAX] += (current[STAT_HP_MAX] * current[STAT_HP_PERCENT]) / 100;
	current[STAT_MP_MAX] += (current[STAT_MP_MAX] * current[STAT_MP_PERCENT]) / 100;

	if (hp > get(STAT_HP_MAX)) hp = get(STAT_HP_MAX);
	if (mp > get(STAT_MP_MAX)) mp = get(STAT_MP_MAX);

	speed = speed_default;
}
Exemplo n.º 2
0
void Ship::build()
{
	Collider* c = m_body->getCollider();
	while (c)
	{
		Brick* brick = (Brick*)c->getUserData();

		m_body->queryShape(g_brickShape, transformTransform(Transform(vec3(brick->pos[0], brick->pos[1] + 0.1, brick->pos[2]), Quaternion(vec3(0, 0, 0), 1)), m_body->getTransform()), studCallback, brick);
		m_body->queryShape(g_brickShape, transformTransform(Transform(vec3(brick->pos[0], brick->pos[1] - 0.1, brick->pos[2]), Quaternion(vec3(0, 0, 0), 1)), m_body->getTransform()), studCallback, brick);

		c = c->getNext();
	}


	c = m_body->getCollider();
	while (c)
	{
		Brick* brick = (Brick*)c->getUserData();

		m_body->queryShape(g_brickShape, transformTransform(Transform(vec3(brick->pos[0] - 0.1, brick->pos[1], brick->pos[2]), Quaternion(vec3(0, 0, 0), 1)), m_body->getTransform()), blockCallback, brick);
		m_body->queryShape(g_brickShape, transformTransform(Transform(vec3(brick->pos[0] + 0.1, brick->pos[1], brick->pos[2]), Quaternion(vec3(0, 0, 0), 1)), m_body->getTransform()), blockCallback, brick);
		m_body->queryShape(g_brickShape, transformTransform(Transform(vec3(brick->pos[0], brick->pos[1], brick->pos[2] + 0.1), Quaternion(vec3(0, 0, 0), 1)), m_body->getTransform()), blockCallback, brick);
		m_body->queryShape(g_brickShape, transformTransform(Transform(vec3(brick->pos[0], brick->pos[1], brick->pos[2] - 0.1), Quaternion(vec3(0, 0, 0), 1)), m_body->getTransform()), blockCallback, brick);

		c = c->getNext();
	}



	calcBase();
}
Exemplo n.º 3
0
void Ship::update(float dt)
{
	for (int i = 0; i < m_impulses.size(); ++i)
	{
		BodyDescription descr;
		descr.transform = m_body->getTransform();
		descr.type = BodyType::Dynamic;
		descr.linearMomentum = m_body->getLinearMomentum();
		descr.angularMomentum = m_body->getAngularMomentum();

		//////
		//descr.linearMomentum = vec3(0, 0, 0);
		//descr.angularMomentum = vec3(0, 0, 0);

		Ship* newShip = createShip(m_world, m_entities, descr, vec3(0,0,1));

		setShip(m_impulses[i].brick, newShip, g_tick++);
		newShip->getBody()->applyImpulse(m_impulses[i].impulse);
		newShip->getBody()->applyAngularImpulse(m_impulses[i].angular);
		newShip->calcBase();

	}
	calcBase();
	m_impulses.clear();
}
Exemplo n.º 4
0
void BlockSet::calc( float dt )
{
	//1こで落ちることはなくなったの2個ある場合のみ
	if( baseBlock_ && !baseBlock_->isLocked() && 
	   subBlock_ && !subBlock_->isLocked() ){
		canControl_ = true;
	}
	
	if( baseBlock_ && !baseBlock_->isLocked() && subBlock_ && !subBlock_->isLocked() ){
		//下のものを先に更新
		if( baseBlock_->getPosition().y > subBlock_->getPosition().y ){
			calcBase( dt );
			calcSub( dt );
		}
		else {
			calcSub( dt );
			calcBase( dt );
		}
	}
	else {
		calcBase( dt );
		calcSub( dt );
	}
}
Exemplo n.º 5
0
/**
 * Recalc derived stats from base stats + effect bonuses
 */
void StatBlock::applyEffects() {

	// preserve hp/mp states
	// max HP and MP can't drop below 1
	prev_maxhp = std::max(get(Stats::HP_MAX), 1);
	prev_maxmp = std::max(get(Stats::MP_MAX), 1);
	prev_hp = hp;
	prev_mp = mp;

	// calculate primary stats
	// refresh the character menu if there has been a change
	for (size_t i = 0; i < primary.size(); ++i) {
		if (get_primary(i) != primary[i] + effects.bonus_primary[i])
			refresh_stats = true;

		primary_additional[i] = effects.bonus_primary[i];
	}

	calcBase();

	for (size_t i=0; i<Stats::COUNT + eset->damage_types.count; i++) {
		current[i] = base[i] + effects.bonus[i];
	}

	for (unsigned i=0; i<effects.bonus_resist.size(); i++) {
		vulnerable[i] = vulnerable_base[i] - effects.bonus_resist[i];
	}

	current[Stats::HP_MAX] += (current[Stats::HP_MAX] * current[Stats::HP_PERCENT]) / 100;
	current[Stats::MP_MAX] += (current[Stats::MP_MAX] * current[Stats::MP_PERCENT]) / 100;

	// max HP and MP can't drop below 1
	current[Stats::HP_MAX] = std::max(get(Stats::HP_MAX), 1);
	current[Stats::MP_MAX] = std::max(get(Stats::MP_MAX), 1);

	if (hp > get(Stats::HP_MAX)) hp = get(Stats::HP_MAX);
	if (mp > get(Stats::MP_MAX)) mp = get(Stats::MP_MAX);

	speed = speed_default;
}
Exemplo n.º 6
0
/**
 * Recalc derived stats from base stats + effect bonuses
 */
void StatBlock::applyEffects() {

	// preserve hp/mp states
	prev_maxhp = get(STAT_HP_MAX);
	prev_maxmp = get(STAT_MP_MAX);
	pres_hp = hp;
	pres_mp = mp;

	// calculate primary stats
	// refresh the character menu if there has been a change
	if (get_physical() != physical_character + effects.bonus_physical ||
			get_mental() != mental_character + effects.bonus_mental ||
			get_offense() != offense_character + effects.bonus_offense ||
			get_defense() != defense_character + effects.bonus_defense) refresh_stats = true;

	offense_additional = effects.bonus_offense;
	defense_additional = effects.bonus_defense;
	physical_additional = effects.bonus_physical;
	mental_additional = effects.bonus_mental;

	calcBase();

	for (int i=0; i<STAT_COUNT; i++) {
		current[i] = base[i] + effects.bonus[i];
	}

	for (unsigned i=0; i<effects.bonus_resist.size(); i++) {
		vulnerable[i] = vulnerable_base[i] - effects.bonus_resist[i];
	}

	current[STAT_HP_MAX] += (current[STAT_HP_MAX] * current[STAT_HP_PERCENT]) / 100;
	current[STAT_MP_MAX] += (current[STAT_MP_MAX] * current[STAT_MP_PERCENT]) / 100;

	if (hp > get(STAT_HP_MAX)) hp = get(STAT_HP_MAX);
	if (mp > get(STAT_MP_MAX)) mp = get(STAT_MP_MAX);

	speed = speed_default;
}