mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
110 lines
4 KiB
C#
110 lines
4 KiB
C#
|
using Microsoft.Xna.Framework;
|
|||
|
using Microsoft.Xna.Framework.Graphics;
|
|||
|
using ProjectZ.Base;
|
|||
|
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 ObjPowder : GameObject
|
|||
|
{
|
|||
|
private Rectangle _sourceRectangle = new Rectangle(1, 145, 4, 4);
|
|||
|
|
|||
|
private Vector3[] _points = new Vector3[3];
|
|||
|
private Vector3[] _velocity = new Vector3[3];
|
|||
|
private float[] _live = new float[3];
|
|||
|
|
|||
|
private float _gravity = -0.05f;
|
|||
|
private bool _damage;
|
|||
|
|
|||
|
public ObjPowder(Map.Map map, float posX, float posY, float posZ, bool playerPowder) : base(map)
|
|||
|
{
|
|||
|
EntityPosition = new CPosition(posX, posY, posZ);
|
|||
|
EntitySize = new Rectangle(-8, -16, 16, 16);
|
|||
|
|
|||
|
_points[0] = new Vector3(posX, posY, posZ + 7);
|
|||
|
_points[1] = new Vector3(posX - 1, posY, posZ + 6);
|
|||
|
_points[2] = new Vector3(posX + 1, posY, posZ + 6);
|
|||
|
|
|||
|
_velocity[0] = new Vector3(0, 0, 0);
|
|||
|
_velocity[1] = new Vector3(-Game1.RandomNumber.Next(50, 150) / 1000f, 0, 0);
|
|||
|
_velocity[2] = new Vector3(Game1.RandomNumber.Next(50, 150) / 1000f, 0, 0);
|
|||
|
|
|||
|
_live[0] = 1;
|
|||
|
_live[1] = 1;
|
|||
|
_live[2] = 1;
|
|||
|
|
|||
|
// play sound effect
|
|||
|
if (playerPowder)
|
|||
|
Game1.GameManager.PlaySoundEffect("D360-05-05", true);
|
|||
|
else
|
|||
|
_damage = true;
|
|||
|
|
|||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
|||
|
AddComponent(DrawComponent.Index, new DrawComponent(Draw, Values.LayerPlayer, EntityPosition));
|
|||
|
AddComponent(LightDrawComponent.Index, new LightDrawComponent(DrawLight));
|
|||
|
}
|
|||
|
|
|||
|
public void Update()
|
|||
|
{
|
|||
|
var finishedFalling = true;
|
|||
|
|
|||
|
for (var i = 0; i < _points.Length; i++)
|
|||
|
{
|
|||
|
if (_points[i].Z <= 3 && !_damage)
|
|||
|
{
|
|||
|
// deals damage
|
|||
|
_damage = true;
|
|||
|
Map.Objects.Hit(this, new Vector2(EntityPosition.X, EntityPosition.Y),
|
|||
|
new Box(EntityPosition.X - 3, EntityPosition.Y - 8, 0, 6, 10, 8),
|
|||
|
HitType.MagicPowder, 2, false, false);
|
|||
|
}
|
|||
|
|
|||
|
// finished falling
|
|||
|
if (_points[i].Z <= 0)
|
|||
|
{
|
|||
|
_points[i].Z = 0;
|
|||
|
_live[i] -= 0.1f * Game1.TimeMultiplier;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_points[i] += _velocity[i] * Game1.TimeMultiplier;
|
|||
|
_velocity[i].Z += _gravity * Game1.TimeMultiplier;
|
|||
|
}
|
|||
|
|
|||
|
if (_live[i] > 0)
|
|||
|
finishedFalling = false;
|
|||
|
else
|
|||
|
_live[i] = 0;
|
|||
|
}
|
|||
|
|
|||
|
// remove object from the map
|
|||
|
if (finishedFalling)
|
|||
|
{
|
|||
|
Map.Objects.DeleteObjects.Add(this);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void Draw(SpriteBatch spriteBatch)
|
|||
|
{
|
|||
|
for (var i = 0; i < _points.Length; i++)
|
|||
|
{
|
|||
|
spriteBatch.Draw(Resources.SprItem, new Vector2(
|
|||
|
_points[i].X - _sourceRectangle.Width / 2,
|
|||
|
_points[i].Y - _sourceRectangle.Height - _points[i].Z), _sourceRectangle, Color.White * _live[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void DrawLight(SpriteBatch spriteBatch)
|
|||
|
{
|
|||
|
// draw shadow
|
|||
|
for (var i = 0; i < _points.Length; i++)
|
|||
|
{
|
|||
|
DrawHelper.DrawLight(spriteBatch, new Rectangle(
|
|||
|
(int)_points[i].X - 12, (int)(_points[i].Y - _points[i].Z) - 2 - 12, 24, 24), new Color(255, 220, 220) * 0.125f * _live[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|