LADXHD/InGame/GameObjects/Things/ObjAquaticPlant.cs
2023-12-14 17:21:22 -05:00

58 lines
2.2 KiB
C#

using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using ProjectZ.InGame.GameObjects.Base;
using ProjectZ.InGame.GameObjects.Base.CObjects;
using ProjectZ.InGame.GameObjects.Base.Components;
using ProjectZ.InGame.Things;
namespace ProjectZ.InGame.GameObjects.Things
{
internal class ObjAquaticPlant : GameObject
{
private readonly CSprite _topPlant;
private readonly CSprite _bottomPlant;
private double _counter;
private readonly float _topLeafDivider;
private readonly float _bottomLeafDivider;
public ObjAquaticPlant() : base("aquatic_plant") { }
public ObjAquaticPlant(Map.Map map, int posX, int posY) : base(map)
{
var sourceTop = Resources.SourceRectangle("aquatic_plant_top");
var sourceBottom = Resources.SourceRectangle("aquatic_plant_bottom");
EntityPosition = new CPosition(posX, posY + 16, 0);
EntitySize = new Rectangle(0, 0, 16, 16);
_topPlant = new CSprite(Resources.SprObjects, new CPosition(posX + 1, posY, 0), sourceTop, Vector2.Zero);
_bottomPlant = new CSprite(Resources.SprObjects, new CPosition(posX + 7, posY + 10, 0), sourceBottom, Vector2.Zero);
// so not all leafs move in parallel
_counter = Game1.RandomNumber.Next(0, 450);
_topLeafDivider = Game1.RandomNumber.Next(350, 450);
_bottomLeafDivider = Game1.RandomNumber.Next(250, 350);
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
AddComponent(DrawComponent.Index, new DrawComponent(Draw, Values.LayerBottom, EntityPosition));
}
public void Update()
{
_counter += Game1.DeltaTime;
_topPlant.DrawOffset.X = (float)Math.Sin(_counter / _topLeafDivider);
_bottomPlant.DrawOffset.X = (float)Math.Sin(_counter / _bottomLeafDivider);
}
public void Draw(SpriteBatch spriteBatch)
{
// draw top and bottom leafs
_topPlant.Draw(spriteBatch);
_bottomPlant.Draw(spriteBatch);
}
}
}