示例#1
0
    void SetMainBodyAttack(MZMode mode)
    {
        MZControlUpdate<MZPartControl> partControlUpdate = mode.AddPartControlUpdater();
        MZPartControl partControl = new MZPartControl( partsByNameDictionary[ "MainBody" ] );
        partControlUpdate.Add( partControl );

        MZAttack_Idle show = partControl.AddAttack<MZAttack_Idle>();
        show.duration = 1.0f;
        show.isRunOnce = true;

        MZAttack_OddWay nWay = partControl.AddAttack<MZAttack_OddWay>();
        nWay.bulletName = "EBBee";
        nWay.numberOfWays = 7;
        nWay.colddown = 0.25f;
        nWay.intervalDegrees = 10;
        nWay.initVelocity = 400;
        nWay.duration = 1.0f;
        nWay.additionalWaysPerLaunch = -2;
        nWay.targetHelp = new MZTargetHelp_Target();
        nWay.targetHelp.calcuteEveryTime = false;

        nWay.offsetPositionsList.Add( new Vector2( 0, 0 ) );
        for( int i = 0; i < nWay.numberOfWays; i++ )
        {
            nWay.offsetPositionsList.Add( new Vector2( -40*i, 0 ) );
            nWay.offsetPositionsList.Add( new Vector2( 40*i, 0 ) );
        }

        MZAttack_Idle cd = partControl.AddAttack<MZAttack_Idle>();
        cd.duration = 4.0f;
    }
示例#2
0
    void SetSubCannonAttack(string cannonName, MZMode mode)
    {
        MZControlUpdate<MZPartControl> partControlUpdate = mode.AddPartControlUpdater();
        MZPartControl partControl = new MZPartControl( partsByNameDictionary[ cannonName ] );
        partControlUpdate.Add( partControl );

        MZAttack_Idle show = partControl.AddAttack<MZAttack_Idle>();
        show.duration = 1.0f;
        show.isRunOnce = true;

        MZAttack_Idle wait1 = partControl.AddAttack<MZAttack_Idle>();
        wait1.duration = 2.0f;

        MZAttack_OddWay attack = partControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 1;
        attack.bulletName = "EBDonuts";
        attack.initVelocity = 250;
        attack.targetHelp = new MZTargetHelp_Target();
        attack.targetHelp.calcuteEveryTime = true;
        attack.colddown = 0.05f;
        attack.additionalVelocity = 50;
        attack.duration = 0.5f;

        MZAttack_Idle wait2 = partControl.AddAttack<MZAttack_Idle>();
        wait2.duration = 2.5f;
    }
    protected override void NewEnemyBeforeEnable(MZEnemy enemy)
    {
        enemy.healthPoint = 4;

        MZMode mode = enemy.AddMode( "mode" );

        MZMove_TurnTo move = mode.AddMove<MZMove_TurnTo>( "GoTurn" );
        move.direction = ( positionType == PositionType.Left )? 0 : 180;
        move.velocity = 200;
        move.totalTime = 4;

        move.rotationType = ( positionType == PositionType.Left )? MZMove.RotationType.CW : MZMove.RotationType.CCW;
        move.destinationDegrees = ( positionType == PositionType.Left )? -45 : -135;

        MZPartControl partControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( partControl );

        MZAttack_OddWay attack = partControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 3;
        attack.colddown = 10;
        attack.duration = -1;
        attack.intervalDegrees = 15;
        attack.initVelocity = 500;
        attack.bulletName = "EBDonuts";
        attack.targetHelp = new MZTargetHelp_Target();
        attack.isRunOnce = true;
    }
示例#4
0
    void AddOddWayAttack(MZCharacterPart part, MZMode mode)
    {
        MZPartControl partControl = new MZPartControl( part );
        MZControlUpdate<MZPartControl> partControlUpdate = mode.AddPartControlUpdater();
        partControlUpdate.Add( partControl );

        MZAttack_OddWay attack = partControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 1;
        attack.colddown = 0.3f;
        attack.duration = 0.1f;
        attack.initVelocity = 500;
        attack.bulletName = "EBDonuts";
        attack.targetHelp = new MZTargetHelp_Target();

        MZAttack_Idle idle = partControl.AddAttack<MZAttack_Idle>();
        idle.duration = 3;
    }
示例#5
0
    void SetMainAttack(string partName, MZMode mode)
    {
        MZControlUpdate<MZPartControl> partControlUpdate = mode.AddPartControlUpdater();
        MZPartControl partControl = new MZPartControl( partsByNameDictionary[ partName ] );
        partControlUpdate.Add( partControl );

        MZAttack_Idle show = partControl.AddAttack<MZAttack_Idle>();
        show.duration = 1.0f;
        show.isRunOnce = true;

        MZAttack_OddWay nWay = partControl.AddAttack<MZAttack_OddWay>();
        nWay.bulletName = "EBBee";
        nWay.numberOfWays = 7;
        nWay.colddown = 0.25f;
        nWay.intervalDegrees = 10;
        nWay.initVelocity = 400;
        nWay.duration = 1.0f;
        nWay.additionalWaysPerLaunch = -2;
        nWay.targetHelp = new MZTargetHelp_Target();

        MZAttack_Idle cd = partControl.AddAttack<MZAttack_Idle>();
        cd.duration = 4.0f;
    }
    protected override void NewEnemyBeforeEnable(MZEnemy enemy)
    {
        enemy.healthPoint = 4;

        MZMode mode = enemy.AddMode( "mode" );

        MZMove_ToTarget move = mode.AddMove<MZMove_ToTarget>( "GoDie" );
        move.velocity = 200;
        move.target.calcuteEveryTime = true;

        MZPartControl partControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( partControl );

        MZAttack_OddWay attack = partControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 3;
        attack.colddown = 10;
        attack.duration = -1;
        attack.intervalDegrees = 15;
        attack.initVelocity = 500;
        attack.bulletName = "EBDonuts";
        attack.targetHelp = new MZTargetHelp_Target();
        attack.isRunOnce = true;
    }
    void SetMainEnemy(MZEnemy enemy)
    {
        enemy.healthPoint = 30;

        MZMode mode = enemy.AddMode( "m" );

        AddCommonMove( mode, "common1" ).duration = _showTime;
        mode.AddMove<MZMove_Idle>( "idle" ).duration = _splitTime;
        AddCommonMove( mode, "common2" );

        MZPartControl partControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( partControl );

        partControl.AddAttack<MZAttack_Idle>().duration = _showTime;// _showTime + 0.5f; //

        MZAttack_OddWay splitOdd = partControl.AddAttack<MZAttack_OddWay>();
        splitOdd.bulletName = "EBDonutsLarge";
        splitOdd.numberOfWays = 18;
        splitOdd.initVelocity = 500;
        splitOdd.colddown = 0.1f;
        splitOdd.duration = 0.1f;
        splitOdd.intervalDegrees = 360/splitOdd.numberOfWays;
        splitOdd.isRunOnce = true;

        partControl.AddAttack<MZAttack_Idle>().duration = 0.5f;

        MZAttack_OddWay odd = partControl.AddAttack<MZAttack_OddWay>();
        odd.bulletName = "EBDonuts";
        odd.numberOfWays = 16;
        odd.initVelocity = 300;
        odd.colddown = 0.25f;
        odd.duration = 1;
        odd.additionalVelocity = 50;
        odd.intervalDegrees = 360/odd.numberOfWays;
        odd.targetHelp = new MZTargetHelp_AssignDirection();
        ( odd.targetHelp as MZTargetHelp_AssignDirection ).direction = 45;
    }
    void SetSubEnemy(MZEnemy enemy)
    {
        enemy.healthPoint = 8;

        MZMode mode = enemy.AddMode( "m" );

        AddCommonMove( mode, "common1" ).duration = _showTime;
        AddSplitMoveToSubEmemy( mode );
        AddCommonMove( mode, "common2" );

        MZPartControl partControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( partControl );

        partControl.AddAttack<MZAttack_Idle>().duration = _showTime + 0.8f;

        MZAttack_OddWay odd = partControl.AddAttack<MZAttack_OddWay>();
        odd.bulletName = "EBBee";
        odd.colddown = 1.0f;
        odd.duration = 1.0f;
        odd.initVelocity = 400;
        odd.numberOfWays = 1;
        odd.targetHelp = new MZTargetHelp_Target();
    }
    protected override void NewEnemyBeforeEnable(MZEnemy enemy)
    {
        enemy.healthPoint = 10;
        enemy.enableRemoveTime = 12;

        MZMode mode = enemy.AddMode( "mode" );

        switch( _constructCode )
        {
            case 0:
                SetType1Move( mode, enemy );
                break;

            case 1:
                SetType2Move( mode, enemy );
                break;

            case 2:
                SetType3Move( mode, enemy );
                break;

            default:
                MZDebug.AssertFalse( "not supprt code=" + _constructCode.ToString() );
                break;
        }

        // main attack
        MZPartControl mainPartControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( mainPartControl );
        mainPartControl.getFaceTo = new MZPartControl.GetFaceTo( testFaceTo );

        MZAttack_Idle attackIdle = mainPartControl.AddAttack<MZAttack_Idle>();
        attackIdle.duration = 0.8f;
        attackIdle.isRunOnce = true;

        MZAttack_OddWay attack = mainPartControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 1;
        attack.initVelocity = 200;
        attack.additionalVelocity = 50;
        attack.bulletName = "EBBee2";
        attack.colddown = 0.05f;
        attack.duration = 0.15f;
        attack.targetHelp = new MZTargetHelp_AssignPosition();
        ( attack.targetHelp as MZTargetHelp_AssignPosition ).assignPosition = Vector2.zero;

        MZAttack_Idle attackIdle2 = mainPartControl.AddAttack<MZAttack_Idle>();
        attackIdle2.duration = 1.8f;
    }
    void AddMultiVortex(MZPartControl partControl, float degrees)
    {
        MZAttack_Idle show = partControl.AddAttack<MZAttack_Idle>();
        show.duration = _showTime;
        show.isRunOnce = true;

        float oneLoopTime = 3.0f;

        float intervalDegrees = 4.0f*( ( _innerPositionType == MZFormation.PositionType.Right )? -1 : 1 );

        MZAttack_Vortex vortex = partControl.AddAttack<MZAttack_Vortex>();
        vortex.bulletName = "EBBee";
        vortex.colddown = 0.2f;
        vortex.initVelocity = 300;
        vortex.intervalDegrees = intervalDegrees;
        //		vortex.timePerWave = 0.66f;
        //		vortex.resetTime = 0.33f;
        vortex.duration = oneLoopTime;
        vortex.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( vortex.targetHelp as MZTargetHelp_AssignDirection ).direction = degrees;

        partControl.AddAttack<MZAttack_Idle>().duration = 0.33f;

        MZAttack_Vortex vortex2 = partControl.AddAttack<MZAttack_Vortex>();
        vortex2.bulletName = "EBBee";
        vortex2.colddown = 0.2f;
        vortex2.initVelocity = 300;
        vortex2.intervalDegrees = -intervalDegrees;
        vortex2.duration = oneLoopTime;
        vortex2.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( vortex2.targetHelp as MZTargetHelp_AssignDirection ).direction = degrees;

        partControl.AddAttack<MZAttack_Idle>().duration = 0.33f;
    }
    void SetTwinWay(MZPartControl partControl, Vector2 position, bool isLeft)
    {
        MZAttack_OddWay twin = partControl.AddAttack<MZAttack_OddWay>();
        twin.initVelocity = 450;
        twin.numberOfWays = ( rank <= 4 )? 1 : ( rank >= 8 )? 3 : 2;

        if( rank >= 5 )
        {
            float interval = ( rank >= 8 )? 20 : 10;
            twin.offsetPositionsList.Add( position + new Vector2( interval*( ( isLeft )? -1 : 1 ), 0 ) );
            twin.offsetPositionsList.Add( position + new Vector2( interval*( ( isLeft )? 1 : -1 ), -20 ) );
        }

        if( rank >= 8 || rank <= 4 )
        {
            twin.offsetPositionsList.Add( position + new Vector2( 0, -10 ) );
        }

        twin.colddown = 0.2f;
        twin.duration = 1.0f - ( ( rank <= 4 )? 0.5f : 0 );
        twin.bulletName = "EBBee";
        twin.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( twin.targetHelp as MZTargetHelp_AssignDirection ).direction = 270;

        partControl.AddAttack<MZAttack_Idle>().duration = 3.0f;
    }
    void AddRocketMode(MZEnemy enemy)
    {
        MZMode mode = enemy.AddMode( "rocket" );

        MZMove_ToTarget move = mode.AddMove<MZMove_ToTarget>( "move" );
        move.velocity = 600;
        move.target.calcuteEveryTime = false;

        MZPartControl mainPartControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( mainPartControl );

        MZAttack_OddWay attack = mainPartControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 1;
        attack.initVelocity = 300;
        attack.additionalVelocity = 50;
        attack.bulletName = "EBDonuts";
        attack.colddown = 0.05f;
        attack.duration = 0.3f;
        attack.targetHelp = new MZTargetHelp_Target();
        attack.targetHelp.calcuteEveryTime = false;

        mainPartControl.AddAttack<MZAttack_Idle>().duration = -1;
    }
    void AddCrossWayAttack(MZCharacterPart part, MZMode mode, float degree, int way)
    {
        MZPartControl partControl = new MZPartControl( part );
        mode.AddPartControlUpdater().Add( partControl );

        float rankIdle = ( ( rank < 3 )? 0.5f : 0 );

        MZAttack_OddWay odd = partControl.AddAttack<MZAttack_OddWay>();
        odd.numberOfWays = way;
        odd.colddown = 0.1f;
        odd.duration = 1.0f - rankIdle + ( ( rank >= 7 )? -0.6f : 0 );
        odd.bulletName = "EBDonuts";
        odd.initVelocity = 300;
        odd.additionalVelocity = 80;
        odd.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( odd.targetHelp as MZTargetHelp_AssignDirection ).direction = degree;
        float interval = 50;
        odd.offsetPositionsList.Add( new Vector2( 0, -interval ) );
        odd.offsetPositionsList.Add( new Vector2( -interval, 0 ) );
        odd.offsetPositionsList.Add( new Vector2( interval, 0 ) );

        MZAttack_Idle idle = partControl.AddAttack<MZAttack_Idle>();
        idle.duration = 0.6f + rankIdle;
    }
    protected override void NewEnemyBeforeEnable(MZEnemy enemy)
    {
        MZMode mode = enemy.AddMode( "m" );

        MZMove_LinearTo move = mode.AddMove<MZMove_LinearTo>( "m" );
        move.destinationPosition = _currentNewEnemyDestPos;
        move.totalTime = 0.3f;
        move.duration = 1.0f;

        mode.AddMove<MZMove_Idle>( "idle" ).duration = 3;

        MZMove_LinearBy leave = mode.AddMove<MZMove_LinearBy>( "leave" );
        leave.direction = 270;
        leave.velocity = 200;

        MZPartControl mainPartControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( mainPartControl );

        MZAttack_Idle attackShow = mainPartControl.AddAttack<MZAttack_Idle>();
        attackShow.duration = 0.5f;
        attackShow.isRunOnce = true;

        MZAttack_EvenWay attackEven = mainPartControl.AddAttack<MZAttack_EvenWay>();
        attackEven.numberOfWays = 4;
        attackEven.colddown = 0.2f;
        attackEven.duration = 0.6f;
        attackEven.intervalDegrees = 45;
        attackEven.initVelocity = 300;// + 25*currentCreatedMemberCount;
        //		attackEven.additionalVelocity = 50;
        attackEven.bulletName = "EBBee";
        attackEven.targetHelp = new MZTargetHelp_Target();

        MZAttack_Idle attackIdleInterval = mainPartControl.AddAttack<MZAttack_Idle>();
        attackIdleInterval.duration = 0.3f;

        MZAttack_OddWay attackOdd = mainPartControl.AddAttack<MZAttack_OddWay>();
        attackOdd.numberOfWays = 1;
        attackOdd.colddown = 0.2f;
        attackOdd.duration = 0.6f;
        attackOdd.intervalDegrees = 5;
        attackOdd.initVelocity = 600;// + 25*currentCreatedMemberCount;
        attackOdd.bulletName = "EBBee2";
        attackOdd.targetHelp = new MZTargetHelp_Target();
        //		attackOdd.additionalVelocity = 50;

        MZAttack_Idle attackIdle = mainPartControl.AddAttack<MZAttack_Idle>();
        attackIdle.duration = 3.0f;
    }
示例#15
0
    protected override void NewEnemyBeforeEnable(MZEnemy enemy)
    {
        enemy.healthPoint = 1/*1*rank*/;
        MZMove.RotationType rotType = rotationType;

        enemy.partsByNameDictionary[ "MainBody" ].faceTo = new MZFaceTo_MovingDirection();

        if( _constructCode == 1 )
        {
            if( positionType == MZFormation.PositionType.Mid )
            {
                enemy.position += new Vector2( 50*( ( currentEnemyCreatedCount%2 == 0 )? 1 : -1 ), 0 );
            }
            else
            {
                enemy.position += ( ( currentEnemyCreatedCount%2 == 0 )? new Vector2( 0, 100 ) : Vector2.zero );
            }
        }

        if( positionType == MZFormation.PositionType.Mid )
        {
            rotType = ( currentEnemyCreatedCount%2 == 0 )? MZMove.RotationType.CCW : MZMove.RotationType.CW;
        }

        MZMode mode = enemy.AddMode( "mode" );

        // move
        float velocity = 400;

        MZMove_LinearBy moveLinear1 = mode.AddMove<MZMove_LinearBy>( "l1" );
        moveLinear1.direction = ( positionType == MZFormation.PositionType.Mid )? 270 : GetStartDirection( rotType );
        moveLinear1.velocity = velocity;
        moveLinear1.duration = 0.8f;

        MZMove_TurnTo moveTurn = mode.AddMove<MZMove_TurnTo>( "t" );
        moveTurn.rotationType = rotType;
        moveTurn.direction = moveLinear1.direction;
        moveTurn.destinationDegrees = GetDestinationDirection( rotType );
        moveTurn.totalTime = 0.5f;
        moveTurn.duration = 100;
        moveTurn.velocity = velocity;

        // main attack
        MZPartControl mainPartControl = new MZPartControl( enemy.partsByNameDictionary[ "MainBody" ] );
        mode.AddPartControlUpdater().Add( mainPartControl );

        MZAttack_OddWay attack = mainPartControl.AddAttack<MZAttack_OddWay>();
        attack.numberOfWays = 1;
        attack.initVelocity = 300;
        attack.additionalVelocity = 150;
        attack.bulletName = "EBDonuts";
        attack.colddown = 0.1f;
        attack.duration = 0.3f;
        attack.targetHelp = new MZTargetHelp_Target();

        MZAttack_Idle attackIdle = mainPartControl.AddAttack<MZAttack_Idle>();
        attackIdle.duration = 3;
    }
    void SetTwinWayAttack(MZPartControl partControl, float degree)
    {
        float rankDurationMulitiply = 0.2f*rank;

        float colddown = 0.15f;
        float duration = ( 0.3f + ( ( _attackCode == 0 )? 0.6f : 0.3f ) )*rankDurationMulitiply;

        MZAttack_OddWay oddWay = partControl.AddAttack<MZAttack_OddWay>();
        oddWay.colddown = colddown;
        oddWay.duration = duration;
        oddWay.numberOfWays = 2;
        oddWay.offsetPositionsList.Add( MZMath.UnitVectorFromDegrees( degree + 90 )*10 );
        oddWay.offsetPositionsList.Add( MZMath.UnitVectorFromDegrees( degree + 90 )*-10 );
        oddWay.targetHelp = new MZTargetHelp_AssignDirection();
        oddWay.bulletName = "EBBee";
        oddWay.initVelocity = 350;
        ( (MZTargetHelp_AssignDirection)oddWay.targetHelp ).direction = degree;

        MZAttack_Idle idle1 = partControl.AddAttack<MZAttack_Idle>();
        idle1.duration = 1.5f;

        MZAttack_OddWay oddWay2 = partControl.AddAttack<MZAttack_OddWay>();
        oddWay2.colddown = colddown;
        oddWay2.duration = duration;
        oddWay2.numberOfWays = 2;
        oddWay2.offsetPositionsList.Add( MZMath.UnitVectorFromDegrees( degree + 90 + 45 )*10 );
        oddWay2.offsetPositionsList.Add( MZMath.UnitVectorFromDegrees( degree + 90 + 45 )*-10 );
        oddWay2.targetHelp = new MZTargetHelp_AssignDirection();
        oddWay2.bulletName = "EBBee";
        oddWay2.initVelocity = 350;
        ( (MZTargetHelp_AssignDirection)oddWay2.targetHelp ).direction = degree + 45;

        MZAttack_Idle idle2 = partControl.AddAttack<MZAttack_Idle>();
        idle2.duration = 1.5f;
    }
    void AddRingAttack(MZPartControl partControl)
    {
        int ways = 15;
        float velocity = 300;
        float intervalDegrees = 360.0f/ways;

        MZAttack_Idle show = partControl.AddAttack<MZAttack_Idle>();
        show.duration = _showTime;
        show.isRunOnce = true;

        partControl.AddAttack<MZAttack_Idle>().duration = 2.0f;

        MZAttack_OddWay outRing = partControl.AddAttack<MZAttack_OddWay>();
        outRing.numberOfWays = ways;
        outRing.intervalDegrees = intervalDegrees;
        outRing.initVelocity = velocity;
        outRing.bulletName = "EBDonutsLarge";
        outRing.colddown = 10.0f;
        outRing.duration = 0.15f;
        outRing.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( outRing.targetHelp as MZTargetHelp_AssignDirection ).direction = 270;

        if( rank < 2 )
            return;

        MZAttack_OddWay innerRing = partControl.AddAttack<MZAttack_OddWay>();
        innerRing.numberOfWays = ways*2;
        innerRing.intervalDegrees = intervalDegrees/2.0f;
        innerRing.initVelocity = velocity;
        innerRing.bulletName = "EBDonuts";
        innerRing.colddown = 10.0f;
        innerRing.duration = 0.15f;
        innerRing.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( innerRing.targetHelp as MZTargetHelp_AssignDirection ).direction = 270 + intervalDegrees/4.0f;

        if( rank < 4 )
            return;

        MZAttack_OddWay thirdRing = partControl.AddAttack<MZAttack_OddWay>();
        thirdRing.numberOfWays = ways;
        thirdRing.intervalDegrees = intervalDegrees;
        thirdRing.initVelocity = velocity;
        thirdRing.bulletName = "EBDonutsSmall";
        thirdRing.colddown = 10.0f;
        thirdRing.duration = 0.15f;
        thirdRing.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( thirdRing.targetHelp as MZTargetHelp_AssignDirection ).direction = 270 + intervalDegrees/2.0f;

        if( rank < 7 )
            return;

        MZAttack_OddWay exInnerRing = partControl.AddAttack<MZAttack_OddWay>();
        exInnerRing.numberOfWays = ways*2;
        exInnerRing.intervalDegrees = intervalDegrees/2.0f;
        exInnerRing.initVelocity = velocity;
        exInnerRing.bulletName = "EBDonuts";
        exInnerRing.colddown = 10.0f;
        exInnerRing.duration = 0.15f;
        exInnerRing.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( exInnerRing.targetHelp as MZTargetHelp_AssignDirection ).direction = 270 + intervalDegrees/4.0f;

        if( rank < 8 )
            return;

        MZAttack_OddWay exOutRing = partControl.AddAttack<MZAttack_OddWay>();
        exOutRing.numberOfWays = ways;
        exOutRing.intervalDegrees = intervalDegrees;
        exOutRing.initVelocity = velocity;
        exOutRing.bulletName = "EBDonutsLarge";
        exOutRing.colddown = 10.0f;
        exOutRing.duration = 0.15f;
        exOutRing.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( exOutRing.targetHelp as MZTargetHelp_AssignDirection ).direction = 270;
    }
    void SetFanWay(MZPartControl partControl, Vector2 position, float idleTime)
    {
        partControl.AddAttack<MZAttack_Idle>().duration = idleTime;

        MZAttack_EvenWay even = partControl.AddAttack<MZAttack_EvenWay>();
        even.numberOfWays = 6;
        even.intervalDegrees = 12;
        even.initVelocity = 400;
        even.offsetPositionsList.Add( position );
        even.colddown = 100.0f;
        even.duration = 0.1f;
        even.bulletName = "EBDonuts";
        even.targetHelp = MZTargetHelp.Create<MZTargetHelp_AssignDirection>();
        ( even.targetHelp as MZTargetHelp_AssignDirection ).direction = 270;

        partControl.AddAttack<MZAttack_Idle>().duration = -1;
    }