2022-12-13 07:10:18 +00:00
|
|
|
|
using LinePutScript;
|
2023-05-09 23:16:58 +00:00
|
|
|
|
using LinePutScript.Converter;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
namespace VPet_Simulator.Core
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 游戏存档
|
|
|
|
|
/// </summary>
|
2023-05-09 23:16:58 +00:00
|
|
|
|
public class GameSave
|
2022-12-13 07:10:18 +00:00
|
|
|
|
{
|
2023-01-11 13:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 宠物名字
|
|
|
|
|
/// </summary>
|
2023-05-10 03:13:34 +00:00
|
|
|
|
[Line(name: "name")]
|
2023-01-11 13:10:18 +00:00
|
|
|
|
public string Name;
|
2023-01-20 12:42:00 +00:00
|
|
|
|
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 金钱
|
|
|
|
|
/// </summary>
|
2023-05-10 03:13:34 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat, Name = "money")] public double Money;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 经验值
|
|
|
|
|
/// </summary>
|
2023-05-10 03:13:34 +00:00
|
|
|
|
[Line(type: LPSConvert.ConvertType.ToFloat, name: "exp")] public double Exp;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 等级
|
|
|
|
|
/// </summary>
|
|
|
|
|
public int Level => (int)(Math.Sqrt(Exp) / 5) + 1;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 升级所需经验值
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
2023-01-08 16:57:10 +00:00
|
|
|
|
public int LevelUpNeed() => (int)(Math.Pow((Level) * 5, 2));
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 体力 0-100
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double Strength { get => strength; set => strength = Math.Min(100, Math.Max(0, value)); }
|
2023-05-09 23:16:58 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
private double strength;
|
|
|
|
|
/// <summary>
|
2023-06-03 21:51:58 +00:00
|
|
|
|
/// 待补充的体力,随着时间缓慢加给桌宠
|
|
|
|
|
/// </summary>//让游戏更有游戏性
|
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
|
|
|
|
public double StoreStrength;
|
|
|
|
|
/// <summary>
|
2023-01-20 12:42:00 +00:00
|
|
|
|
/// 变化 体力
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double ChangeStrength = 0;
|
|
|
|
|
public void StrengthChange(double value)
|
|
|
|
|
{
|
|
|
|
|
ChangeStrength += value;
|
|
|
|
|
Strength += value;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// 饱腹度
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double StrengthFood { get => strengthFood; set => strengthFood = Math.Min(100, Math.Max(0, value)); }
|
2023-05-09 23:16:58 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
private double strengthFood;
|
2023-06-03 21:51:58 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 待补充的饱腹度,随着时间缓慢加给桌宠
|
|
|
|
|
/// </summary>//让游戏更有游戏性
|
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
|
|
|
|
public double StoreStrengthFood;
|
2023-01-20 12:42:00 +00:00
|
|
|
|
public void StrengthChangeFood(double value)
|
|
|
|
|
{
|
|
|
|
|
ChangeStrengthFood += value;
|
|
|
|
|
StrengthFood += value;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 变化 食物
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double ChangeStrengthFood = 0;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 口渴度
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double StrengthDrink { get => strengthDrink; set => strengthDrink = Math.Min(100, Math.Max(0, value)); }
|
|
|
|
|
|
2023-05-09 23:16:58 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
private double strengthDrink;
|
|
|
|
|
/// <summary>
|
2023-06-03 21:51:58 +00:00
|
|
|
|
/// 待补充的口渴度,随着时间缓慢加给桌宠
|
|
|
|
|
/// </summary>//让游戏更有游戏性
|
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
|
|
|
|
public double StoreStrengthDrink;
|
|
|
|
|
/// <summary>
|
2023-01-20 12:42:00 +00:00
|
|
|
|
/// 变化 口渴度
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double ChangeStrengthDrink = 0;
|
|
|
|
|
public void StrengthChangeDrink(double value)
|
|
|
|
|
{
|
|
|
|
|
ChangeStrengthDrink += value;
|
|
|
|
|
StrengthDrink += value;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// 心情
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double Feeling { get => feeling; set => feeling = Math.Min(100, Math.Max(0, value)); }
|
|
|
|
|
|
2023-05-09 23:16:58 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
private double feeling;
|
|
|
|
|
/// <summary>
|
2023-06-03 21:51:58 +00:00
|
|
|
|
/// 待补充的心情,随着时间缓慢加给桌宠
|
|
|
|
|
/// </summary>//让游戏更有游戏性
|
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
|
|
|
|
public double StoreFeeling;
|
|
|
|
|
/// <summary>
|
2023-01-20 12:42:00 +00:00
|
|
|
|
/// 变化 心情
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double ChangeFeeling = 0;
|
|
|
|
|
public void FeelingChange(double value)
|
|
|
|
|
{
|
|
|
|
|
ChangeFeeling += value;
|
|
|
|
|
Feeling += value;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// 健康(生病)(隐藏)
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double Health { get => health; set => health = Math.Min(100, Math.Max(0, value)); }
|
|
|
|
|
|
2023-05-09 23:16:58 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
private double health;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 好感度(隐藏)(累加值)
|
|
|
|
|
/// </summary>
|
|
|
|
|
public double Likability { get => likability; set => likability = Math.Min(90 + Level * 10, Math.Max(0, value)); }
|
|
|
|
|
|
2023-05-09 23:16:58 +00:00
|
|
|
|
[Line(Type = LPSConvert.ConvertType.ToFloat)]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
private double likability;
|
2023-01-20 12:42:00 +00:00
|
|
|
|
|
2023-05-10 03:13:34 +00:00
|
|
|
|
private int cleantick = 10;
|
2023-01-20 12:42:00 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 清除变化
|
|
|
|
|
/// </summary>
|
2023-05-10 03:13:34 +00:00
|
|
|
|
public void CleanChange(bool force = false)
|
2023-01-20 12:42:00 +00:00
|
|
|
|
{
|
2023-06-03 21:51:58 +00:00
|
|
|
|
if (--cleantick <= 0 || force)
|
2023-05-10 03:13:34 +00:00
|
|
|
|
{
|
|
|
|
|
ChangeStrength /= 2;
|
|
|
|
|
ChangeFeeling /= 2;
|
|
|
|
|
ChangeStrengthDrink /= 2;
|
|
|
|
|
ChangeStrengthFood /= 2;
|
|
|
|
|
cleantick = 10;
|
2023-06-03 21:51:58 +00:00
|
|
|
|
}
|
2023-01-20 12:42:00 +00:00
|
|
|
|
}
|
2023-06-03 21:51:58 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 取回被储存的体力
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void StoreTake()
|
|
|
|
|
{
|
|
|
|
|
StoreFeeling /= 2;
|
|
|
|
|
if (Math.Abs(StoreFeeling) < 1)
|
|
|
|
|
StoreFeeling = 0;
|
|
|
|
|
else
|
|
|
|
|
FeelingChange(StoreFeeling);
|
|
|
|
|
|
|
|
|
|
StoreStrength /= 2;
|
|
|
|
|
if (Math.Abs(StoreStrength) < 1)
|
|
|
|
|
StoreStrength = 0;
|
|
|
|
|
else
|
|
|
|
|
StrengthChange(StoreStrength);
|
|
|
|
|
|
|
|
|
|
StoreStrengthDrink /= 2;
|
|
|
|
|
if (Math.Abs(StoreStrengthDrink) < 1)
|
|
|
|
|
StoreStrengthDrink = 0;
|
|
|
|
|
else
|
|
|
|
|
StrengthChange(StoreStrengthDrink);
|
2023-01-20 12:42:00 +00:00
|
|
|
|
|
2023-06-03 21:51:58 +00:00
|
|
|
|
StoreStrengthFood /= 2;
|
|
|
|
|
if (Math.Abs(StoreStrengthFood) < 1)
|
|
|
|
|
StoreStrengthFood = 0;
|
|
|
|
|
else
|
|
|
|
|
StrengthChange(StoreStrengthFood);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void EatFood(IFood food)
|
|
|
|
|
{
|
|
|
|
|
Exp += food.Exp;
|
|
|
|
|
var tmp = food.Strength / 2;
|
|
|
|
|
StrengthChange(tmp);
|
|
|
|
|
StoreStrength += tmp;
|
|
|
|
|
tmp = food.StrengthFood / 2;
|
|
|
|
|
StrengthChangeFood(tmp);
|
|
|
|
|
StoreStrengthFood += tmp;
|
|
|
|
|
tmp = food.StrengthDrink / 2;
|
|
|
|
|
StrengthChangeDrink(tmp);
|
|
|
|
|
StoreStrengthDrink += tmp;
|
|
|
|
|
tmp = food.Feeling / 2;
|
|
|
|
|
FeelingChange(tmp);
|
|
|
|
|
StoreFeeling += tmp;
|
|
|
|
|
Health += food.Health;
|
|
|
|
|
Likability += food.Likability;
|
|
|
|
|
}
|
2023-05-10 03:13:34 +00:00
|
|
|
|
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 宠物状态模式
|
|
|
|
|
/// </summary>
|
|
|
|
|
public enum ModeType
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 高兴
|
|
|
|
|
/// </summary>
|
|
|
|
|
Happy,
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 普通
|
|
|
|
|
/// </summary>
|
|
|
|
|
Nomal,
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 状态不佳
|
|
|
|
|
/// </summary>
|
|
|
|
|
PoorCondition,
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 生病(躺床)
|
|
|
|
|
/// </summary>
|
|
|
|
|
Ill
|
|
|
|
|
}
|
2023-05-10 03:13:34 +00:00
|
|
|
|
[Line(name: "mode")]
|
2022-12-13 07:10:18 +00:00
|
|
|
|
public ModeType Mode = ModeType.Nomal;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 计算宠物当前状态
|
|
|
|
|
/// </summary>
|
2023-01-08 16:57:10 +00:00
|
|
|
|
public ModeType CalMode()
|
2022-12-13 07:10:18 +00:00
|
|
|
|
{
|
|
|
|
|
int realhel = 60 - (Feeling >= 80 ? 20 : 0) - (Likability >= 80 ? 20 : (Likability >= 40 ? 10 : 0));
|
|
|
|
|
//先从最次的开始
|
|
|
|
|
if (Health <= realhel)
|
|
|
|
|
{
|
|
|
|
|
//可以确认从状态不佳和生病二选一
|
|
|
|
|
if (Health <= realhel / 2)
|
|
|
|
|
{//生病
|
2023-01-08 16:57:10 +00:00
|
|
|
|
return ModeType.Ill;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2023-01-08 16:57:10 +00:00
|
|
|
|
return ModeType.PoorCondition;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//然后判断是高兴还是普通
|
|
|
|
|
else if (Feeling >= 80 - (Likability >= 80 ? 20 : (Likability >= 40 ? 10 : 0)))
|
|
|
|
|
{
|
2023-01-08 16:57:10 +00:00
|
|
|
|
return ModeType.Happy;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2023-01-08 16:57:10 +00:00
|
|
|
|
return ModeType.Nomal;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 新游戏
|
|
|
|
|
/// </summary>
|
2023-05-09 23:16:58 +00:00
|
|
|
|
public GameSave(string name)
|
2022-12-13 07:10:18 +00:00
|
|
|
|
{
|
2023-01-11 13:10:18 +00:00
|
|
|
|
Name = name;
|
2022-12-13 07:10:18 +00:00
|
|
|
|
Money = 100;
|
|
|
|
|
Exp = 0;
|
|
|
|
|
Strength = 100;
|
|
|
|
|
StrengthFood = 100;
|
|
|
|
|
StrengthDrink = 100;
|
|
|
|
|
Feeling = 60;
|
|
|
|
|
Health = 100;
|
|
|
|
|
Likability = 0;
|
2023-01-08 16:57:10 +00:00
|
|
|
|
Mode = CalMode();
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 读档
|
|
|
|
|
/// </summary>
|
2023-05-09 23:16:58 +00:00
|
|
|
|
public GameSave()
|
2022-12-13 07:10:18 +00:00
|
|
|
|
{
|
2023-05-09 23:16:58 +00:00
|
|
|
|
//Money = line.GetFloat("money");
|
|
|
|
|
//Name = line.Info;
|
|
|
|
|
//Exp = line.GetInt("exp");
|
|
|
|
|
//Strength = line.GetFloat("strength");
|
|
|
|
|
//StrengthDrink = line.GetFloat("strengthdrink");
|
|
|
|
|
//StrengthFood = line.GetFloat("strengthfood");
|
|
|
|
|
//Feeling = line.GetFloat("feeling");
|
|
|
|
|
//Health = line.GetFloat("health");
|
|
|
|
|
//Likability = line.GetFloat("likability");
|
|
|
|
|
//Mode = CalMode();
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
2023-05-09 23:16:58 +00:00
|
|
|
|
/// 读档
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static GameSave Load(ILine data) => LPSConvert.DeserializeObject<GameSave>(data);
|
|
|
|
|
/// <summary>
|
2022-12-13 07:10:18 +00:00
|
|
|
|
/// 存档
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>存档行</returns>
|
|
|
|
|
public Line ToLine()
|
|
|
|
|
{
|
2023-05-09 23:16:58 +00:00
|
|
|
|
//Line save = new Line("vpet", Name);
|
|
|
|
|
//save.SetFloat("money", Money);
|
|
|
|
|
//save.SetInt("exp", Exp);
|
|
|
|
|
//save.SetFloat("strength", Strength);
|
|
|
|
|
//save.SetFloat("strengthdrink", StrengthDrink);
|
|
|
|
|
//save.SetFloat("strengthfood", StrengthFood);
|
|
|
|
|
//save.SetFloat("feeling", Feeling);
|
|
|
|
|
//save.SetFloat("health", Health);
|
|
|
|
|
//save.SetFloat("Likability", Likability);
|
2023-05-10 03:13:34 +00:00
|
|
|
|
return LPSConvert.SerializeObject(this, "vpet");
|
2022-12-13 07:10:18 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|