IgnitableComponent::IgnitableComponent(Entity& entity, bool alwaysOnFire, ThinkingComponent& r_ThinkingComponent)
	: IgnitableComponentBase(entity, alwaysOnFire, r_ThinkingComponent)
	, onFire(alwaysOnFire)
	, igniteTime(alwaysOnFire ? level.time : 0)
	, immuneUntil(0)
	, fireStarter(nullptr) {
	REGISTER_THINKER(DamageSelf, ThinkingComponent::SCHEDULER_AVERAGE, 100);
	REGISTER_THINKER(DamageArea, ThinkingComponent::SCHEDULER_AVERAGE, 100);
	REGISTER_THINKER(ConsiderStop, ThinkingComponent::SCHEDULER_AVERAGE, STOP_CHECK_TIME);
	REGISTER_THINKER(ConsiderSpread, ThinkingComponent::SCHEDULER_AVERAGE, SPREAD_CHECK_TIME);
}
IgnitableComponent::IgnitableComponent(Entity& entity, bool alwaysOnFire, ThinkingComponent& r_ThinkingComponent)
	: IgnitableComponentBase(entity, alwaysOnFire, r_ThinkingComponent)
	, onFire(alwaysOnFire)
	, igniteTime(alwaysOnFire ? level.time : 0)
	, immuneUntil(0)
	, spreadAt(INT_MAX)
	, fireStarter(nullptr)
	, randomGenerator(rand()) // TODO: Have one PRNG for all of sgame.
	, normalDistribution(0.0f, (float)BASE_AVERAGE_BURN_TIME) {
	REGISTER_THINKER(DamageSelf, ThinkingComponent::SCHEDULER_AVERAGE, 100);
	REGISTER_THINKER(DamageArea, ThinkingComponent::SCHEDULER_AVERAGE, 100);
	REGISTER_THINKER(ConsiderStop, ThinkingComponent::SCHEDULER_AVERAGE, 500);
	REGISTER_THINKER(ConsiderSpread, ThinkingComponent::SCHEDULER_AVERAGE, 500);
}
SpawnerComponent::SpawnerComponent(Entity& entity, TeamComponent& r_TeamComponent,
	ThinkingComponent& r_ThinkingComponent)
	: SpawnerComponentBase(entity, r_TeamComponent, r_ThinkingComponent)
	, dying(false)
	, blockTime(0)
{
	REGISTER_THINKER(Think, ThinkingComponent::SCHEDULER_AVERAGE, 500);
	level.team[GetTeamComponent().Team()].numSpawns++;
}
BuildableComponent::BuildableComponent(Entity& entity, HealthComponent& r_HealthComponent,
	ThinkingComponent& r_ThinkingComponent, TeamComponent& r_TeamComponent)
	: BuildableComponentBase(entity, r_HealthComponent, r_ThinkingComponent, r_TeamComponent)
	, state(CONSTRUCTING)
	, constructionHasFinished(false)
	, marked(false) {
	REGISTER_THINKER(Think, ThinkingComponent::SCHEDULER_AVERAGE, 100);

	// TODO: Make power state a member variable.
	entity.oldEnt->powered = true;
}