439 lines
11 KiB
C#
439 lines
11 KiB
C#
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using _2DGAMELIB;
|
|
|
|
namespace SlaveMatrix;
|
|
|
|
public class マウス処理 : 処理B
|
|
{
|
|
public bool Is吸付;
|
|
|
|
public bool Is舐め;
|
|
|
|
private Mot キスモーション;
|
|
|
|
private ContactD 箇所;
|
|
|
|
private double x;
|
|
|
|
private Vector2D v;
|
|
|
|
private Vector2D o;
|
|
|
|
public bool 切り替え;
|
|
|
|
public bool Isモード
|
|
{
|
|
get
|
|
{
|
|
if (!Is吸付 && !Is舐め)
|
|
{
|
|
return 調教UI.マウス挿入.Is挿入;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public void 吸引()
|
|
{
|
|
調教UI.擬音キュー.Enqueue(delegate(Are a)
|
|
{
|
|
調教UI.擬音.Sound(a, 対象.Ele.位置.GetAreaPoint(0.01), Sta.吸引.GetVal(1.0, RNG.XS.NextDouble()), new Font("MS Gothic", 1f), Col.Black, 0.2, b: true);
|
|
});
|
|
}
|
|
|
|
private void オーバー時(string str, ref ContactD cd)
|
|
{
|
|
if (Sta.GameData.ガイド)
|
|
{
|
|
ip.SubInfoIm = (調教UI.IsHitCha(ref cd) ? (str + "LDo:" + GameText.吸引 + "\r\nWh:" + GameText.舐る + "\r\n") : si());
|
|
}
|
|
}
|
|
|
|
private void 吸引時(string str)
|
|
{
|
|
if (Sta.GameData.ガイド)
|
|
{
|
|
ip.SubInfoIm = str + "LUp:" + GameText.開放;
|
|
}
|
|
}
|
|
|
|
private string si()
|
|
{
|
|
if (!Isモード)
|
|
{
|
|
return "MCl:" + GameText.ハンド切替 + "\r\n" + (調教UI.ペニス挿入.挿抜モーション.Run ? "" : ("RCl:" + GameText.ペニス切替));
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public void 舐め解除(ref ContactD cd)
|
|
{
|
|
調教UI.Action(cd.c, ActionType.Licking, CurrentState.End, ToolType.マウス, 0, 1, 機械: false, 射精: false);
|
|
Player.奴体力消費小();
|
|
Player.主精力消費小();
|
|
Is舐め = false;
|
|
調教UI.放し();
|
|
}
|
|
|
|
public void Move(ref MouseButtons mb, ref Vector2D cp, ref Color hc, ref ContactD cd)
|
|
{
|
|
if (調教UI.Focus != 対象)
|
|
{
|
|
return;
|
|
}
|
|
v = cp;
|
|
x = (o.X - v.X) * 0.008;
|
|
if (Isモード)
|
|
{
|
|
if (Is吸付)
|
|
{
|
|
//TODO fix?
|
|
//Cursor.Position = Med.BaseControlC.PointToScreen(Med.FromBasePosition(対象.Ele.位置));
|
|
}
|
|
else if (Is舐め)
|
|
{
|
|
if (cd.e == null)
|
|
{
|
|
舐め解除(ref cd);
|
|
}
|
|
else if (Sta.GameData.ガイド)
|
|
{
|
|
ip.SubInfoIm = "Wh:" + GameText.舐る;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
調教UI.マウス挿入.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
}
|
|
else if (cd.c == ContactType.Milk)
|
|
{
|
|
調教UI.マウス.Xi = 0;
|
|
調教UI.Set_乳首(対象.Ele, cd.e.右);
|
|
箇所 = cd;
|
|
オーバー時(GameText.乳首 + "\r\n", ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Nucleus)
|
|
{
|
|
調教UI.マウス.Xi = 0;
|
|
調教UI.Set_陰核(対象.Ele);
|
|
箇所 = cd;
|
|
オーバー時(GameText.陰核 + "\r\n", ref cd);
|
|
}
|
|
else if (Player.フェラ1 && cd.c == ContactType.Mouth)
|
|
{
|
|
箇所 = cd;
|
|
対象.Ele.濃度 = 0.5;
|
|
調教UI.マウス.Xi = 4;
|
|
調教UI.マウス挿入.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Vagina)
|
|
{
|
|
箇所 = cd;
|
|
調教UI.マウス.Xi = 4;
|
|
調教UI.マウス挿入.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Anal)
|
|
{
|
|
箇所 = cd;
|
|
調教UI.マウス.Xi = 4;
|
|
調教UI.マウス挿入.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Thread)
|
|
{
|
|
箇所 = cd;
|
|
調教UI.マウス.Xi = 4;
|
|
調教UI.マウス挿入.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
else
|
|
{
|
|
調教UI.マウス.Xi = 0;
|
|
調教UI.マウス.Yi = 0;
|
|
調教UI.放し();
|
|
if (!(調教UI.X < cp.X) || !(cp.Y < 調教UI.Y))
|
|
{
|
|
対象.Ele.濃度 = 1.0;
|
|
}
|
|
オーバー時("", ref cd);
|
|
}
|
|
o = v;
|
|
}
|
|
|
|
public void Down(ref MouseButtons mb, ref Vector2D cp, ref Color hc, ref ContactD cd)
|
|
{
|
|
if (調教UI.Focus != 対象)
|
|
{
|
|
return;
|
|
}
|
|
if (mb == MouseButtons.Left)
|
|
{
|
|
if (!調教UI.マウス挿入.Is挿入 && 調教UI.マウス.Xi != 4 && 調教UI.IsHitCha(ref cd))
|
|
{
|
|
舐め解除(ref cd);
|
|
調教UI.マウス.Xi = 1;
|
|
Is吸付 = true;
|
|
箇所 = cd;
|
|
if (cd.c == ContactType.Milk)
|
|
{
|
|
調教UI.Set_乳首(対象.Ele, cd.e.右);
|
|
吸引時(GameText.乳首 + "\r\n");
|
|
調教UI.乳首演出();
|
|
}
|
|
else if (cd.c == ContactType.Nucleus)
|
|
{
|
|
調教UI.Set_陰核(対象.Ele);
|
|
吸引時(GameText.陰核 + "\r\n");
|
|
調教UI.陰核演出();
|
|
}
|
|
else if (cd.c == ContactType.Mouth)
|
|
{
|
|
対象.Ele.濃度 = 0.5;
|
|
対象.Ele.角度C = (double)RNG.XS.NextSign() * 45.0;
|
|
調教UI.Set_口(対象.Ele);
|
|
吸引時(GameText.口腔 + "\r\n");
|
|
調教UI.口腔演出();
|
|
}
|
|
else if (cd.c == ContactType.Vagina)
|
|
{
|
|
調教UI.Set_膣口(対象.Ele);
|
|
吸引時(GameText.膣腔 + "\r\n");
|
|
調教UI.膣腔演出();
|
|
}
|
|
else if (cd.c == ContactType.Anal)
|
|
{
|
|
調教UI.Set_肛門(対象.Ele);
|
|
吸引時(GameText.肛門 + "\r\n");
|
|
調教UI.肛門演出();
|
|
}
|
|
else if (cd.c == ContactType.Thread)
|
|
{
|
|
調教UI.Set_出糸(対象.Ele);
|
|
吸引時(GameText.出糸 + "\r\n");
|
|
調教UI.出糸演出();
|
|
}
|
|
else
|
|
{
|
|
吸引時("");
|
|
}
|
|
調教UI.Action(箇所.c, ActionType.吸引, CurrentState.Start, ToolType.マウス, 0, 1, 機械: false, 射精: false);
|
|
Player.奴体力消費小();
|
|
Player.主精力消費小();
|
|
キスモーション.Start();
|
|
}
|
|
else
|
|
{
|
|
調教UI.マウス挿入.Down(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
}
|
|
else if (mb == MouseButtons.Right)
|
|
{
|
|
if (!Isモード && !調教UI.ペニス挿入.Is挿入)
|
|
{
|
|
調教UI.Focus.Ele.濃度 = 0.5;
|
|
調教UI.Focus = 調教UI.ペニスCM;
|
|
調教UI.ペニスCM.Ele.位置B = cp;
|
|
調教UI.ペニス処理.選択 = true;
|
|
調教UI.ペニス処理.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
}
|
|
else if (mb == MouseButtons.Middle && !Isモード && !調教UI.ハンド挿入.Is挿入)
|
|
{
|
|
if (切り替え)
|
|
{
|
|
切り替え = false;
|
|
return;
|
|
}
|
|
調教UI.Focus.Ele.濃度 = 0.5;
|
|
調教UI.Focus = 調教UI.ハンド右CM;
|
|
調教UI.ハンド右.位置B = cp;
|
|
調教UI.ハンド処理.切り替え = true;
|
|
調教UI.ハンド処理.Move(ref mb, ref cp, ref hc, ref cd);
|
|
}
|
|
}
|
|
|
|
public void Up(ref MouseButtons mb, ref Vector2D cp, ref Color hc, ref ContactD cd)
|
|
{
|
|
if (調教UI.Focus == 対象 && mb == MouseButtons.Left && Is吸付)
|
|
{
|
|
調教UI.Action(箇所.c, ActionType.吸引, CurrentState.End, ToolType.マウス, 0, 1, 機械: false, 射精: false);
|
|
Player.奴体力消費小();
|
|
Player.主精力消費小();
|
|
調教UI.マウス.Xi = 0;
|
|
Is吸付 = false;
|
|
キスモーション.End();
|
|
対象.Ele.濃度 = 1.0;
|
|
対象.Ele.角度C = 0.0;
|
|
調教UI.放し();
|
|
if (cd.c == ContactType.Mouth)
|
|
{
|
|
オーバー時(GameText.口腔 + "\r\n", ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Milk)
|
|
{
|
|
オーバー時(GameText.乳首 + "\r\n", ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Nucleus)
|
|
{
|
|
オーバー時(GameText.陰核 + "\r\n", ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Vagina)
|
|
{
|
|
オーバー時(GameText.膣腔 + "\r\n", ref cd);
|
|
}
|
|
else if (cd.c == ContactType.Anal)
|
|
{
|
|
オーバー時(GameText.肛門 + "\r\n", ref cd);
|
|
}
|
|
else
|
|
{
|
|
オーバー時("", ref cd);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Leave(ref MouseButtons mb, ref Vector2D cp, ref Color hc)
|
|
{
|
|
}
|
|
|
|
public void Wheel(ref MouseButtons mb, ref Vector2D cp, ref int dt, ref Color hc, ref ContactD cd)
|
|
{
|
|
if (調教UI.Focus == 対象 && !Is吸付 && !調教UI.マウス挿入.Is挿入 && 調教UI.IsHitCha(ref cd))
|
|
{
|
|
if (!Is舐め)
|
|
{
|
|
調教UI.Action(cd.c, ActionType.Licking, CurrentState.Start, ToolType.マウス, 0, 1, 機械: false, 射精: false);
|
|
Player.奴体力消費小();
|
|
Player.主精力消費小();
|
|
}
|
|
else
|
|
{
|
|
調教UI.Action(cd.c, ActionType.Licking, CurrentState.Continue, ToolType.マウス, 0, 1, 機械: false, 射精: false);
|
|
Player.奴体力消費小();
|
|
Player.主精力消費小();
|
|
}
|
|
Is舐め = true;
|
|
if (調教UI.IsHitCha(ref cd))
|
|
{
|
|
調教UI.押し(ref cd);
|
|
}
|
|
調教UI.マウス.Xi = 3;
|
|
調教UI.マウス.Yi = (調教UI.マウス.Yi - dt.Sign() * 2).Clamp(0, 調教UI.マウス.本体.CountY);
|
|
if (cd.c == ContactType.Mouth)
|
|
{
|
|
対象.Ele.濃度 = 0.5;
|
|
}
|
|
}
|
|
}
|
|
|
|
public マウス処理(TrainingUI 調教UI, CM マウス)
|
|
: base(調教UI, マウス)
|
|
{
|
|
マウス処理 マウス処理2 = this;
|
|
double d = 0.0;
|
|
double s = 0.0;
|
|
bool f = true;
|
|
Stopwatch sw = new Stopwatch();
|
|
キスマーク k = null;
|
|
Vector2D cp;
|
|
Color hc;
|
|
キスモーション = new Mot(0.0, 0.15)
|
|
{
|
|
BaseSpeed = 4.0,
|
|
Staing = delegate
|
|
{
|
|
f = true;
|
|
sw.Restart();
|
|
s = 1.09.Reciprocal();
|
|
マウス処理2.吸引();
|
|
},
|
|
Runing = delegate(Mot m)
|
|
{
|
|
if (マウス処理2.箇所.c == ContactType.Milk)
|
|
{
|
|
調教UI.Set_乳首(マウス処理2.対象.Ele, マウス処理2.箇所.e.右);
|
|
}
|
|
else if (マウス処理2.箇所.c == ContactType.Nucleus)
|
|
{
|
|
調教UI.Set_陰核(マウス処理2.対象.Ele);
|
|
}
|
|
if (f)
|
|
{
|
|
d = m.Value.Inverse();
|
|
マウス処理2.対象.Ele.尺度C = s * d;
|
|
}
|
|
マウス処理2.対象.Ele.位置C = Oth.GetRandomVector() * d * 0.0005;
|
|
調教UI.マウス.X2Y0_舌.PositionCont = Oth.GetRandomVector() * d * 0.001;
|
|
if (sw.IsRunning)
|
|
{
|
|
if (sw.ElapsedMilliseconds > 250)
|
|
{
|
|
cp = マウス処理2.対象.Ele.位置B;
|
|
hc = マウス処理2.Med.GetHitColor(マウス処理2.Med.FromBasePosition(cp));
|
|
k = マウス処理2.Bod.Addキスマーク(cp, hc);
|
|
sw.Stop();
|
|
}
|
|
}
|
|
else if (k != null)
|
|
{
|
|
k.濃度 = (k.濃度 + 0.05).Clamp(0.0, 1.0);
|
|
if (マウス処理2.Bod.EI胸 != null)
|
|
{
|
|
マウス処理2.Bod.EI胸.Updatef = true;
|
|
}
|
|
if (マウス処理2.Bod.EI腕前 != null)
|
|
{
|
|
マウス処理2.Bod.EI腕前.Updatef = true;
|
|
}
|
|
if (マウス処理2.Bod.EI腿 != null)
|
|
{
|
|
マウス処理2.Bod.EI腿.Updatef = true;
|
|
}
|
|
}
|
|
調教UI.Action(マウス処理2.箇所.c, ActionType.吸引, CurrentState.Continue, ToolType.マウス, 0, 1, 機械: false, 射精: false);
|
|
Player.奴体力消費小();
|
|
Player.主精力消費小();
|
|
if (マウス処理2.Bod.噴乳左.母乳垂れ1_表示 && マウス処理2.箇所.c == ContactType.Milk && マウス処理2.Cha.噴乳.Run)
|
|
{
|
|
Sta.GameData.精力 = (Sta.GameData.精力 + 0.02 * RNG.XS.NextDouble()).Clamp(0.0, 1.0);
|
|
}
|
|
},
|
|
Reaing = delegate(Mot m)
|
|
{
|
|
f = false;
|
|
d = m.Value.Inverse();
|
|
},
|
|
Rouing = delegate
|
|
{
|
|
},
|
|
Ending = delegate(Mot m)
|
|
{
|
|
m.ResetValue();
|
|
マウス処理2.対象.Ele.尺度C = 1.0;
|
|
マウス処理2.対象.Ele.位置C = Dat.Vec2DZero;
|
|
調教UI.マウス.X2Y0_舌.PositionCont = Dat.Vec2DZero;
|
|
}
|
|
};
|
|
調教UI.Mots.Add(キスモーション.GetHashCode().ToString(), キスモーション);
|
|
}
|
|
|
|
public void SetCha(Cha Cha)
|
|
{
|
|
base.Cha = Cha;
|
|
Bod = Cha.Bod;
|
|
}
|
|
|
|
public new void Reset()
|
|
{
|
|
base.Reset();
|
|
Is吸付 = false;
|
|
Is舐め = false;
|
|
キスモーション?.End();
|
|
箇所 = default(ContactD);
|
|
x = 0.0;
|
|
v = default(Vector2D);
|
|
o = default(Vector2D);
|
|
切り替え = false;
|
|
}
|
|
}
|