using Smoll;
|
|
using Raylib_cs;
|
|
using System.Numerics;
|
|
using Smoll.Ex1;
|
|
|
|
namespace Smoll.Ex2
|
|
{
|
|
class ExampleShootingInputComponent : Component {
|
|
Transform2DComponent? transform;
|
|
ArrowComponent? arrow;
|
|
|
|
public ExampleShootingInputComponent() {
|
|
}
|
|
|
|
public override void OnAttached()
|
|
{
|
|
base.OnAttached();
|
|
transform = owner.GetComponent<Transform2DComponent>();
|
|
arrow = owner.GetComponent<ArrowComponent>();
|
|
}
|
|
|
|
public override void Update(float deltaTimeSeconds)
|
|
{
|
|
transform ??= owner.GetComponent<Transform2DComponent>();
|
|
if(transform == null) throw new Exception("Example Input used on immovable object");
|
|
arrow ??= owner.GetComponent<ArrowComponent>();
|
|
if(arrow == null) throw new Exception("Example Shooter used on arrowless object");
|
|
if(Raylib.IsKeyPressed(KeyboardKey.Space)) {
|
|
var shoot = new Entity(owner.layers.First());
|
|
shoot.zOrder = -5;
|
|
var details = arrow.OriginAndVector();
|
|
var selfTransform = transform.AbsoluteTransform();
|
|
shoot.Attach(new Transform2DComponent((float)details.Item1.Real, (float)details.Item1.Imaginary, selfTransform.angle, selfTransform.scale));
|
|
shoot.Attach(new TimeToLiveComponent(4f));
|
|
shoot.Attach(new SpriteComponent("Beam.png"));
|
|
shoot.Attach(new InertiaComponent(1.0f, 0.001f*(float)details.Item2.Real, 0.001f*(float)details.Item2.Imaginary));
|
|
}
|
|
}
|
|
}
|
|
}
|