mirror of
https://github.com/MaddyThorson/StrawberryBF.git
synced 2025-06-29 19:05:26 +08:00
Numerics ToString overrides. Moving Solids work. Actor.Pushed
This commit is contained in:
@ -7,6 +7,8 @@ namespace Strawberry
|
||||
{
|
||||
private Vector remainder;
|
||||
|
||||
public Point Pushed;
|
||||
|
||||
public this(Point position)
|
||||
: base(position)
|
||||
{
|
||||
@ -28,11 +30,20 @@ namespace Strawberry
|
||||
return CheckOutside(jumpThru, .(0, 1));
|
||||
}
|
||||
|
||||
public virtual void Squish()
|
||||
public virtual void Squish(Collision collision)
|
||||
{
|
||||
RemoveSelf();
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
|
||||
if (Pushed != Point.Zero)
|
||||
Calc.Log(Pushed);
|
||||
Pushed = Point.Zero;
|
||||
}
|
||||
|
||||
public bool MoveX(float amount, Action<Collision> onCollide = null)
|
||||
{
|
||||
remainder.X += amount;
|
||||
|
@ -23,8 +23,11 @@ namespace Strawberry
|
||||
let riders = GetRiders(scope List<Actor>);
|
||||
|
||||
X += amount;
|
||||
for (var r in riders)
|
||||
r.MoveExactX(amount);
|
||||
for (var a in riders)
|
||||
{
|
||||
a.MoveExactX(amount);
|
||||
a.Pushed += Point.UnitX * amount;
|
||||
}
|
||||
}
|
||||
else
|
||||
X += amount;
|
||||
@ -39,8 +42,14 @@ namespace Strawberry
|
||||
if (amount < 0)
|
||||
{
|
||||
for (var a in Scene.All<Actor>(scope List<Actor>))
|
||||
{
|
||||
if (riders.Contains(a) || CheckOutside(a, Point.UnitY * amount))
|
||||
a.MoveExactY((Top + amount) - a.Bottom);
|
||||
{
|
||||
let move = (Top + amount) - a.Bottom;
|
||||
a.MoveExactY(move);
|
||||
a.Pushed += Point.UnitY * move;
|
||||
}
|
||||
}
|
||||
Y += amount;
|
||||
}
|
||||
else
|
||||
@ -48,7 +57,10 @@ namespace Strawberry
|
||||
Collidable = false;
|
||||
|
||||
for (var a in riders)
|
||||
{
|
||||
a.MoveExactY(amount);
|
||||
a.Pushed += Point.UnitY * amount;
|
||||
}
|
||||
|
||||
Collidable = true;
|
||||
Y += amount;
|
||||
|
@ -10,6 +10,13 @@ namespace Strawberry
|
||||
Hitbox = hitbox;
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
|
||||
MoveY(0.1f);
|
||||
}
|
||||
|
||||
public override List<Actor> GetRiders(List<Actor> into)
|
||||
{
|
||||
for (var a in Scene.All<Actor>(scope List<Actor>))
|
||||
@ -20,18 +27,74 @@ namespace Strawberry
|
||||
|
||||
public override void MoveExactX(int amount)
|
||||
{
|
||||
if (amount != 0)
|
||||
if (Collidable)
|
||||
{
|
||||
let riders = GetRiders(scope List<Actor>);
|
||||
|
||||
X += amount;
|
||||
Collidable = false;
|
||||
|
||||
for (Actor a in Scene.All<Actor>(scope List<Actor>))
|
||||
{
|
||||
if (Check(a))
|
||||
{
|
||||
//Push
|
||||
int move;
|
||||
if (amount > 0)
|
||||
move = Right - a.Left;
|
||||
else
|
||||
move = Left - a.Right;
|
||||
a.MoveExactX(move, scope => a.Squish, this);
|
||||
a.Pushed += Point.UnitX * move;
|
||||
}
|
||||
else if (riders.Contains(a))
|
||||
{
|
||||
//Carry
|
||||
a.MoveExactX(amount);
|
||||
a.Pushed += Point.UnitX * amount;
|
||||
}
|
||||
}
|
||||
|
||||
Collidable = true;
|
||||
}
|
||||
else
|
||||
X += amount;
|
||||
}
|
||||
|
||||
public override void MoveExactY(int amount)
|
||||
{
|
||||
if (amount != 0)
|
||||
if (Collidable)
|
||||
{
|
||||
let riders = GetRiders(scope List<Actor>);
|
||||
|
||||
Y += amount;
|
||||
Collidable = false;
|
||||
|
||||
for (Actor a in Scene.All<Actor>(scope List<Actor>))
|
||||
{
|
||||
if (Check(a))
|
||||
{
|
||||
//Push
|
||||
int move;
|
||||
if (amount > 0)
|
||||
move = Bottom - a.Top;
|
||||
else
|
||||
move = Top - a.Bottom;
|
||||
a.MoveExactY(move, scope => a.Squish, this);
|
||||
a.Pushed += Point.UnitY * move;
|
||||
}
|
||||
else if (riders.Contains(a))
|
||||
{
|
||||
//Carry
|
||||
a.MoveExactY(amount);
|
||||
a.Pushed += Point.UnitY * amount;
|
||||
}
|
||||
}
|
||||
|
||||
Collidable = true;
|
||||
}
|
||||
else
|
||||
Y += amount;
|
||||
}
|
||||
|
||||
public override void Draw()
|
||||
|
Reference in New Issue
Block a user