Example #1
0
	void Door::onImpact(DamageType damage_type, float damage, const float3 &force, EntityRef source) {
		if(!isOpened() && damage_type == DamageType::bludgeoning) {
			float door_force = dot(force.xz(), m_open_in_dir);
			if(fabs(door_force) >= 8.0f && classId() != DoorClassId::sliding) {
				bool opening_in = door_force > 0.0f;

				if(classId() == DoorClassId::rotating_in && !opening_in)
					return;
				if(classId() == DoorClassId::rotating_out && opening_in)
					return;

				changeState(opening_in? DoorState::opened_in : DoorState::opened_out);
			}
		}
	}