Files
SlaveMatrix-SDL/SlaveMatrix/SlaveMatrix/GameClasses/Generator.cs
lewd-alt 8fb31d38bb linting
removed some dead code and fixed a few bugs i introduced
2025-08-03 13:09:54 -07:00

413 lines
21 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Threading.Tasks;
using _2DGAMELIB;
using SlaveMatrix.GameClasses;
namespace SlaveMatrix
{
public enum GeneratorType
{
Bird,
Snake,
Beast,
Aquatic,
Insect,
Humanoid,
,
,
Dragon
}
//shop slave generator
[Serializable]
public class Generator
{
public List<Unit> Buf = new List<Unit>();
private int i;
protected int Capacity;
protected GeneratorType ;
public int Count => Buf.Count;
public Generator(int Capacity, GeneratorType genType)
{
this.Capacity = Capacity;
this. = genType;
Refresh();
}
public Unit gen()
{
switch ()
{
case GeneratorType.Bird:
return GetBird();
case GeneratorType.Snake:
return GetSnake();
case GeneratorType.Beast:
return GetBeast();
case GeneratorType.Aquatic:
return GetAquatic();
case GeneratorType.Insect:
return GetInsect();
case GeneratorType.Humanoid:
return GetHumanoid();
case GeneratorType.:
return Get幻獣();
case GeneratorType.:
return Get魔獣();
case GeneratorType.Dragon:
return GetDragon();
}
return GetHumanoid();
}
private static Unit Generate(ChaD ChaD1, ChaD ChaD2, int , string )
{
= (int)((double) * 0.5).Clamp(0.0, 5.0);
Unit unit = GetUnit(ChaD1, , ).Mix(GetUnit(ChaD2, , ), : true);
unit.Virgin = false;
if ( != GameText.)
{
unit.Virgin = == GameText. || == GameText. || 0.3.Lot();
}
if (!( == GameText.) && !( == GameText.) && !( == GameText.))
{
unit.Scars = 0.05.Lot();
}
return unit;
}
private static Unit GetUnit(ChaD ChaD, int , string )
{
Unit unit = new Unit();
unit.ChaD = ChaD;
unit.Race = ;
unit.Name = ;
unit. = ;
RaceInformation 2 = Def.race_information[];
unit. = new RaceInformation(2., 2., 2., ((int)((double)(2. + 1) * unit.ChaD.)).Clamp(1, 9), ((int)((double)(2. + 1) * unit.ChaD.)).Clamp(1, 9));
unit.Set原種素質();
unit.Set種族特性();
unit.Set構成特性();
unit.Price = (ulong)((double)unit.GetPrice() * ((Sta.GameData. == Sta.GameData.) ? 0.6 : 1.0));
return unit;
}
public static Unit ()
{
switch (Oth.GetRandomIndex(7.0, 5.0, 3.0, 1.0))
{
case 0:
return Generate(SpeciesDefaults.Getヒューマン(), SpeciesDefaults.Getヒューマン(), 2, GameText.);
case 1:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getオーグリス(b), SpeciesDefaults.Getオーグリス(b), 2, GameText.);
}
case 2:
return Generate(SpeciesDefaults.Getドワーフ(), SpeciesDefaults.Getドワーフ(), 2, GameText.);
case 3:
return Generate(SpeciesDefaults.Getサイクロプス(), SpeciesDefaults.Getサイクロプス(), 2, GameText.);
default:
return null;
}
}
public static Unit ()
{
Unit unit = new Unit();
unit.ChaD = SpeciesDefaults.Getプレーヤー();
unit.Race = GameText.;
unit.Name = unit.Race;
unit. = 2;
unit. = Def.race_information[unit.Race];
D eleD = unit.ChaD.body_tree._接続.GetEleD<D>();
unit.Hairless = (!eleD._表示 && !eleD._獣毛_表示) || unit.ChaD. == 0.0;
unit.Mother = unit;
unit.Father = unit;
return unit;
}
protected Unit GetBird()
{
return Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()) switch
{
0 => Generate(SpeciesDefaults.GetHarpy(), SpeciesDefaults.GetHarpy(), 2, GameText.),
1 => Generate(SpeciesDefaults.Getハルピュイア(), SpeciesDefaults.Getハルピュイア(), 2, GameText.),
2 => Generate(SpeciesDefaults.GetPhoenix(), SpeciesDefaults.GetPhoenix(), 4, GameText.),
_ => null,
};
}
protected Unit GetSnake()
{
return Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()) switch
{
0 => Generate(SpeciesDefaults.Getラミア(), SpeciesDefaults.Getラミア(), 2, GameText.),
1 => Generate(SpeciesDefaults.Getヒュドラ(), SpeciesDefaults.Getヒュドラ(), 3, GameText.),
2 => Generate(SpeciesDefaults.Getエキドナ(), SpeciesDefaults.Getエキドナ(), 3, GameText.),
3 => Generate(SpeciesDefaults.Getウロボロス(), SpeciesDefaults.Getウロボロス(), 4, GameText.),
_ => null,
};
}
protected Unit GetBeast()
{
return Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()) switch
{
0 => Generate(SpeciesDefaults.Getウェアキャット(), SpeciesDefaults.Getウェアキャット(), 2, GameText.),
1 => Generate(SpeciesDefaults.Getウェアウルフ(), SpeciesDefaults.Getウェアウルフ(), 2, GameText.),
2 => Generate(SpeciesDefaults.Getウェアフォックス(), SpeciesDefaults.Getウェアフォックス(), 2, GameText.),
3 => Generate(SpeciesDefaults.Getミタウロス(), SpeciesDefaults.Getミタウロス(), 2, GameText.),
4 => Generate(SpeciesDefaults.Getアフール(), SpeciesDefaults.Getアフール(), 2, GameText.),
5 => Generate(SpeciesDefaults.Getオケンタウレ(), SpeciesDefaults.Getオケンタウレ(), 2, GameText.),
6 => Generate(SpeciesDefaults.Getヒッポケンタウレ(), SpeciesDefaults.Getヒッポケンタウレ(), 3, GameText.),
7 => Generate(SpeciesDefaults.Getブケンタウレ(), SpeciesDefaults.Getブケンタウレ(), 3, GameText.),
8 => Generate(SpeciesDefaults.Getカプラケンタウレ(), SpeciesDefaults.Getカプラケンタウレ(), 3, GameText.),
9 => Generate(SpeciesDefaults.Getレオントケンタウレ(), SpeciesDefaults.Getレオントケンタウレ(), 3, GameText.),
10 => Generate(SpeciesDefaults.Getティグリスケンタウレ(), SpeciesDefaults.Getティグリスケンタウレ(), 3, GameText.),
11 => Generate(SpeciesDefaults.Getパンテーラケンタウレ(), SpeciesDefaults.Getパンテーラケンタウレ(), 3, GameText.),
12 => Generate(SpeciesDefaults.Getチータケンタウレ(), SpeciesDefaults.Getチータケンタウレ(), 3, GameText.),
_ => null,
};
}
protected Unit GetAquatic()
{
switch (Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()))
{
case 0:
return Generate(SpeciesDefaults.Getカッパ(), SpeciesDefaults.Getカッパ(), 2, GameText.);
case 1:
return Generate(SpeciesDefaults.Getマーメイド(), SpeciesDefaults.Getマーメイド(), 2, GameText.);
case 2:
return Generate(SpeciesDefaults.Getオールドマーメイド(), SpeciesDefaults.Getオールドマーメイド(), 2, GameText.);
case 3:
return Generate(SpeciesDefaults.Getドルフィンマーメイド(), SpeciesDefaults.Getドルフィンマーメイド(), 2, GameText.);
case 4:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getイクテュオケンタウレ(b), SpeciesDefaults.Getイクテュオケンタウレ(b), 3, GameText.);
}
case 5:
return Generate(SpeciesDefaults.Getデルピヌスケンタウレ(), SpeciesDefaults.Getデルピヌスケンタウレ(), 3, GameText.);
case 6:
return Generate(SpeciesDefaults.Getシーラミア(), SpeciesDefaults.Getシーラミア(), 2, GameText.);
case 7:
{
int num = RNG.XS.Next(3);
return Generate(SpeciesDefaults.Getセイレーン(num), SpeciesDefaults.Getセイレーン(num), 2, GameText.);
}
case 8:
return Generate(SpeciesDefaults.Getスキュラ(), SpeciesDefaults.Getスキュラ(), 2, GameText.);
case 9:
return Generate(SpeciesDefaults.Getカリュブディス(), SpeciesDefaults.Getカリュブディス(), 3, GameText.);
case 10:
return Generate(SpeciesDefaults.Getクラーケン(), SpeciesDefaults.Getクラーケン(), 3, GameText.);
case 11:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getオールドスキュラ(b), SpeciesDefaults.Getオールドスキュラ(b), 4, GameText.);
}
default:
return null;
}
}
protected Unit GetInsect()
{
switch (Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()))
{
case 0:
return Generate(SpeciesDefaults.Getウェアマンティス(), SpeciesDefaults.Getウェアマンティス(), 1, GameText.);
case 1:
return Generate(SpeciesDefaults.Getウェアドラゴンフライ(), SpeciesDefaults.Getウェアドラゴンフライ(), 1, GameText.);
case 2:
return Generate(SpeciesDefaults.Getウェアビートル(), SpeciesDefaults.Getウェアビートル(), 1, GameText.);
case 3:
return Generate(SpeciesDefaults.Getウェアスタッグビートル(), SpeciesDefaults.Getウェアスタッグビートル(), 1, GameText.);
case 4:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getアラクネ(b), SpeciesDefaults.Getアラクネ(b), 2, GameText.);
}
case 5:
return Generate(SpeciesDefaults.Getギルタブリル(), SpeciesDefaults.Getギルタブリル(), 2, GameText.);
case 6:
return Generate(SpeciesDefaults.Getギルタブルル(), SpeciesDefaults.Getギルタブルル(), 2, GameText.);
case 7:
return Generate(SpeciesDefaults.Getムカデジョウロウ(), SpeciesDefaults.Getムカデジョウロウ(), 2, GameText.);
case 8:
return Generate(SpeciesDefaults.Getサンドワーム(), SpeciesDefaults.Getサンドワーム(), 2, GameText.);
case 9:
{
bool b = RNG.XS.NextBool();
bool b2 = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getフェアリー(b, b2), SpeciesDefaults.Getフェアリー(b, b2), 1, GameText.);
}
default:
return null;
}
}
protected Unit GetHumanoid()
{
switch (Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()))
{
case 0:
return Generate(SpeciesDefaults.Getリリン(), SpeciesDefaults.Getリリン(), 2, GameText.);
case 1:
return Generate(SpeciesDefaults.Getエルフ(), SpeciesDefaults.Getエルフ(), 2, GameText.);
case 2:
return Generate(SpeciesDefaults.Getドワーフ(), SpeciesDefaults.Getドワーフ(), 2, GameText.);
case 3:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getオーグリス(b), SpeciesDefaults.Getオーグリス(b), 2, GameText.);
}
case 4:
return Generate(SpeciesDefaults.Getサイクロプス(), SpeciesDefaults.Getサイクロプス(), 2, GameText.);
case 5:
return Generate(SpeciesDefaults.Getデビル(), SpeciesDefaults.Getデビル(), 2, GameText.);
case 6:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getエンジェル(b), SpeciesDefaults.Getエンジェル(b), 2, GameText.);
}
case 7:
return Generate(SpeciesDefaults.Getサキュバス(), SpeciesDefaults.Getサキュバス(), 2, GameText.);
case 8:
return Generate(SpeciesDefaults.Getアルラウネ(), SpeciesDefaults.Getアルラウネ(), 2, GameText.);
case 9:
return Generate(SpeciesDefaults.Getスライム(), SpeciesDefaults.Getスライム(), 0, GameText.);
case 10:
return Generate(SpeciesDefaults.Getエイリアン(), SpeciesDefaults.Getエイリアン(), 3, GameText.);
default:
return null;
}
}
protected Unit Get幻獣()
{
return Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()) switch
{
0 => Generate(SpeciesDefaults.Getカーバンクル(), SpeciesDefaults.Getカーバンクル(), 2, GameText.),
1 => Generate(SpeciesDefaults.Getペガサス(), SpeciesDefaults.Getペガサス(), 3, GameText.),
2 => Generate(SpeciesDefaults.Getユニコーン(), SpeciesDefaults.Getユニコーン(), 3, GameText.),
3 => Generate(SpeciesDefaults.Getバイコーン(), SpeciesDefaults.Getバイコーン(), 3, GameText.),
4 => Generate(SpeciesDefaults.Getアリコーン(), SpeciesDefaults.Getアリコーン(), 3, GameText.),
5 => Generate(SpeciesDefaults.Getグリフォン(), SpeciesDefaults.Getグリフォン(), 3, GameText.),
6 => Generate(SpeciesDefaults.Getモケロス(), SpeciesDefaults.Getモケロス(), 3, GameText.),
7 => Generate(SpeciesDefaults.Getヒッポグリフ(), SpeciesDefaults.Getヒッポグリフ(), 3, GameText.),
_ => null,
};
}
protected Unit Get魔獣()
{
switch (Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()))
{
case 0:
return Generate(SpeciesDefaults.Getキマイラ(), SpeciesDefaults.Getキマイラ(), 3, GameText.);
case 1:
{
bool b = RNG.XS.NextBool();
return Generate(SpeciesDefaults.Getスフィンクス(b), SpeciesDefaults.Getスフィンクス(b), 3, GameText.);
}
case 2:
return Generate(SpeciesDefaults.Getカトブレパス(), SpeciesDefaults.Getカトブレパス(), 3, GameText.);
case 3:
return Generate(SpeciesDefaults.Getバジリスク(), SpeciesDefaults.Getバジリスク(), 3, GameText.);
case 4:
return Generate(SpeciesDefaults.Getコカトリス(), SpeciesDefaults.Getコカトリス(), 3, GameText.);
case 5:
return Generate(SpeciesDefaults.Getゴルゴン(), SpeciesDefaults.Getゴルゴン(), 3, GameText.);
default:
return null;
}
}
protected Unit GetDragon()
{
return Oth.GetRandomIndex(GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight(), GameText..GetRareWeight()) switch
{
0 => Generate(SpeciesDefaults.Getリザードマン(), SpeciesDefaults.Getリザードマン(), 2, GameText.),
1 => Generate(SpeciesDefaults.Getドラゴニュート(), SpeciesDefaults.Getドラゴニュート(), 3, GameText.),
2 => Generate(SpeciesDefaults.Getワーム(), SpeciesDefaults.Getワーム(), 4, GameText.),
3 => Generate(SpeciesDefaults.Getリュウ(), SpeciesDefaults.Getリュウ(), 5, GameText.),
4 => Generate(SpeciesDefaults.Getワイバーン(), SpeciesDefaults.Getワイバーン(), 4, GameText.),
5 => Generate(SpeciesDefaults.Getドラコケンタウレ(), SpeciesDefaults.Getドラコケンタウレ(), 4, GameText.),
6 => Generate(SpeciesDefaults.Getドラゴン(), SpeciesDefaults.Getドラゴン(), 5, GameText.),
_ => null,
};
}
public void Refresh()
{
i = 0;
Buf.Clear();
Unit[] a = new Unit[Capacity];
for (int i = 0; i < Capacity; i++)
a[i] = gen();
/*
Parallel.For(0, Capacity, Sta.po3, delegate(int i)
{
a[i] = g();
});*/
Buf.AddRange(a);
}
public void Refresh(int Capacity)
{
this.Capacity = Capacity;
i = 0;
Buf.Clear();
Buf.Capacity = Capacity;
Unit[] a = new Unit[Capacity];
for (int i = 0; i < Capacity; i++)
a[i] = gen();
/*
Parallel.For(0, Capacity, Sta.po3, delegate(int i)
{
a[i] = g();
});*/
Buf.AddRange(a);
}
public void Rotation()
{
i++;
}
public Unit RefCharacter()
{
if (Buf.Count <= 0)
{
return null;
}
return Buf[i % Buf.Count];
}
public Unit GetCharacter()
{
if (Buf.Count > 0)
{
Unit unit = Buf[i % Buf.Count];
Buf.Remove(unit);
return unit;
}
return null;
}
}
}