using System.Collections.Generic; using System.Drawing; using _2DGAMELIB; using SlaveMatrix.GameClasses; namespace SlaveMatrix { public class キャップ処理 : 処理B { public ConstProp CP中 = new ConstProp(); public ConstProp CP左 = new ConstProp(); public ConstProp CP右 = new ConstProp(); public CharacterElement キャップ1; public CharacterElement キャップ2; public CharacterElement キャップ3; private Dictionary キャップ = new Dictionary(); private キャップ情報 キャップ着; private キャップ情報 キャップ脱; public bool キャップ中着; public bool キャップ左着; public bool キャップ右着; private bool ハンドf; private Motion キャップ振動; private bool キャップ中_; private bool キャップ左_; private bool キャップ右_; public bool Is仮着 { get { if ((キャップ中着 || !Isキャップ1着()) && (キャップ左着 || !Isキャップ2左着())) { if (!キャップ右着) { return Isキャップ2右着(); } return false; } return true; } } public bool キャップ中 { get { return キャップ中_; } set { キャップ中_ = value; if (!キャップ中_) { Bod.キャップ1.位置C = DataConsts.Vec2DZero; } if (キャップ中_ || キャップ左_ || キャップ右_) { キャップ振動.Start(); } else { キャップ振動.End(); } } } public bool キャップ左 { get { return キャップ左_; } set { キャップ左_ = value; if (!キャップ左_) { Bod.キャップ1.位置C = DataConsts.Vec2DZero; } if (キャップ中_ || キャップ左_ || キャップ右_) { キャップ振動.Start(); } else { キャップ振動.End(); } } } public bool キャップ右 { get { return キャップ右_; } set { キャップ右_ = value; if (!キャップ右_) { Bod.キャップ1.位置C = DataConsts.Vec2DZero; } if (キャップ中_ || キャップ左_ || キャップ右_) { キャップ振動.Start(); } else { キャップ振動.End(); } } } public void 吸着(Element 対象) { 調教UI.擬音キュー.Enqueue(delegate(RenderArea a) { 調教UI.擬音.Sound(a, 対象.位置.GetAreaPoint(0.01), GlobalState.吸着.GetVal(1.0, 1.0), new Font("MS Gothic", 1f), ColorHelper.Black, 0.2, b: true); }); } public void 吸脱(Element 対象) { 調教UI.擬音キュー.Enqueue(delegate(RenderArea a) { 調教UI.擬音.Sound(a, 対象.位置.GetAreaPoint(0.01), GlobalState.吸脱.GetVal(1.0, 1.0), new Font("MS Gothic", 1f), ColorHelper.Black, 0.2, b: true); }); } public void 振動(Element 対象) { if ((対象 is キャップ1 && CP中.GetFlag(0.2)) || (対象 is キャップ2 && !対象.右 && CP左.GetFlag(0.2)) || (対象 is キャップ2 && 対象.右 && CP右.GetFlag(0.2))) { 調教UI.擬音キュー.Enqueue(delegate(RenderArea a) { 調教UI.擬音.Sound(a, 対象.位置.GetAreaPoint(0.02), GlobalState.振動.GetVal(1.0, 1.0), new Font("MS Gothic", 1f), ColorHelper.Black, 0.15, b: true); }); } } public bool Isキャップ1着() { return Bod.Setキャップ1.Equals(キャップ着); } public bool Isキャップ2左着() { return Bod.Setキャップ2左.Equals(キャップ着); } public bool Isキャップ2右着() { return Bod.Setキャップ2右.Equals(キャップ着); } private void 切替時(bool 対象) { if (GlobalState.GameData.ガイド) { ip.SubInfoIm = "MCl:" + (対象 ? GameText.停止 : GameText.作動) + "\r\nLCl:" + GameText.外す; } } private void 装着時() { if (GlobalState.GameData.ガイド) { ip.SubInfoIm = "LCl:" + GameText.装着; } } private void 待機時() { if (GlobalState.GameData.ガイド) { if (ハンドf) { ip.SubInfoIm = ""; } else { ip.SubInfoIm = "RCl:" + GameText.放す; } } } private void SetFocus(Vector2D p) { if (調教UI.Focus == キャップ1) { if (キャップ2.Show) { 調教UI.Focus = キャップ2; } else if (キャップ3.Show) { 調教UI.Focus = キャップ3; } else { ハンドf = true; } キャップ1.Show = false; キャップ1.使用状態 = UsageStatus.Attach; } else if (調教UI.Focus == キャップ2) { if (キャップ1.Show) { 調教UI.Focus = キャップ1; } else if (キャップ3.Show) { 調教UI.Focus = キャップ3; } else { ハンドf = true; } キャップ2.Show = false; キャップ2.使用状態 = UsageStatus.Attach; } else if (調教UI.Focus == キャップ3) { if (キャップ1.Show) { 調教UI.Focus = キャップ1; } else if (キャップ2.Show) { 調教UI.Focus = キャップ2; } else { ハンドf = true; } キャップ3.Show = false; キャップ3.使用状態 = UsageStatus.Attach; } 調教UI.Focus.Element.位置B = p; if (!ハンドf) { 調教UI.Set持ち手(); } } public void キャップ中外し() { if (キャップ中着) { キャップ中 = false; Bod.Setキャップ1 = キャップ脱; if (キャップ.ContainsKey(Bod.キャップ1)) { キャップ[Bod.キャップ1].Show = true; キャップ[Bod.キャップ1].DraShow = true; キャップ[Bod.キャップ1].StaShow = true; キャップ[Bod.キャップ1].描画Show = true; キャップ[Bod.キャップ1].Element.Intensity = 0.5; キャップ[Bod.キャップ1].使用状態 = UsageStatus.Standby; キャップ.Remove(Bod.キャップ1); } キャップ中着 = false; } } public void Move(ref MouseButtons mb, ref Vector2D cp, ref Vector2D op, ref Color hc, ref ContactD cd) { if (調教UI.Focus == 調教UI.ハンド右CM) { if (!調教UI.ハンド処理.Isモード) { if (キャップ中着 && (cd.e is キャップ1 || cd.c == ContactType.Nucleus)) { 調教UI.ハンド右.Body.SetIndexX(5); 調教UI.Set_キャップ中(調教UI.ハンド右); 切替時(キャップ中); } else if (キャップ左着 && (cd.e is キャップ2 || cd.c == ContactType.Milk) && !cd.e.右) { 調教UI.ハンド右CM.Show = false; 調教UI.ハンド左表示 = true; 調教UI.ハンド左.位置B = cp; 調教UI.ハンド左.Body.SetIndexX(5); 調教UI.Set_キャップ左(調教UI.ハンド左); 切替時(キャップ左); } else if (キャップ右着 && (cd.e is キャップ2 || cd.c == ContactType.Milk) && cd.e.右) { 調教UI.ハンド右.Body.SetIndexX(5); 調教UI.Set_キャップ右(調教UI.ハンド右); 切替時(キャップ右); } else if (cd.c != ContactType.Milk && (キャップ中着 || キャップ左着 || キャップ右着) && (調教UI.ハンド右.Body.GetIndexX() == 5 || 調教UI.ハンド左.Body.GetIndexX() == 5)) { 調教UI.ハンド左表示 = false; 調教UI.ハンド右CM.Show = true; 調教UI.ハンド右.Body.SetIndexX(0); 調教UI.ハンド左.Body.SetIndexX(0); } } } else if (調教UI.Focus == キャップ1 || 調教UI.Focus == キャップ2 || 調教UI.Focus == キャップ3) { if (!キャップ中着 && (cd.e is キャップ1 || cd.c == ContactType.Nucleus) && (Cha.CharacterData.股施術 || (!Cha.Body.Is蠍 && (!Cha.Body.Is蛇 || !Cha.Body.蛇.ガード)))) { 調教UI.押し(ref cd); 調教UI.Focus.DraShow = false; Bod.Setキャップ1 = キャップ着; 調教UI.Set_キャップ中(調教UI.ハンド右); 装着時(); } else if (!キャップ左着 && (cd.e is キャップ2 || cd.c == ContactType.Milk) && !cd.e.右) { 調教UI.押し(ref cd); 調教UI.Focus.DraShow = false; Bod.Setキャップ2左 = キャップ着; 調教UI.Set_キャップ左(調教UI.ハンド右); 装着時(); } else if (!キャップ右着 && (cd.e is キャップ2 || cd.c == ContactType.Milk) && cd.e.右) { 調教UI.押し(ref cd); 調教UI.Focus.DraShow = false; Bod.Setキャップ2右 = キャップ着; 調教UI.Set_キャップ右(調教UI.ハンド右); 装着時(); } else { if (!キャップ中着 && Isキャップ1着()) { Bod.Setキャップ1 = キャップ脱; 調教UI.Focus.DraShow = true; 調教UI.放し(); } else if (!キャップ左着 && Isキャップ2左着()) { Bod.Setキャップ2左 = キャップ脱; 調教UI.Focus.DraShow = true; 調教UI.放し(); } else if (!キャップ右着 && Isキャップ2右着()) { Bod.Setキャップ2右 = キャップ脱; 調教UI.Focus.DraShow = true; 調教UI.放し(); } 待機時(); } } if (ハンドf) { 調教UI.Focus = 調教UI.ハンド右CM; 調教UI.Set持ち手(); ハンドf = false; } } public void Down(ref MouseButtons mb, ref Vector2D cp, ref Vector2D op, ref Color hc, ref ContactD cd) { if (調教UI.Focus.Element.Intensity == 1.0) { if (ハンドf) { 調教UI.Focus = 調教UI.ハンド右CM; ハンドf = false; } if (調教UI.Focus == 調教UI.ハンド右CM) { if (キャップ中着 && (cd.e is キャップ1 || cd.c == ContactType.Nucleus)) { 調教UI.押し(ref cd); if (mb == MouseButtons.Middle) { 調教UI.Set_キャップ中(調教UI.ハンド右); キャップ中 = !キャップ中; 切替時(キャップ中); if (キャップ中) { 調教UI.Action(ContactType.Nucleus, ActionType.核捏, CurrentState.Start, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); } else { 調教UI.Action(ContactType.Nucleus, ActionType.核捏, CurrentState.End, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); } } else if (!調教UI.ハンド処理.Is乳繰り && mb == MouseButtons.Left) { 調教UI.Action(ContactType.Nucleus, ActionType.吸引, CurrentState.End, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); 吸脱(Bod.キャップ1); 切替時(キャップ中); キャップ中 = false; Bod.Setキャップ1 = キャップ脱; キャップ[Bod.キャップ1].Show = true; キャップ[Bod.キャップ1].DraShow = true; キャップ[Bod.キャップ1].StaShow = true; キャップ[Bod.キャップ1].描画Show = true; キャップ[Bod.キャップ1].Element.Intensity = 0.5; キャップ[Bod.キャップ1].使用状態 = UsageStatus.Standby; キャップ.Remove(Bod.キャップ1); キャップ中着 = false; } } else if (キャップ左着 && (cd.e is キャップ2 || cd.c == ContactType.Milk) && !cd.e.右) { 調教UI.押し(ref cd); if (mb == MouseButtons.Middle) { 調教UI.Set_キャップ左(調教UI.ハンド左); キャップ左 = !キャップ左; 切替時(キャップ左); if (キャップ左) { 調教UI.Action(ContactType.Milk, ActionType.Milk, CurrentState.Start, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); } else { 調教UI.Action(ContactType.Milk, ActionType.Milk, CurrentState.End, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); } } else if (!調教UI.ハンド処理.Is乳繰り && mb == MouseButtons.Left) { 調教UI.Action(ContactType.Milk, ActionType.吸引, CurrentState.End, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); 吸脱(Bod.キャップ2左); 切替時(キャップ左); キャップ左 = false; Bod.Setキャップ2左 = キャップ脱; キャップ[Bod.キャップ2左].Show = true; キャップ[Bod.キャップ2左].DraShow = true; キャップ[Bod.キャップ2左].StaShow = true; キャップ[Bod.キャップ2左].描画Show = true; キャップ[Bod.キャップ2左].Element.Intensity = 0.5; キャップ[Bod.キャップ2左].使用状態 = UsageStatus.Standby; キャップ.Remove(Bod.キャップ2左); キャップ左着 = false; } } else { if (!キャップ右着 || (!(cd.e is キャップ2) && cd.c != ContactType.Milk) || !cd.e.右) { return; } 調教UI.押し(ref cd); if (mb == MouseButtons.Middle) { 調教UI.Set_キャップ右(調教UI.ハンド右); キャップ右 = !キャップ右; 切替時(キャップ右); if (キャップ右) { 調教UI.Action(ContactType.Milk, ActionType.Milk, CurrentState.Start, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); } else { 調教UI.Action(ContactType.Milk, ActionType.Milk, CurrentState.End, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); } } else if (!調教UI.ハンド処理.Is乳繰り && mb == MouseButtons.Left) { 調教UI.Action(ContactType.Milk, ActionType.吸引, CurrentState.End, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); 吸脱(Bod.キャップ2右); 切替時(キャップ右); キャップ右 = false; Bod.Setキャップ2右 = キャップ脱; キャップ[Bod.キャップ2右].Show = true; キャップ[Bod.キャップ2右].DraShow = true; キャップ[Bod.キャップ2右].StaShow = true; キャップ[Bod.キャップ2右].描画Show = true; キャップ[Bod.キャップ2右].Element.Intensity = 0.5; キャップ[Bod.キャップ2右].使用状態 = UsageStatus.Standby; キャップ.Remove(Bod.キャップ2右); キャップ右着 = false; } } } else { if (調教UI.Focus != キャップ1 && 調教UI.Focus != キャップ2 && 調教UI.Focus != キャップ3) { return; } if (mb == MouseButtons.Left) { if (!キャップ中着 && (cd.c == ContactType.Nucleus || cd.e == Bod.キャップ1) && (Cha.CharacterData.股施術 || (!Cha.Body.Is蠍 && (!Cha.Body.Is蛇 || !Cha.Body.蛇.ガード)))) { Bod.Setキャップ1 = キャップ着; キャップ.Add(Bod.キャップ1, 調教UI.Focus); キャップ中着 = true; SetFocus(Bod.キャップ1.位置); 調教UI.Action(ContactType.Nucleus, ActionType.吸引, CurrentState.Start, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); 吸着(Bod.キャップ1); } else if (!キャップ左着 && (cd.c == ContactType.Milk || cd.e == Bod.キャップ2左) && !cd.e.右) { Bod.Setキャップ2左 = キャップ着; キャップ.Add(Bod.キャップ2左, 調教UI.Focus); キャップ左着 = true; SetFocus(Bod.キャップ2左.位置); 調教UI.Action(ContactType.Milk, ActionType.吸引, CurrentState.Start, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); 吸着(Bod.キャップ2左); } else if (!キャップ右着 && (cd.c == ContactType.Milk || cd.e == Bod.キャップ2右) && cd.e.右) { Bod.Setキャップ2右 = キャップ着; キャップ.Add(Bod.キャップ2右, 調教UI.Focus); キャップ右着 = true; SetFocus(Bod.キャップ2右.位置); 調教UI.Action(ContactType.Milk, ActionType.吸引, CurrentState.Start, ToolType.キャプ, 0, 1, 機械: false, 射精: false); Player.奴体力消費小(); Player.主精力消費小(); 吸着(Bod.キャップ2右); } } else if (mb == MouseButtons.Right && !Is仮着) { 調教UI.通常放し(); } 待機時(); } } else if ((調教UI.Focus == キャップ1 || 調教UI.Focus == キャップ2 || 調教UI.Focus == キャップ3) && mb == MouseButtons.Right) { 調教UI.通常放し(); } } public void Up(ref MouseButtons mb, ref Vector2D cp, ref Color hc) { if (調教UI.Focus == 調教UI.ハンド右CM) { 調教UI.放し(); } } 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) { } public キャップ処理(TrainingUI 調教UI) : base(調教UI) { キャップ処理 キャップ処理2 = this; double disUnit = 調教UI.Are.DisplayUnitScale; キャップ着.SetDefault(); キャップ1D e = new キャップ1D(); e.SetValuesD("表示", true); キャップ1 = new CharacterElement(Med, 調教UI, 調教UI.キャップ1 = new キャップ1(disUnit, 配色指定.N0, null, Med, e)); キャップ2 = new CharacterElement(Med, 調教UI, 調教UI.キャップ2 = new キャップ1(disUnit, 配色指定.N0, null, Med, e)); キャップ3 = new CharacterElement(Med, 調教UI, 調教UI.キャップ3 = new キャップ1(disUnit, 配色指定.N0, null, Med, e)); キャップ色 配色 = default(キャップ色); 配色.SetDefault(); 調教UI.キャップ1.配色(配色); 調教UI.キャップ2.配色(配色); 調教UI.キャップ3.配色(配色); 調教UI.キャップ1.Intensity = 0.5; 調教UI.キャップ2.Intensity = 0.5; 調教UI.キャップ3.Intensity = 0.5; 調教UI.キャップ1CharacterElement = キャップ1; 調教UI.キャップ2CharacterElement = キャップ2; 調教UI.キャップ3CharacterElement = キャップ3; double d = 0.0005; Vector2D p = DataConsts.Vec2DZero; キャップ振動 = new Motion(-1.0, 1.0) { BaseSpeed = double.MaxValue, OnStart = delegate { }, OnUpdate = delegate(Motion m) { if (キャップ処理2.キャップ左_) { p.X = m.Value * d; p.Y = 0.0 - p.X; キャップ処理2.Bod.キャップ2左.位置C = p; 調教UI.Action(ContactType.Milk, ActionType.Milk, CurrentState.Continue, ToolType.キャプ, 0, 1, 機械: true, 射精: false); Player.奴体力消費小(); キャップ処理2.振動(キャップ処理2.Bod.キャップ2左); } if (キャップ処理2.キャップ右_) { p.X = (0.0 - m.Value) * d; p.Y = p.X; キャップ処理2.Bod.キャップ2右.位置C = p; 調教UI.Action(ContactType.Milk, ActionType.Milk, CurrentState.Continue, ToolType.キャプ, 0, 1, 機械: true, 射精: false); Player.奴体力消費小(); キャップ処理2.振動(キャップ処理2.Bod.キャップ2右); } if (キャップ処理2.キャップ中_) { p.X = m.Value * d * 1.44; p.Y = 0.0; キャップ処理2.Bod.キャップ1.位置C = p; 調教UI.Action(ContactType.Nucleus, ActionType.核捏, CurrentState.Continue, ToolType.キャプ, 0, 1, 機械: true, 射精: false); Player.奴体力消費小(); キャップ処理2.振動(キャップ処理2.Bod.キャップ1); } }, OnReach = delegate { }, OnLoop = delegate { }, OnEnd = delegate(Motion m) { m.ResetValue(); キャップ処理2.Bod.キャップ2左.位置C = DataConsts.Vec2DZero; キャップ処理2.Bod.キャップ2右.位置C = DataConsts.Vec2DZero; キャップ処理2.Bod.キャップ1.位置C = DataConsts.Vec2DZero; } }; 調教UI.Mots.Add(キャップ振動.GetHashCode().ToString(), キャップ振動); } public void SetCha(Character Cha) { base.Cha = Cha; Bod = Cha.Body; } public new void Reset() { if (キャップ中着) { キャップ中 = false; Bod.Setキャップ1 = キャップ脱; if (キャップ.ContainsKey(Bod.キャップ1)) { キャップ.Remove(Bod.キャップ1); } キャップ中着 = false; } if (キャップ左着) { キャップ左 = false; Bod.Setキャップ2左 = キャップ脱; if (キャップ.ContainsKey(Bod.キャップ2左)) { キャップ.Remove(Bod.キャップ2左); } キャップ左着 = false; } if (キャップ右着) { キャップ右 = false; Bod.Setキャップ2右 = キャップ脱; if (キャップ.ContainsKey(Bod.キャップ2右)) { キャップ.Remove(Bod.キャップ2右); } キャップ右着 = false; } キャップ1.Show = true; キャップ1.DraShow = true; キャップ1.StaShow = true; キャップ1.描画Show = true; キャップ1.Element.Intensity = 0.5; キャップ1.使用状態 = UsageStatus.Standby; キャップ2.Show = true; キャップ2.DraShow = true; キャップ2.StaShow = true; キャップ2.描画Show = true; キャップ2.Element.Intensity = 0.5; キャップ2.使用状態 = UsageStatus.Standby; キャップ3.Show = true; キャップ3.DraShow = true; キャップ3.StaShow = true; キャップ3.描画Show = true; キャップ3.Element.Intensity = 0.5; キャップ3.使用状態 = UsageStatus.Standby; base.Reset(); CP中.Reset(); CP左.Reset(); CP右.Reset(); キャップ.Clear(); キャップ着 = default(キャップ情報); キャップ脱 = default(キャップ情報); キャップ中着 = false; キャップ左着 = false; キャップ右着 = false; ハンドf = false; キャップ振動?.End(); キャップ中_ = false; キャップ左_ = false; キャップ右_ = false; キャップ中 = false; キャップ左 = false; キャップ右 = false; キャップ着.SetDefault(); 調教UI.キャップ1.Intensity = 0.5; 調教UI.キャップ2.Intensity = 0.5; 調教UI.キャップ3.Intensity = 0.5; } } }