public override void OnUpdate() { if (!DF.Window.IsFocused) { return; } Core.I._SetTick(Core.I.Tick + 1); if (DFKeyboard.G.IsKeyDown) { (Core.I.Entities.MainEntity as EntityPlayer)?.SetGod(); } ControlCamera(); RenderMap(); var entities = Core.I.Entities; entities.Draw(); entities.Update(); hud.Text = shadow.Text = GenerateHUD(); // プレイヤーの死亡処理 if (!handlingDying && !Core.I.IsFreezing && ((entities.MainEntity is EntityLiving liv && liv.IsDying) || entities.MainEntity.IsDead)) { CoroutineRunner.Start(HandleDying()); } // ゴールハンドリング if (!handlingGoal && !handlingDying && !Core.I.IsFreezing && Core.I.IsGoal) { CoroutineRunner.Start(HandleGoal()); } if ((eventRuntimeIterator == null) || !eventRuntimeIterator.MoveNext()) { eventRuntimeIterator = EventRuntime.Execute(); } if (EventRuntime.BalloonIsShowing && !Root.Contains(messageBox)) { Root.Add(messageBox); } if (!EventRuntime.BalloonIsShowing && Root.Contains(messageBox)) { Root.Remove(messageBox); } message.Text = EventRuntime.MesBuffer; messageBox.Location = new Vector( Const.Width / 2 - messageBox.Width / 2, EventRuntime.MesPos == EventRuntime.UpDown.Up ? 2 : Const.Height - messageBox.Height - 2 ); stage.Location = Core.I.Camera; }
/// <summary> /// Tick 毎に呼ばれる Entity の処理イベントです。 /// </summary> /// <param name="ks"></param> public override void OnUpdate() { foreach (EntityPlayer ep in Parent.FindEntitiesByType <EntityPlayer>()) { if (ep.IsDying) { continue; } // プレイヤーと自分の当たり判定があり、上キーが押されたとき、スクリプト実行 if ((_canExecuteScript = new Rectangle((int)ep.Location.X, (int)ep.Location.Y, ep.Size.Width, ep.Size.Height) .CheckCollision(new Rectangle((int)Location.X, (int)Location.Y, Size.Width, Size.Height))) && DFKeyboard.Up) { try { EventRuntime.AddScript(new EventScript(_myScript)); } catch (EventScript.EventScriptException ex) { EventRuntime.AddScript(new EventScript($@"[enstop] [mesbox:down] [mes:""エラー!\n{ex.Message.Replace(@"\", @"\\").Replace(@"""", @"\""")}""] [mesend] [enstart]")); } } } base.OnUpdate(); }
/// <summary> /// Tick 毎に呼ばれる Entity の処理イベントです。 /// </summary> /// <param name="ks"></param> public override void OnUpdate() { var ep = Parent.MainEntity; base.OnUpdate(); // プレイヤーと自分の当たり判定があったとき、スクリプト実行。 // ReSharper disable once AssignmentInConditionalExpression if (_triggered = new Rectangle((int)ep.Location.X, (int)ep.Location.Y, ep.Size.Width, ep.Size.Height) .CheckCollision(new Rectangle((int)Location.X, (int)Location.Y, Size.Width, Size.Height))) { // 実行済みなら実行しない if ((_option == ScriptRepeatingOption.NoRepeat) && _executed) { return; } if ((_option == ScriptRepeatingOption.RepeatWhenMainEntityLeaveAndReenter) && _bTriggered) { return; } EventRuntime.AddScript(new EventScript(_myScript)); _executed = true; } }
/// <summary> /// この EntityPlayer を殺害します。 /// </summary> public override void Kill() { if (IsDying) { return; } if (IsFall) { base.Kill(); Velocity = Vector.Zero; Life = 0; return; } if (MutekiTime > 0) { return; } if (Life < 1) { try { EventRuntime.AddScript(new EventScript(_endScript)); } catch (EventScript.EventScriptException ex) { EventRuntime.AddScript(new EventScript($@"[enstop] [mesbox:down] [mes:""エラー!\n{ex.Message.Replace(@"\", @"\\").Replace(@"""", @"\""")}""] [mesend] [enstart]")); } base.Kill(); return; } DESound.Play(Sounds.PowerDown); MutekiTime = 180; Life -= IsCrushed ? MaxLife / 3 : 1; }
public override void OnUpdate() { base.OnUpdate(); //FontUtility.DrawMiniString((int)Location.X - 9 + GameEngine.camera.X, (int)Location.Y + GameEngine.camera.Y, "" + AnimeSpeed, 0xffffff); if (!_isBattling) { // ReSharper disable once AssignmentInConditionalExpression if (_isBattling = Location.Distance(Parent.MainEntity.Location) < _startKyori) { try { EventRuntime.AddScript(new EventScript(_startScript)); } catch (EventScript.EventScriptException ex) { EventRuntime.AddScript(new EventScript($@"[enstop] [mesbox:down] [mes:""エラー!\n{ex.Message.Replace(@"\", @"\\").Replace(@"""", @"\""")}""] [mesend] [enstart]")); } } return; } switch (_nowBehavior) { case QueenBossBehaviorOption.Waiting1: if (Tick == 0) { Tick = 60; _nowBehavior = QueenBossBehaviorOption.ThrowWeaponToLeft; SetGraphic(16); } break; case QueenBossBehaviorOption.ThrowWeaponToLeft: if (Tick == 30) { DESound.Play(Sounds.ShootArrow); SetGraphic(17); Parent.Add( new EntityCircusBall(Location, Mpts, Map, Parent).SetEntityData( DynamicJson.Parse(DynamicJson.Serialize(new { SpeedX = -2.0f })))); } if (Tick == 0) { _nowBehavior = QueenBossBehaviorOption.MoveToLeft; SetAnime(0, 3, 8); Velocity.X = -1.6f; } break; case QueenBossBehaviorOption.MoveToLeft: if ((Location.X <= _left - 16) || (Location.X <= 0) || (CollisionLeft() == ColliderType.Land)) { Tick = 60; _nowBehavior = QueenBossBehaviorOption.Waiting2; SetGraphic(6); Velocity.X = 0; } break; case QueenBossBehaviorOption.Waiting2: if (Tick == 0) { Tick = 60; _nowBehavior = QueenBossBehaviorOption.ThrowWeaponToRight; SetGraphic(18); } break; case QueenBossBehaviorOption.ThrowWeaponToRight: if (Tick == 30) { DESound.Play(Sounds.ShootArrow); Parent.Add( new EntityCircusBall(Location, Mpts, Map, Parent).SetEntityData( DynamicJson.Parse(DynamicJson.Serialize(new { SpeedX = 2.0f })))); SetGraphic(19); } if (Tick == 0) { _nowBehavior = QueenBossBehaviorOption.MoveToRight; SetAnime(6, 9, 8); Velocity.X = 1.6f; } break; case QueenBossBehaviorOption.MoveToRight: if (((Location.X >= _firstLoc.X) && (Location.X >= Core.I.CurrentMap.Size.X - 1)) || (CollisionRight() == ColliderType.Land)) { Tick = 60; _nowBehavior = QueenBossBehaviorOption.Waiting1; SetGraphic(6); Velocity.X = 0; } break; } Tick--; if (MutekiTime <= 0) { return; } MutekiTime--; }
public override void OnUpdate() { base.OnUpdate(); //FontUtility.DrawMiniString((int)Location.X - 9 + GameEngine.camera.X, (int)Location.Y + GameEngine.camera.Y, "" + AnimeSpeed, 0xffffff); if (!_isBattling) { // ReSharper disable once AssignmentInConditionalExpression if (_isBattling = Location.Distance(Parent.MainEntity.Location) < _startKyori) { try { EventRuntime.AddScript(new EventScript(_startScript)); } catch (EventScript.EventScriptException ex) { EventRuntime.AddScript(new EventScript($@"[enstop] [mesbox:down] [mes:""エラー!\n{ex.Message.Replace(@"\", @"\\").Replace(@"""", @"\""")}""] [mesend] [enstart]")); } Velocity.X = -1.6f; InternalGravity = -0.04f; SetAnime(0, 3, 5); } return; } switch (_nowBehavior) { case KingBossBehaviorOption.JumpToLeft: if ((Location.Y <= _top) || (Location.Y <= 0) || (CollisionTop() == ColliderType.Land)) { Velocity.Y = InternalGravity = 0; Location.Y = _top; } if (Tick % 30 == 0) { DESound.Play(Sounds.ShootArrow); var r = Math.Atan2(Location.Y - Parent.MainEntity.Location.Y, Location.X - Parent.MainEntity.Location.X); float x = -(float)Math.Cos(r) * 3.4f, y = -(float)Math.Sin(r) * 3.4f; Parent.Add(new EntityPlayingCard(Location, Mpts, Map, Parent) { Velocity = new Vector(x, y) }); } if ((Location.X <= _left) || (Location.X <= 0) || (CollisionLeft() == ColliderType.Land)) { InternalGravity = 0.1f; _nowBehavior = KingBossBehaviorOption.Waiting1; Tick = -1; } break; case KingBossBehaviorOption.Waiting1: if ((Tick < 0) && (CollisionBottom() == ColliderType.Land)) { Tick = 120; } if (Tick == 100) { SetGraphic(0); } if (Tick == 80) { SetGraphic(6); } if (Tick == 0) { _nowBehavior = KingBossBehaviorOption.ThrowChocolateToRight; Tick = 120; Parent.Add(Core.I.EntityRegistry.CreateEntity("Bunyo", new Vector(Location.X, Location.Y - 16), Mpts, Map, Parent)); DESound.Play(Sounds.ItemSpawn); } break; case KingBossBehaviorOption.ThrowChocolateToRight: if (Tick <= 0) { _nowBehavior = KingBossBehaviorOption.JumpToRight; Velocity.X = 1.6f; InternalGravity = -0.04f; SetAnime(6, 9, 5); } break; case KingBossBehaviorOption.JumpToRight: if ((Location.Y <= _top) || (Location.Y <= 0) || (CollisionTop() == ColliderType.Land)) { Velocity.Y = InternalGravity = 0; } if (Tick % 30 == 0) { DESound.Play(Sounds.ShootArrow); var r = Math.Atan2(Location.Y - Parent.MainEntity.Location.Y, Location.X - Parent.MainEntity.Location.X); float x = -(float)Math.Cos(r) * 3.4f, y = -(float)Math.Sin(r) * 3.4f; Parent.Add(new EntityPlayingCard(Location, Mpts, Map, Parent) { Velocity = new Vector(x, y) }); } if (((Location.X >= _firstLoc.X) && (Location.X >= Core.I.CurrentMap.Size.X - 1)) || (CollisionRight() == ColliderType.Land)) { InternalGravity = 0.1f; Velocity.X = 0; _nowBehavior = KingBossBehaviorOption.Waiting2; Tick = -1; } break; case KingBossBehaviorOption.Waiting2: if ((Tick < 0) && (CollisionBottom() == ColliderType.Land)) { Tick = 120; } if (Tick == 100) { SetGraphic(6); } if (Tick == 80) { SetGraphic(0); } if (Tick == 0) { _nowBehavior = KingBossBehaviorOption.ThrowChocolateToLeft; Parent.Add(Core.I.EntityRegistry.CreateEntity("SoulChocolate", new Vector(Location.X, Location.Y - 16), Mpts, Map, Parent)); Tick = 120; DESound.Play(Sounds.ItemSpawn); } break; case KingBossBehaviorOption.ThrowChocolateToLeft: if (Tick <= 0) { _nowBehavior = KingBossBehaviorOption.JumpToLeft; Velocity.X = -1.6f; InternalGravity = -0.04f; SetAnime(0, 3, 5); } break; } Tick--; if (MutekiTime <= 0) { return; } MutekiTime--; }