/// <summary> /// 技能生效 /// </summary> public override void DoBeforeAction() { switch (Status) { case SkillStatus.Enabled: { if (Owner == null) { Break(); return; } Owner.Skills.AllBreak(); _OwnerSpeed = Owner.MoveObject.Speed; Owner.MoveObject.Speed = 0; Status = SkillStatus.Channeled; _MiniBar = new PropertyUI(-1, new Size(30, 6), new DrawUICounterBar(Color.FromArgb(80, 210, 140), Color.Black, Color.White, 1, true, Channeled)); Owner.Propertys.Add(_MiniBar); } break; case SkillStatus.Channeled: int getEnergy = (int)(GetEnergyPerSec / Scene.SceneRoundPerSec + 0.5F); Owner.Energy.Value += getEnergy; if (Animation.IsFull) { MoveStraight moveZZZ = new MoveStraight(null, 1, 150, 3, 100, 1F); DrawCustom drawZZZ = new DrawCustom(); drawZZZ.Colors.SetColor("Main", Color.DarkGreen); drawZZZ.AfterDraw += (x, g, r) => { Pen pen = drawZZZ.Colors.GetPen("Main"); Point[] drawPots = { new Point(r.Left, r.Top), new Point(r.Left + r.Width, r.Top), new Point(r.Left, r.Top + r.Height), new Point(r.Left + r.Width, r.Top + r.Height) }; g.DrawLines(pen, drawPots); }; ObjectSmoke objectZZZ = new ObjectSmoke(Owner.Layout.CenterX, Owner.Layout.CenterY, 4, 4, Scene.Sec(1), 3F, 0, drawZZZ, moveZZZ); moveZZZ.Target.SetOffsetByAngle(315 + Global.Rand.Next(-20, 20), 50); moveZZZ.Target.SetObject(objectZZZ); Owner.Container.Add(objectZZZ); Animation.Value = 0; } Animation.Value += Scene.SceneIntervalOfRound; break; } base.DoBeforeAction(); }
/// <summary> /// 技能生效 /// </summary> public override void DoBeforeAction() { switch (Status) { case SkillStatus.Enabled: { _SceneSlow = Scene.SceneSlow * SlowRate; Scene.SceneSlow += _SceneSlow; _MiniBar = new PropertyUI(-1, new Size(30, 6), new DrawUICounterBar(GlobalColors.EnergyBar, Color.Black, Color.White, 1, false, Owner.Energy)); Owner.Propertys.Add(_MiniBar); Status = SkillStatus.Channeled; } break; } base.DoBeforeAction(); }
/// <summary> /// 技能生效 /// </summary> public override void DoBeforeAction() { switch (Status) { case SkillStatus.Enabled: { if (Owner == null) { Break(); return; } int effectWidth = Owner.Layout.RectWidth + 12; int effectHeight = Owner.Layout.RectHeight + 12; effectWidth += effectWidth % 2; effectHeight += effectHeight % 2; Color color = Owner.DrawObject.MainColor; Color colorBack = Color.FromArgb(50, color); DrawPolygon drawShield = new DrawPolygon(colorBack, color, 6, 1, 0) { RotateEnabled = true }; DrawPolygon drawScrap = new DrawPolygon(Color.Empty, color, 2, 1, 0) { RotateEnabled = true }; _ShieldObject = new ObjectActive(0, 0, effectWidth, effectHeight, -1, Owner.League, ShapeType.Ellipse, drawShield, MoveNull.Value); _ShieldObject.Propertys.Add(new PropertyRotate(-1, Global.Rand.Next(-360, 360), false, true)); _ShieldObject.Propertys.Add(new PropertyDeadBroken(drawScrap, 6, 10, 10, ObjectDeadType.Collision, 360, 100, 150, Scene.Sec(0.4F), Scene.Sec(0.6F))); _ShieldObject.Propertys.Add(new PropertyDeadCollapse(drawScrap, 3, Scene.Sec(0.2F), Scene.Sec(0.05F), 10, 10, ObjectDeadType.LifeEnd, 100, 200, Scene.Sec(0.2F), Scene.Sec(0.3F))); _ShieldObject.Propertys.Add(new PropertyCollision(1)); _ShieldObject.Layout.Depend.SetObject(Owner); Owner.Container.Add(_ShieldObject); _MiniBar = new PropertyUI(-1, new Size(30, 6), new DrawUICounterBar(_BarColor, Color.Black, Color.White, 1, true, Channeled)); _MiniBar.Affix = SpecialStatus.Ghost; // 增加幽靈屬性 Owner.Propertys.Add(_MiniBar); Status = SkillStatus.Channeled; } break; case SkillStatus.Channeled: if (_ShieldObject.Status != ObjectStatus.Alive) { if (_ShieldObject.Life.Value < Scene.Sec(0.3F)) { SceneGaming scene = Scene as SceneGaming; if (scene != null) { scene.AddScoreToPlayer("千鈞一髮", 800); } } this.Break(); } break; } base.DoBeforeAction(); }
public override void DoBeforeActionMove() { switch (Status) { case SkillStatus.Enabled: { if (Owner == null) { Break(); return; } Status = SkillStatus.Channeled; _MiniBar = new PropertyUI(-1, new Size(30, 6), new DrawUICounterBar(Color.FromArgb(160, 210, 100), Color.Black, Color.White, 1, true, Channeled)); Owner.Propertys.Add(_MiniBar); PushSycle.Value = Scene.SceneIntervalOfRound; break; } case SkillStatus.Channeled: if (PushSycle.IsFull) { LayoutSet checkRange = new LayoutSet() { CollisonShape = ShapeType.Ellipse, Anchor = DirectionType.Center, X = Owner.Layout.X, Y = Owner.Layout.Y, Width = Range, Height = Range }; int hitCount = 0; for (int i = 0; i < Owner.Container.Count; i++) { ObjectBase objectActive = Owner.Container[i]; if (objectActive == Owner) { continue; } // 範圍判定 if (!Function.IsCollison(objectActive.Layout, checkRange)) { continue; } double angle = Function.GetAngle(checkRange.CenterX, checkRange.CenterY, objectActive.Layout.CenterX, objectActive.Layout.CenterY); double pushPower = PushPower * Function.GetDistance(checkRange.CenterX, checkRange.CenterY, objectActive.Layout.CenterX, objectActive.Layout.CenterY) / Range; objectActive.MoveObject.AddToNextOffset(objectActive.MoveObject.GetOffsetByAngle(angle, PushPower)); hitCount++; } if (hitCount > 0) { if (hitCount > 4) { hitCount = 4; } SceneGaming scene = Scene as SceneGaming; if (scene != null) { scene.AddScoreToPlayer("震盪衝擊", hitCount * 15); } } Color waveColor = Color.FromArgb(150, Owner.DrawObject.MainColor); ObjectWave wave = new ObjectWave(0, 0, 0, 0, Range, Range, Scene.Sec(0.15F), Scene.Sec(0.1F), new DrawPen(waveColor, ShapeType.Ellipse, 1), MoveNull.Value); wave.Layout.Depend.SetObject(Owner); wave.DiffusionOpacity = 0.1F; wave.FadeOpacity = 0.5F; Owner.Container.Add(wave); PushSycle.Value = 0; } else { PushSycle.Value += Scene.SceneIntervalOfRound; } break; } base.DoBeforeActionMove(); }