mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-29 01:32:50 +00:00
64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
|
using Microsoft.Xna.Framework;
|
|||
|
using ProjectZ.InGame.GameObjects.Base;
|
|||
|
using ProjectZ.InGame.GameObjects.Base.CObjects;
|
|||
|
using ProjectZ.InGame.GameObjects.Base.Components;
|
|||
|
using ProjectZ.InGame.Things;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace ProjectZ.InGame.GameObjects.Things
|
|||
|
{
|
|||
|
public class ObjNote : GameObject
|
|||
|
{
|
|||
|
private readonly CSprite _sprite;
|
|||
|
private readonly Vector3 _startPosition;
|
|||
|
private readonly Vector3 _endPosition;
|
|||
|
private readonly Vector2 _moveDir;
|
|||
|
|
|||
|
private float _counter;
|
|||
|
private const int LiveTime = 1000;
|
|||
|
|
|||
|
public ObjNote(Map.Map map, Vector2 position, int direction) : base(map)
|
|||
|
{
|
|||
|
EntityPosition = new CPosition(position.X, position.Y, 8);
|
|||
|
EntitySize = new Rectangle(-4, -32, 8, 32);
|
|||
|
|
|||
|
_startPosition = new Vector3(EntityPosition.X, EntityPosition.Y, EntityPosition.Z);
|
|||
|
_endPosition = _startPosition + new Vector3(15 * direction, 0, 17);
|
|||
|
|
|||
|
_moveDir = new Vector2(_endPosition.X, _endPosition.Y + _endPosition.Z) -
|
|||
|
new Vector2(_startPosition.X, _startPosition.Y + _startPosition.Z);
|
|||
|
_moveDir.Normalize();
|
|||
|
|
|||
|
_sprite = new CSprite("note", EntityPosition, Vector2.Zero);
|
|||
|
_sprite.Color = Color.Transparent;
|
|||
|
|
|||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
|||
|
AddComponent(DrawComponent.Index, new DrawCSpriteComponent(_sprite, Values.LayerPlayer));
|
|||
|
}
|
|||
|
|
|||
|
private void Update()
|
|||
|
{
|
|||
|
_counter += Game1.DeltaTime;
|
|||
|
|
|||
|
// fade in/out
|
|||
|
var transparency = 1.0f;
|
|||
|
if (_counter > LiveTime - 100)
|
|||
|
transparency = (LiveTime - _counter) / 100f;
|
|||
|
else if (_counter < 100)
|
|||
|
transparency = _counter / 100;
|
|||
|
_sprite.Color = Color.White * transparency;
|
|||
|
|
|||
|
// update the position
|
|||
|
var percentage = _counter / LiveTime;
|
|||
|
var newPosition = Vector3.Lerp(_startPosition, _endPosition, percentage);
|
|||
|
EntityPosition.Set(newPosition);
|
|||
|
|
|||
|
// offset to the sides
|
|||
|
_sprite.DrawOffset = new Vector2(-3, -12) + _moveDir * (float)MathF.Sin(_counter * 0.015f) * 1.25f;
|
|||
|
|
|||
|
// despawn
|
|||
|
if (_counter > LiveTime)
|
|||
|
Map.Objects.DeleteObjects.Add(this);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|