Beispiel #1
0
bool Camera::_get(const StringName& p_name,Variant &r_ret) const {

	if (p_name=="projection") {
		r_ret= mode;
	} else if (p_name=="fov" || p_name=="fovy" || p_name=="fovx")
		r_ret= fov;
	else if (p_name=="size" || p_name=="sizex" || p_name=="sizey")
		r_ret= size;
	else if (p_name=="near")
		r_ret= near;
	else if (p_name=="far")
		r_ret= far;
	else if (p_name=="keep_aspect")
		r_ret= int(keep_aspect);
	else if (p_name=="current") {

		if (is_inside_tree() && get_tree()->is_node_being_edited(this)) {
			r_ret=current;
		} else {
			r_ret=is_current();
		}
	} else if (p_name=="visible_layers") {
		r_ret=get_visible_layers();
	} else if (p_name=="h_offset") {
		r_ret=get_h_offset();
	} else if (p_name=="v_offset") {
		r_ret=get_v_offset();
	} else if (p_name=="environment") {
		r_ret=get_environment();
	} else
		return false;

	return true;
}
Beispiel #2
0
bool PathFollow2D::_get(const StringName& p_name,Variant &r_ret) const{

	if (p_name==SceneStringNames::get_singleton()->offset) {
		r_ret=get_offset();
	} else if (p_name==SceneStringNames::get_singleton()->unit_offset) {
		r_ret=get_unit_offset();
	} else if (p_name==SceneStringNames::get_singleton()->rotate) {
		r_ret=is_rotating();
	} else if (p_name==SceneStringNames::get_singleton()->v_offset) {
		r_ret=get_v_offset();
	} else if (p_name==SceneStringNames::get_singleton()->h_offset) {
		r_ret=get_h_offset();
	} else if (String(p_name)=="cubic_interp") {
		r_ret=cubic;
	} else if (String(p_name)=="loop") {
		r_ret=loop;
	} else if (String(p_name)=="lookahead") {
		r_ret=lookahead;
	} else
		return false;

	return true;

}
Beispiel #3
0
void OrientedPathFollow::_update_transform() {

	if (!path)
		return;

	Ref<Curve3D> c = path->get_curve();
	if (!c.is_valid())
		return;

	int count = c->get_point_count();
	if (count < 2)
		return;

	if (delta_offset == 0) {
		return;
	}

	float offset = get_offset();
	float bl = c->get_baked_length();
	float bi = c->get_bake_interval();
	float o = offset;
	float o_next = offset + bi;

	if (has_loop()) {
		o = Math::fposmod(o, bl);
		o_next = Math::fposmod(o_next, bl);
	} else if (o_next >= bl) {
		o = bl - bi;
		o_next = bl;
	}

	bool cubic = get_cubic_interpolation();
	Vector3 pos = c->interpolate_baked(o, cubic);
	Vector3 forward = c->interpolate_baked(o_next, cubic) - pos;

	if (forward.length_squared() < CMP_EPSILON2)
		forward = Vector3(0, 0, 1);
	else
		forward.normalize();

	Vector3 up = c->interpolate_baked_up_vector(o, true);

	if (o_next < o) {
		Vector3 up1 = c->interpolate_baked_up_vector(o_next, true);
		Vector3 axis = up.cross(up1);

		if (axis.length_squared() < CMP_EPSILON2)
			axis = forward;
		else
			axis.normalize();

		up.rotate(axis, up.angle_to(up1) * 0.5f);
	}

	Transform t = get_transform();
	Vector3 scale = t.basis.get_scale();

	Vector3 sideways = up.cross(forward).normalized();
	up = forward.cross(sideways).normalized();

	t.basis.set(sideways, up, forward);
	t.basis.scale_local(scale);

	t.origin = pos + sideways * get_h_offset() + up * get_v_offset();

	set_transform(t);
}