public override void OnMouseDown(Troll3D.MouseEvent e) { if (e.mouse_.rightbutton) { RaycastResult result = TRaycast.FireRayFromMouse(); if (result.GetEntity() != null) { MeshRenderer mr = ( MeshRenderer )result.GetEntity().GetComponent(ComponentType.MeshRenderer); mr.material_.SetMainColor(1.0f, 1.0f, 0.0f, 1.0F); } } }
public override void OnMouseDown(MouseEvent e) { base.OnMouseDown(e); if (e.mouse_.rightbutton) { RaycastResult result = TRaycast.FireRayFromMouse(); if (result.GetEntity() == Entity) { IsBeingDragged = true; IntersectionPoint = result.GetIntersectionPoint(); DraggedOffset = Entity.transform_.WorldPosition() - IntersectionPoint; } } }
public override void OnMouseMove(MouseEvent e) { if (IsBeingDragged) { // Pour savoir comment déplacer l'objet, on a besoin de récupérer le plan de la caméra // Un plan est définit par un point et deux vecteurs directeurs // On commence par récupérer les 2 vecteurs directeurs, en convertissant les vecteurs up et right // à la caméra Vector3 right = (Vector3)(Vector4.Transform(new Vector4(1.0f, 0.0f, 0.0f, 0.0f), Camera.Main.m_transform.GetViewMatrix())); Vector3 up = ( Vector3 )(Vector4.Transform(new Vector4(0.0f, 1.0f, 0.0f, 0.0f), Camera.Main.m_transform.GetViewMatrix())); // On construit le plan en utilisant le point d'intersection Troll3D.Plane plane = new Troll3D.Plane(IntersectionPoint, right, up); // On récupère le rayon correspondant à la position actuelle de la souris dans l'espace TrollRay ray = TRaycast.GetRayFromMouse(); Vector3 point = plane.IntersectionWithLine(new LineGeometry(ray.start_, ray.direction_)); Entity.transform_.SetPosition(point + DraggedOffset); } }