Evolution/scripts/ShootController.cs

35 lines
1.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Godot;
using Godot.Collections;
namespace Evolution.scripts;
public partial class ShootController : Node {
[Export] private Node3D blaster;
[Export] private GpuParticles3D shootParticle;
[Export] private Camera3D camera;
public override void _Ready() => GD.Print($"{blaster}: {shootParticle}");
public override void _Input(InputEvent @event) {
switch (@event) {
case InputEventMouseButton eventMouseButton:
shootParticle.Emitting = eventMouseButton.Pressed;
break;
case InputEventMouseMotion eventMouseMotion:
Vector2 mousePosition = eventMouseMotion.Position;
Vector3 raycastFrom = camera.ProjectRayOrigin(mousePosition);
Vector3 raycastTo = camera.ProjectRayNormal(mousePosition);
PhysicsDirectSpaceState3D spaceState = camera.GetWorld3D().DirectSpaceState;
PhysicsRayQueryParameters3D query = PhysicsRayQueryParameters3D.Create(raycastFrom, raycastTo);
Dictionary raycastResults = spaceState.IntersectRay(query);
foreach (KeyValuePair<Variant,Variant> raycastResult in raycastResults) {
if (raycastResult.Key.AsString() == "position") {
GD.Print($"raycastResult.Position = {raycastResult.Value}");
blaster.LookAt(raycastResults.FirstOrDefault().Value.AsVector3());
}
}
break;
}
}
}