Updated weatherDebrisSystem with way to clear screen with wind.

This commit is contained in:
Joshua Navarro 2017-02-25 03:08:26 -08:00
parent 20f7d723ed
commit daa2dbdc83
5 changed files with 63 additions and 22 deletions

View File

@ -12,25 +12,35 @@ namespace Revitalize.Aesthetics.WeatherDebris
public class WeatherDebrisPlus
{
public Rectangle sourceRect;
public bool blowing;
public Vector2 position;
public int which;
public float dx;
public float dy;
public int animationIntervalOffset;
public Texture2D debrisTexture;
public WeatherDebrisPlus()
{
}
public WeatherDebrisPlus(Vector2 position,Rectangle SourceRect, int animationOffset, int which, float rotationVelocity, float dx, float dy)
/// <summary>
/// Create a new debris particle to be shown across the screen.
/// </summary>
/// <param name="position"></param>
/// <param name="SourceRect">Source on the texture sprite sheet.</param>
/// <param name="animationOffset"></param>
/// <param name="which">Not really used, but can be used for default list.</param>
/// <param name="rotationVelocity"></param>
/// <param name="dx"></param>
/// <param name="dy"></param>
/// <param name="texture">If NULL, then Game1.mouseCursors is used.</param>
public WeatherDebrisPlus(Vector2 position,Rectangle SourceRect, int animationOffset, int which, float rotationVelocity, float dx, float dy, Texture2D texture=null)
{
if (texture == null) debrisTexture = Game1.mouseCursors;
else debrisTexture = texture;
this.position = position;
this.which = which;
this.dx = dx;
@ -39,7 +49,17 @@ namespace Revitalize.Aesthetics.WeatherDebris
animationIntervalOffset = animationOffset;
}
public WeatherDebrisPlus(Vector2 position, Rectangle SourceRect, int animationOffset, int which, float rotationVelocity, float dx, float dy,bool specificSetUp)
/// <summary>
/// Default system that uses some presets. Might or might not use.
/// </summary>
/// <param name="position"></param>
/// <param name="SourceRect">Source on the texture sprite sheet.</param>
/// <param name="animationOffset"></param>
/// <param name="which">Not really used, but can be used for default list.</param>
/// <param name="rotationVelocity"></param>
/// <param name="dx"></param>
/// <param name="dy"></param>
public WeatherDebrisPlus(Vector2 position, Rectangle SourceRect, int animationOffset, int which, float rotationVelocity, float dx, float dy)
{
this.position = position;
this.which = which;
@ -47,10 +67,6 @@ namespace Revitalize.Aesthetics.WeatherDebris
this.dy = dy;
// sourceRect = SourceRect;
animationIntervalOffset = animationOffset;
Log.AsyncC(this.dx);
Log.AsyncC(this.dy);
switch (which)
{
case 0:
@ -129,7 +145,7 @@ namespace Revitalize.Aesthetics.WeatherDebris
public void draw(SpriteBatch b)
{
b.Draw(Game1.mouseCursors, this.position, new Rectangle?(this.sourceRect), Color.White, 0f, Vector2.Zero, 3f, SpriteEffects.None, 1E-06f);
b.Draw(this.debrisTexture, this.position, new Rectangle?(this.sourceRect), Color.White, 0f, Vector2.Zero, 3f, SpriteEffects.None, 1E-06f);
}
}

View File

@ -4,7 +4,9 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.Threading.Tasks;
using StardewModdingAPI;
namespace Revitalize.Aesthetics.WeatherDebris
{
@ -14,6 +16,8 @@ namespace Revitalize.Aesthetics.WeatherDebris
public WeatherDebrisPlus weatherDebris;
public int TimesToAdd;
public weatherNode(WeatherDebrisPlus w, int addThisMany)
{
weatherDebris = w;
@ -24,6 +28,8 @@ namespace Revitalize.Aesthetics.WeatherDebris
class WeatherDebrisSystem
{
public static List<WeatherDebrisPlus> thisWeatherDebris;
public static Timer debrisClearTimer;
public static float oldWindGust;
public static void update()
{
foreach (WeatherDebrisPlus w in WeatherDebrisSystem.thisWeatherDebris)
@ -45,9 +51,14 @@ namespace Revitalize.Aesthetics.WeatherDebris
}
public static void cleanWeatherDebris()
public static void cleanWeatherDebrisTimer(System.Object source, ElapsedEventArgs e)
{
thisWeatherDebris.Clear();
debrisClearTimer.Enabled = false;
debrisClearTimer.Dispose();
Game1.windGust = 0.0f;
StardewValley.WeatherDebris.globalWind = oldWindGust;
// Log.AsyncG("Cleared Wind Debris");
}
public static void addMultipleDebrisWithVaryingCounts(List<weatherNode> listToAdd)
@ -67,10 +78,26 @@ namespace Revitalize.Aesthetics.WeatherDebris
if (w.TimesToAdd == 0 || w.weatherDebris == null) return;
for(int i = 1; i <= w.TimesToAdd; i++)
{
var v= new WeatherDebrisPlus(new Vector2((float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Width), (float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Height)), w.weatherDebris.sourceRect, w.weatherDebris.animationIntervalOffset, w.weatherDebris.which, (float)Game1.random.Next(15) / 500f, (float)Game1.random.Next(-10, 0) / 50f, (float)Game1.random.Next(10) / 50f, true);
var v= new WeatherDebrisPlus(new Vector2((float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Width), (float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Height)), w.weatherDebris.sourceRect, w.weatherDebris.animationIntervalOffset, w.weatherDebris.which, (float)Game1.random.Next(15) / 500f, (float)Game1.random.Next(-10, 0) / 50f, (float)Game1.random.Next(10) / 50f,w.weatherDebris.debrisTexture);
thisWeatherDebris.Add(v);
}
}
public static void speedUpWindAndClear(float f)
{
oldWindGust= StardewValley.WeatherDebris.globalWind;
for (float g=StardewValley.WeatherDebris.globalWind; g <= 2f; g += f)
{
StardewValley.Game1.windGust = g;
}
debrisClearTimer = new Timer(5000);
debrisClearTimer.Elapsed += cleanWeatherDebrisTimer;
debrisClearTimer.Start();
debrisClearTimer.AutoReset = false;
debrisClearTimer.Enabled = true;
// StardewValley.Game1.windGust = d;
// thisWeatherDebris.Clear();
}
}
}

View File

@ -350,7 +350,10 @@ namespace Revitalize
newDebris();
}
if (e.KeyPressed.ToString() == "G")
{
WeatherDebrisSystem.speedUpWindAndClear(0.001f);
}
}
@ -361,14 +364,9 @@ namespace Revitalize
// WeatherDebris w = new WeatherDebris();
// Game1.debrisWeather.Add(new WeatherDebris(new Vector2((float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Width), (float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Height)), 0, (float)Game1.random.Next(15) / 500f, (float)Game1.random.Next(-10, 0) / 50f, (float)Game1.random.Next(10) / 50f));
// WeatherDebris w = new WeatherDebris(new Vector2((float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Width), (float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Height)), 0, (float)Game1.random.Next(15) / 500f, (float)Game1.random.Next(-10, 0) / 50f, (float)Game1.random.Next(10) / 50f);
WeatherDebrisPlus w= new WeatherDebrisPlus(new Vector2((float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Width), (float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Height)), new Rectangle(338, 400, 8, 8), 0, 4, (float)Game1.random.Next(15) / 500f, (float)Game1.random.Next(-10, 0) / 50f, (float)Game1.random.Next(10) / 50f,true);
WeatherDebrisPlus w= new WeatherDebrisPlus(new Vector2((float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Width), (float)Game1.random.Next(0, Game1.graphics.GraphicsDevice.Viewport.Height)), new Rectangle(338, 400, 8, 8), 0, 4, (float)Game1.random.Next(15) / 500f, (float)Game1.random.Next(-10, 0) / 50f, (float)Game1.random.Next(10) / 50f);
WeatherDebrisSystem.addMultipleDebrisFromSingleType(new weatherNode(w, 20));
// WeatherDebrisSystem.thisWeatherDebris.Add(w);
Game1.isDebrisWeather = true;
// Game1.updateDebrisWeatherForMovement(Game1.debrisWeather);
// Game1.windGust = 0.15f;
Log.AsyncC("WIND");
}