mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-25 16:03:02 +00:00
80 lines
3.7 KiB
C#
80 lines
3.7 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.Map;
|
|
using ProjectZ.InGame.Things;
|
|
|
|
namespace ProjectZ.InGame.GameObjects.Things
|
|
{
|
|
class ObjTransition : GameObject
|
|
{
|
|
public Color TransitionColor;
|
|
public float Percentage;
|
|
|
|
public float Brightness;
|
|
public float WobblePercentage;
|
|
public bool WobbleTransition;
|
|
|
|
private float _circleSize;
|
|
|
|
public ObjTransition(Map.Map map) : base(map)
|
|
{
|
|
SprEditorImage = Resources.SprObjects;
|
|
EditorIconSource = new Rectangle(240, 16, 16, 16);
|
|
|
|
// should be on top of every other object,
|
|
// except the player object but only while transitioning
|
|
AddComponent(DrawComponent.Index, new DrawComponent(Draw, Values.LayerTop, new CPosition(0, 0, 0)));
|
|
}
|
|
|
|
public void Draw(SpriteBatch spriteBatch)
|
|
{
|
|
var gameWidth = Game1.RenderWidth;
|
|
var gameHeight = Game1.RenderHeight;
|
|
|
|
if (!WobbleTransition)
|
|
{
|
|
_circleSize = (1 - Percentage) * (float)Math.Sqrt(gameWidth * gameWidth + gameHeight * gameHeight) / 2;
|
|
|
|
var playerPosition = new Vector2(
|
|
MapManager.ObjLink.PosX * MapManager.Camera.Scale,
|
|
(MapManager.ObjLink.PosY - 8 - MapManager.ObjLink.PosZ) * MapManager.Camera.Scale);
|
|
var centerX = gameWidth / 2.0f - (MapManager.Camera.Location.X - playerPosition.X);
|
|
var centerY = gameHeight / 2.0f - (MapManager.Camera.Location.Y - playerPosition.Y);
|
|
|
|
Resources.CircleShader.Parameters["softRad"].SetValue(15f);
|
|
Resources.CircleShader.Parameters["size"].SetValue(_circleSize);
|
|
Resources.CircleShader.Parameters["centerX"].SetValue(centerX);
|
|
Resources.CircleShader.Parameters["centerY"].SetValue(centerY);
|
|
Resources.CircleShader.Parameters["width"].SetValue(gameWidth);
|
|
Resources.CircleShader.Parameters["height"].SetValue(gameHeight);
|
|
|
|
// draw the circle
|
|
spriteBatch.Begin(SpriteSortMode.Immediate, null, SamplerState.PointWrap, null, null, Resources.CircleShader, Game1.GetMatrix);
|
|
spriteBatch.Draw(Resources.SprWhite, new Rectangle(0, 0, gameWidth, gameHeight), TransitionColor);
|
|
spriteBatch.End();
|
|
}
|
|
else
|
|
{
|
|
// draw the wobble transition effect
|
|
Game1.GameManager.ChangeRenderTarget();
|
|
|
|
Resources.WobbleEffect.Parameters["width"].SetValue(gameWidth);
|
|
Resources.WobbleEffect.Parameters["height"].SetValue(gameHeight);
|
|
Resources.WobbleEffect.Parameters["scale"].SetValue(MapManager.Camera.Scale);
|
|
Resources.WobbleEffect.Parameters["brightness"].SetValue(Brightness);
|
|
|
|
Resources.WobbleEffect.Parameters["offset"].SetValue(WobblePercentage * 30);
|
|
Resources.WobbleEffect.Parameters["offsetWidth"].SetValue((0.5f - MathF.Cos(WobblePercentage * 4) / 2) * 3);
|
|
Resources.WobbleEffect.Parameters["offsetHeight"].SetValue(16);
|
|
|
|
spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointWrap, null, null, Resources.WobbleEffect);
|
|
spriteBatch.Draw(Game1.GameManager.GetLastRenderTarget(), Vector2.Zero, Color.White);
|
|
spriteBatch.End();
|
|
}
|
|
}
|
|
}
|
|
} |