ported from perforce
This commit is contained in:
25
RobotAndDonkey.Game/Robots/Analyst.cs
Normal file
25
RobotAndDonkey.Game/Robots/Analyst.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using RobotAndDonkey.Game.Cards;
|
||||
using RobotAndDonkey.Game.Data;
|
||||
using RobotAndDonkey.Game.GameState;
|
||||
using RobotAndDonkey.Game.Modifiers;
|
||||
|
||||
namespace RobotAndDonkey.Game.Robots;
|
||||
|
||||
public record Analyst : Robot
|
||||
{
|
||||
protected override Analyst CreateInstance() => new(this);
|
||||
|
||||
public Analyst(MatchParameters matchParameters) : base(ERobotType.Analyst, [
|
||||
ECard.Move, ECard.Move, ECard.Move, ECard.Move,
|
||||
ECard.TurnRight, ECard.TurnRight, ECard.TurnRight, ECard.TurnRight,
|
||||
ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft,
|
||||
ECard.Interact, ECard.Interact, ECard.Interact, ECard.Interact,
|
||||
ECard.NoOp, ECard.NoOp, ECard.NoOp, ECard.NoOp,
|
||||
ECard.AluminumHat
|
||||
], 5)
|
||||
{
|
||||
AddModifier(new AnalystModifier(), []);
|
||||
var currency = CreateCurrency(matchParameters);
|
||||
Currency = currency with { HandSize = currency.HandSize + Balancing.Instance.AnalysisHandSizeDelta };
|
||||
}
|
||||
}
|
||||
25
RobotAndDonkey.Game/Robots/Courier.cs
Normal file
25
RobotAndDonkey.Game/Robots/Courier.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using RobotAndDonkey.Game.Cards;
|
||||
using RobotAndDonkey.Game.Data;
|
||||
using RobotAndDonkey.Game.GameState;
|
||||
using RobotAndDonkey.Game.Modifiers;
|
||||
|
||||
namespace RobotAndDonkey.Game.Robots;
|
||||
|
||||
public record Courier : Robot
|
||||
{
|
||||
protected override Courier CreateInstance() => new(this);
|
||||
|
||||
public Courier(MatchParameters matchParameters) : base(ERobotType.Courier, [
|
||||
ECard.Move, ECard.Move, ECard.Move, ECard.Move, ECard.Move,
|
||||
ECard.TurnRight, ECard.TurnRight, ECard.TurnRight, ECard.TurnRight,
|
||||
ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft,
|
||||
ECard.Interact, ECard.Interact, ECard.Interact, ECard.Interact,
|
||||
ECard.NoOp, ECard.NoOp, ECard.NoOp,
|
||||
], 5)
|
||||
{
|
||||
var currency = CreateCurrency(matchParameters);
|
||||
Currency = currency with { MaxCarry = currency.MaxCarry + 1, TapeLength = Math.Max(0, currency.TapeLength - 1) };
|
||||
AddModifier(new CourierOverspillModifier(), []);
|
||||
}
|
||||
}
|
||||
24
RobotAndDonkey.Game/Robots/Ranger.cs
Normal file
24
RobotAndDonkey.Game/Robots/Ranger.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using RobotAndDonkey.Game.Cards;
|
||||
using RobotAndDonkey.Game.Data;
|
||||
using RobotAndDonkey.Game.GameState;
|
||||
using RobotAndDonkey.Game.Modifiers;
|
||||
|
||||
namespace RobotAndDonkey.Game.Robots;
|
||||
|
||||
public record Ranger : Robot
|
||||
{
|
||||
protected override Ranger CreateInstance() => new(this);
|
||||
|
||||
public Ranger(MatchParameters matchParameters) : base(ERobotType.Ranger, [
|
||||
ECard.Move, ECard.Move, ECard.Move, ECard.Move,
|
||||
ECard.TurnRight, ECard.TurnRight, ECard.TurnRight, ECard.TurnRight,
|
||||
ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft,
|
||||
ECard.Interact, ECard.Interact, ECard.Interact, ECard.Interact,
|
||||
ECard.NoOp, ECard.NoOp, ECard.NoOp, ECard.DetoxiumPrime // starts with Detoxium Prime
|
||||
], 5)
|
||||
{
|
||||
var c = CreateCurrency(matchParameters);
|
||||
Currency = c with { Energy = c.Energy + 2 };
|
||||
AddModifier(new RangerFertileRestModifier(), []);
|
||||
}
|
||||
}
|
||||
55
RobotAndDonkey.Game/Robots/Robot.cs
Normal file
55
RobotAndDonkey.Game/Robots/Robot.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System.Collections.Immutable;
|
||||
using RobotAndDonkey.Game.Cards;
|
||||
using RobotAndDonkey.Game.Data;
|
||||
using RobotAndDonkey.Game.GameState;
|
||||
using RobotAndDonkey.Game.Modifiers;
|
||||
|
||||
namespace RobotAndDonkey.Game.Robots;
|
||||
|
||||
public abstract record Robot(ERobotType Type, ImmutableArray<ECard> Deck, int ProgramCount) : Entity
|
||||
{
|
||||
protected static Currency CreateCurrency(MatchParameters parameters)
|
||||
{
|
||||
var energy = parameters.Difficulty switch
|
||||
{
|
||||
EDifficulty.Easy => Balancing.Instance.RobotEasyEnergy,
|
||||
EDifficulty.Medium => Balancing.Instance.RobotMediumEnergy,
|
||||
_ => Balancing.Instance.RobotHardEnergy
|
||||
};
|
||||
var maxCarry = parameters.Difficulty switch
|
||||
{
|
||||
EDifficulty.Easy => Balancing.Instance.EasyMaxCarry,
|
||||
EDifficulty.Medium => Balancing.Instance.MediumMaxCarry,
|
||||
_ => Balancing.Instance.HardMaxCarry
|
||||
};
|
||||
var handSize = parameters.Difficulty switch
|
||||
{
|
||||
EDifficulty.Easy => Balancing.Instance.EasyHandSize,
|
||||
EDifficulty.Medium => Balancing.Instance.MediumHandSize,
|
||||
_ => Balancing.Instance.HardHandSize
|
||||
};
|
||||
var tapeLength = parameters.Difficulty switch
|
||||
{
|
||||
EDifficulty.Easy => Balancing.Instance.EasyTapeLength,
|
||||
EDifficulty.Medium => Balancing.Instance.MediumTapeLength,
|
||||
_ => Balancing.Instance.HardTapeLength
|
||||
};
|
||||
return new(energy, maxCarry, 0, 0, tapeLength, handSize);
|
||||
}
|
||||
|
||||
public Robot DeepClone()
|
||||
{
|
||||
var result = CreateInstance();
|
||||
result.Currency = Currency;
|
||||
return result;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Type}" + base.ToString();
|
||||
}
|
||||
|
||||
protected abstract Robot CreateInstance();
|
||||
|
||||
public Currency Currency;
|
||||
}
|
||||
20
RobotAndDonkey.Game/Robots/Vintage.cs
Normal file
20
RobotAndDonkey.Game/Robots/Vintage.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using RobotAndDonkey.Game.Cards;
|
||||
using RobotAndDonkey.Game.GameState;
|
||||
|
||||
namespace RobotAndDonkey.Game.Robots;
|
||||
|
||||
public record Vintage : Robot
|
||||
{
|
||||
protected override Vintage CreateInstance() => new(this);
|
||||
|
||||
public Vintage(MatchParameters matchParameters) : base(ERobotType.Vintage, [
|
||||
ECard.Move, ECard.Move, ECard.Move, ECard.Move,
|
||||
ECard.TurnRight, ECard.TurnRight, ECard.TurnRight, ECard.TurnRight,
|
||||
ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft, ECard.TurnLeft,
|
||||
ECard.Interact, ECard.Interact, ECard.Interact, ECard.Interact,
|
||||
ECard.NoOp, ECard.NoOp, ECard.NoOp, ECard.NoOp
|
||||
], 5)
|
||||
{
|
||||
Currency = CreateCurrency(matchParameters);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user