// // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(float delta) { if (Visible) { GetNode <Node2D>("Node2D").Visible = true; Godot.Camera cam = GetTree().GetRoot().GetCamera(); if (cam != null) { var target = GetParent <PhysicalEntity>(); GetNode <Label>("Node2D/Info").SetText(target.GetTargettingInfoText()); GetNode <Node2D>("Node2D").SetPosition(cam.UnprojectPosition(GetGlobalTransform().origin)); Spatial player = GetTree().GetRoot().GetNode <Spatial>("Spatial/Player"); string distanceStr = ""; if (player != null) { float distance = player.GetGlobalTransform().origin.DistanceTo(target.GetGlobalTransform().origin); if (distance >= 1000) { distance /= 1000; distanceStr = string.Format("{0:0.0}km", distance); } else { distanceStr = string.Format("{0:0}m", distance); } } GetNode <Label>("Node2D/Distance").SetText(distanceStr); } } else { GetNode <Node2D>("Node2D").Visible = false; } }
// Called when the node enters the scene tree for the first time. public override void _Process(float delta) { t += delta; GetNode <Label>("Text").Visible = ((t * 1000) % 500) > 250; PhysicalEntity player = GetTree().GetRoot().GetNode <PhysicalEntity>("Spatial/Player"); Spatial target = player.GetLockedOnTarget(); if (target != null) { Vector3 point = target.GetGlobalTransform().origin; Godot.Camera cam = GetTree().GetRoot().GetCamera(); if (cam == null) { return; } float distance = player.GetGlobalTransform().origin.DistanceTo(point); if (distance >= 1000) { distance /= 1000; GetNode <Label>("Distance").SetText(string.Format("{0:0.0}km", distance)); } else { GetNode <Label>("Distance").SetText(string.Format("{0:0}m", distance)); } if (!cam.IsPositionBehind(point)) { Viewport vp = cam.GetViewport(); Vector2 pos = cam.UnprojectPosition(point); Viewport vp2d = GetViewport(); Vector2 posx = new Vector2( pos.x / (vp.GetSize().x / vp2d.GetSize().x), pos.y / (vp.GetSize().y / vp2d.GetSize().y) ); this.SetPosition(posx); this.Visible = true; } else { this.Visible = false; } } }
public override void InputEvent(Node camera, InputEvent @event, Vector3 click_position, Vector3 click_normal, int shape_idx) { GD.Print("GIZMO SCALE INPUT EVENT"); Godot.Camera cam = (Godot.Camera)camera; if (shape_idx != 0) { LatestAngle = shape_idx; LatestClickStart = click_position; } if (@event is InputEventMouseButton) { GizmoPressed = @event.IsActionPressed("mouse_left_click"); ClickStart = cam.UnprojectPosition(click_position); if (ActiveAxis != Axis.NONE) { EmitSignal("HandlePressed"); } if (@event.IsActionReleased("mouse_left_click")) { StartTrans = CurrentObject.GlobalTransform; EmitSignal("HandleUnpressed"); } } if (@event is InputEventMouseMotion && GizmoPressed && ActiveAxis != Axis.NONE) { GD.Print(LatestAngle); InputEventMouseMotion Event = (InputEventMouseMotion)@event; Godot.Spatial tempObj = GetObject(); if (tempObj == null) { return; } if (CurrentObject == null) { CurrentObject = tempObj; StartTrans = CurrentObject.GlobalTransform; } else if (CurrentObject.Name != tempObj.Name) { CurrentObject = tempObj; StartTrans = CurrentObject.GlobalTransform; } if (CurrentObject.Name == "env") { return; } Vector2 Origin2d = cam.UnprojectPosition(CurrentObject.GlobalTransform.origin); Vector2 MousePos = Event.Position; Vector2 StartVector = ClickStart - Origin2d; Vector2 CurrVector = MousePos - Origin2d; // float AngleCurr = (float) (180 / Math.PI) * StartVector.AngleTo(CurrVector); float AngleCurr = StartVector.AngleTo(CurrVector); Vector3 PreviousObjectRotation = CurrentObject.RotationDegrees; Vector3 CurrentObjectRotation = PreviousObjectRotation; Transform rotTrans = StartTrans; Vector3 rotation = rotTrans.basis.GetEuler(); if (ActiveAxis == Axis.X) { rotTrans.basis = StartTrans.basis.Rotated(new Vector3(1, 0, 0), AngleCurr); } else if (ActiveAxis == Axis.Y) { rotation.y = -1 * AngleCurr; rotTrans.basis = StartTrans.basis.Rotated(new Vector3(0, 1, 0), -1 * AngleCurr); } else { rotation.z = AngleCurr; rotTrans.basis = StartTrans.basis.Rotated(new Vector3(0, 0, 1), AngleCurr); } // rotTrans.basis = new Basis(rotation); CurrentObject.GlobalTransform = rotTrans; } }