mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
70 lines
3.1 KiB
C#
70 lines
3.1 KiB
C#
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.Map;
|
|
using ProjectZ.InGame.SaveLoad;
|
|
using ProjectZ.InGame.Things;
|
|
using System;
|
|
|
|
namespace ProjectZ.InGame.GameObjects.Dungeon
|
|
{
|
|
public class ObjTowerBackground : GameObject
|
|
{
|
|
private readonly DictAtlasEntry _clouds;
|
|
private readonly Color _colorSky;
|
|
private readonly Color _colorCloud;
|
|
private readonly Vector2 _spawnPosition;
|
|
|
|
private float _cloudOffset;
|
|
|
|
public ObjTowerBackground() : base("final_cloud") { }
|
|
|
|
public ObjTowerBackground(Map.Map map, int posX, int posY) : base(map)
|
|
{
|
|
_spawnPosition = new Vector2(posX, posY);
|
|
|
|
_clouds = Resources.GetSprite("tower_clouds");
|
|
_colorSky = new Color(106, 98, 253);
|
|
_colorCloud = new Color(254, 254, 254);
|
|
|
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
|
AddComponent(DrawComponent.Index, new DrawComponent(Draw, Values.LayerBackground, new CPosition(posX, posY, 0)));
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
// move the clouds
|
|
_cloudOffset += (0.75f + MathF.Sin(_cloudOffset) * 0.25f) * 0.0125f * Game1.TimeMultiplier;
|
|
}
|
|
|
|
private void Draw(SpriteBatch spriteBatch)
|
|
{
|
|
var cameraRectangle = MapManager.Camera.GetCameraRectangle();
|
|
|
|
// draw the cloud background
|
|
spriteBatch.Draw(Resources.SprWhite, new Rectangle(
|
|
(int)(cameraRectangle.X / MapManager.Camera.Scale - MapManager.Camera.Scale),
|
|
(int)(_spawnPosition.Y + 80),
|
|
(int)(cameraRectangle.Width / MapManager.Camera.Scale + MapManager.Camera.Scale * 2),
|
|
(int)(Map.MapHeight * Values.TileSize - (int)(_spawnPosition.Y + 80))), _colorCloud);
|
|
|
|
// draw the sky background
|
|
spriteBatch.Draw(Resources.SprWhite, new Rectangle(
|
|
(int)(cameraRectangle.X / MapManager.Camera.Scale - MapManager.Camera.Scale),
|
|
(int)(cameraRectangle.Y / MapManager.Camera.Scale - MapManager.Camera.Scale),
|
|
(int)(cameraRectangle.Width / MapManager.Camera.Scale + MapManager.Camera.Scale * 2),
|
|
(int)(_spawnPosition.Y + 48) - (int)(cameraRectangle.Y / MapManager.Camera.Scale - MapManager.Camera.Scale)), _colorSky);
|
|
|
|
// draw the clouds
|
|
var leftCloud = (int)Math.Floor((cameraRectangle.X / MapManager.Camera.Scale) / _clouds.SourceRectangle.Width) - 1;
|
|
var rightCloud = (int)Math.Ceiling((cameraRectangle.Right / MapManager.Camera.Scale) / _clouds.SourceRectangle.Width);
|
|
for (var i = leftCloud; i < rightCloud; i++)
|
|
//if (i != 0)
|
|
DrawHelper.DrawNormalized(spriteBatch, _clouds, new Vector2(_spawnPosition.X + _clouds.SourceRectangle.Width * i + _cloudOffset % _clouds.SourceRectangle.Width, _spawnPosition.Y + 48), Color.White);
|
|
|
|
}
|
|
}
|
|
}
|