Files
SlaveMatrix-SDL/SlaveMatrix/SlaveMatrix/BodyPartClasses/マウス処理.cs
2025-05-07 10:25:45 -07:00

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;
}
}