Ejemplo n.º 1
0
void Camera::update_following(double dt) {
    ActorPtr following_actor = following_actor_.lock();
    if(following_actor) {
        kmQuaternion actor_rotation = following_actor->absolute_rotation();
        kmVec3 actor_position = following_actor->absolute_position();

        kmVec3 actor_forward;
        kmQuaternionGetForwardVec3RH(&actor_forward, &actor_rotation);

        kmQuaternion initial_rotation;
        kmQuaternionAssign(&initial_rotation, &rotation_);

        float t = ((following_lag_ == 0) ? 1.0 : dt * (1.0 / following_lag_));
        kmQuaternionSlerp(&rotation_, &initial_rotation, &actor_rotation, t);

        kmVec3 rotated_offset;
        kmQuaternionMultiplyVec3(&rotated_offset, &rotation_, &following_offset_);

        //kmMat4RotationQuaternion(&new_rotation_matrix, &rotation_);
        //kmVec3MultiplyMat4(&rotated_offset, &following_offset_, &new_rotation_matrix);
        kmVec3Add(&position_, &rotated_offset, &actor_position);

        update_from_parent();
    } else {
        //The actor was destroyed, so reset
        following_actor_ = ActorRef();
    }
}
Ejemplo n.º 2
0
ActorRef IActor::Find(ActorSelector const& selector) const
{
	if (selector(m_self.lock()))
	{
		return m_self;
	}

	for (auto&& child : m_children)
	{
		ActorRef&& find = child->Find(selector);
		if (!find.expired())
		{
			return find;
		}
	}

	return ActorRef();
}
Ejemplo n.º 3
0
ActorRef TcpClient::create(const char* host, uint16_t port) {
return ActorRef(new TcpClient(host, port));
}
Ejemplo n.º 4
0
ActorRef Splitter::create(ActorRef input) {
	return ActorRef(new Splitter(input));
}
Ejemplo n.º 5
0
ActorRef LineFramer::create(ActorRef link) {
	return ActorRef(new LineFramer(link));
}
Ejemplo n.º 6
0
//_____________________________________________________________
//
ActorRef TcpServer::create(ActorRef wifi, uint16_t port) {
return ActorRef(new TcpServer(wifi, port));
}
Ejemplo n.º 7
0
ActorRef Tcp::create() {
	return ActorRef(new Tcp());
}