Ejemplo n.º 1
0
        public override void DoAfterDead(ObjectBase killer, ObjectDeadType deadType)
        {
            if ((DeadType & deadType) != deadType)
            {
                return;
            }

            if (SharkPower > 0)
            {
                Scene.EffectObjects.Add(new EffectShark(Scene.Sec(0.2F), SharkPower));
            }

            int explosionSize = (int)(RangeMultiple * (Owner.Layout.RectWidth + Owner.Layout.RectHeight) / 2) + RangeConstant;

            ObjectSmoke explosionObject = new ObjectSmoke(Owner.Layout.CenterX, Owner.Layout.CenterY, explosionSize, explosionSize, Scene.Sec(0.6F), 0.9F, 0, Color, MoveNull.Value);

            Owner.Container.Add(explosionObject);

            for (int i = 0; i < Owner.Container.Count; i++)
            {
                ObjectBase objectBase = Owner.Container[i];
                if (objectBase.Status != ObjectStatus.Alive || Function.IsFriendly(objectBase.League, CollisionLeague))
                {
                    continue;
                }

                // 特殊狀態判定 具碰撞 非鬼魂
                if ((objectBase.Propertys.Affix & SpecialStatus.Collision) != SpecialStatus.Collision ||
                    (objectBase.Propertys.Affix & SpecialStatus.Ghost) == SpecialStatus.Ghost)
                {
                    continue;
                }

                // 碰撞判定
                if (!Function.IsCollison(objectBase.Layout, explosionObject.Layout))
                {
                    continue;
                }

                // 檢查目標有無碰撞特性
                int colliderPower = -1;
                for (int j = 0; j < objectBase.Propertys.Count; j++)
                {
                    PropertyCollision checkCollision = objectBase.Propertys[j] as PropertyCollision;
                    if (checkCollision != null && checkCollision.Status == PropertyStatus.Enabled)
                    {
                        colliderPower = Math.Max(colliderPower, checkCollision.CollisionPower);
                    }
                }

                if (colliderPower < 0)
                {
                    continue;
                }
                if (colliderPower <= CollisionPower)
                {
                    objectBase.Kill(Owner, ObjectDeadType.Collision);
                }
            }

            base.DoAfterDead(killer, deadType);
        }
Ejemplo n.º 2
0
        public override void DoActionMoving()
        {
            if (Owner.Status == ObjectStatus.Alive && Status == PropertyStatus.Enabled)
            {
                for (int i = 0; i < Owner.Container.Count; i++)
                {
                    ObjectBase objectActive = Owner.Container[i];
                    if (objectActive.Status != ObjectStatus.Alive || Function.IsFriendly(objectActive.League, Owner.League))
                    {
                        continue;
                    }

                    // 限定目標
                    if (Target.TargetType == TargetType.GameObejct)
                    {
                        if (objectActive == Target.Object)
                        {
                            i = Owner.Container.Count;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    // 特殊狀態判定 具碰撞 非鬼魂
                    if ((objectActive.Propertys.Affix & SpecialStatus.Collision) != SpecialStatus.Collision ||
                        (objectActive.Propertys.Affix & SpecialStatus.Ghost) == SpecialStatus.Ghost)
                    {
                        continue;
                    }

                    // 碰撞判定
                    if (!Function.IsCollison(Owner.Layout, objectActive.Layout))
                    {
                        continue;
                    }

                    int colliderPower = -1;
                    for (int j = 0; j < objectActive.Propertys.Count; j++)
                    {
                        PropertyCollision checkCollision = objectActive.Propertys[j] as PropertyCollision;
                        if (checkCollision != null && checkCollision.Status == PropertyStatus.Enabled)
                        {
                            if (checkCollision.Target.TargetType != TargetType.GameObejct || checkCollision.Target.Object == Owner)
                            {
                                colliderPower = Math.Max(colliderPower, checkCollision.CollisionPower);
                            }
                        }
                    }

                    if (colliderPower < 0)
                    {
                        continue;
                    }
                    if (colliderPower >= CollisionPower)
                    {
                        Owner.Kill(objectActive, ObjectDeadType.Collision);
                    }

                    if (CollisionPower >= colliderPower)
                    {
                        objectActive.Kill(Owner, ObjectDeadType.Collision);
                    }
                }
            }
            base.DoActionMoving();
        }