Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
        /// <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();
        }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
        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();
        }