BulletMLライブラリ内部で使用する弾を表す。 IBulletMLBulletInterfaceを継承したクラスに、変数として一つ持たせておくこと。
Example #1
0
        public virtual BLRunStatus Run(BulletMLBullet bullet)
        {
            End = true;

            foreach (var task in TaskList)
            {
                if (!task.End)
                {
                    BLRunStatus sts = task.Run(bullet);
                    if (sts == BLRunStatus.Stop)
                    {
                        End = false;
                        return(BLRunStatus.Stop);
                    }
                    else if (sts == BLRunStatus.Continue)
                    {
                        End = false;
                    }
                }
            }

            if (End)
            {
                return(BLRunStatus.End);
            }

            return(BLRunStatus.Continue); // 継続して実行
        }
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (first)
            {
                first = false;
                if (node.GetChild(BLName.Speed).type == BLType.Sequence)
                {
                    changeSpeed = node.GetChildValue(BLName.Speed, this);
                }
                else if (node.GetChild(BLName.Speed).type == BLType.Relative)
                {
                    changeSpeed = node.GetChildValue(BLName.Speed, this) / term;
                }
                else
                {
                    changeSpeed = (node.GetChildValue(BLName.Speed, this) - bullet.Speed) / term;
                }
            }

            term--;

            bullet.Speed += changeSpeed;

            // if (bullet.index == DISP_BULLET_INDEX)  Debug.WriteLine(String.Format("ChangeSpeed:{0} (type:{1} val:{2})", bullet.Speed, node.GetChild(BLName.Speed).type, node.GetChildValue(BLName.Speed, this)));

            if (term <= 0)
            {
                end = true;
                return(BLRunStatus.End);
            }
            else
            {
                return(BLRunStatus.Continue);
            }
        }
Example #3
0
 public override BLRunStatus Run(BulletMLBullet bullet)
 {
     bullet.Vanish();
     end = true;
     //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine("Vanish");
     return(BLRunStatus.End);
 }
Example #4
0
        public virtual BLRunStatus Run(BulletMLBullet bullet)
        {
            end = true;
            for (int i = 0; i < taskList.Count; i++)
            {
                if (!taskList[i].end)
                {
                    BLRunStatus sts = taskList[i].Run(bullet);
                    if (sts == BLRunStatus.Stop)
                    {
                        end = false;
                        return(BLRunStatus.Stop);
                    }
                    else if (sts == BLRunStatus.Continue)
                    {
                        end = false;
                    }
                }
            }

            if (end)
            {
                return(BLRunStatus.End);
            }
            else
            {
                return(BLRunStatus.Continue);               //継続して実行
            }
        }
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            BLType blType = node.Type;
            float value = (float)(node.GetValue(this) * Math.PI / 180);

            if (blType == BLType.Sequence)
            {
                bullet.Direction = bullet.GetFireData().SourceDirection + value;
            }
            else if (blType == BLType.Absolute)
            {
                bullet.Direction = value;
            }
            else if (blType == BLType.Relative)
            {
                bullet.Direction = bullet.Direction + value;
            }
            else //if (blType == BLType.Aim || blType == BLType.None)
            {
                bullet.Direction = bullet.GetAimDir() + value;
            }

            //Debug.WriteLine(String.Format("SetDirecton:{0},  (type:{1} val:{2})", bullet.Direction / Math.PI * 180, node.type, value / Math.PI * 180));
            End = true;

            return BLRunStatus.End;
        }
Example #6
0
 public override BLRunStatus Run(BulletMLBullet bullet)
 {
     bullet.Vanish();
     end = true;
     //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine("Vanish");
     return BLRunStatus.End;
 }
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (first)
            {
                first = false;
                if (node.GetChild(BLName.Speed).type == BLType.Sequence)
                {
                    changeSpeed = node.GetChildValue(BLName.Speed, this);
                }
                else if (node.GetChild(BLName.Speed).type == BLType.Relative)
                {
                    changeSpeed = node.GetChildValue(BLName.Speed, this) / term;
                }
                else
                {
                    changeSpeed = (node.GetChildValue(BLName.Speed, this) - bullet.Speed) / term;
                }
            }

            term--;

            bullet.Speed += changeSpeed;

            // if (bullet.index == DISP_BULLET_INDEX)  Debug.WriteLine(String.Format("ChangeSpeed:{0} (type:{1} val:{2})", bullet.Speed, node.GetChild(BLName.Speed).type, node.GetChildValue(BLName.Speed, this)));

            if (term <= 0)
            {
                end = true;
                return BLRunStatus.End;
            }
            else
            {
                return BLRunStatus.Continue;
            }
        }
 public override BLRunStatus Run(BulletMLBullet bullet)
 {
     bullet.Speed = node.GetValue(this);
     //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine("SetSpeed:" + bullet.Speed);
     end = true;
     return BLRunStatus.End;
 }
Example #9
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            BLType blType = node.Type;
            float  value  = (float)(node.GetValue(this) * Math.PI / 180);

            if (blType == BLType.Sequence)
            {
                bullet.Direction = bullet.GetFireData().SourceDirection + value;
            }
            else if (blType == BLType.Absolute)
            {
                bullet.Direction = value;
            }
            else if (blType == BLType.Relative)
            {
                bullet.Direction = bullet.Direction + value;
            }
            else //if (blType == BLType.Aim || blType == BLType.None)
            {
                bullet.Direction = bullet.GetAimDir() + value;
            }

            //Debug.WriteLine(String.Format("SetDirecton:{0},  (type:{1} val:{2})", bullet.Direction / Math.PI * 180, node.type, value / Math.PI * 180));
            End = true;

            return(BLRunStatus.End);
        }
Example #10
0
 public override BLRunStatus Run(BulletMLBullet bullet)
 {
     bullet.Speed = node.GetValue(this);
     //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine("SetSpeed:" + bullet.Speed);
     end = true;
     return(BLRunStatus.End);
 }
Example #11
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            while (repeatNum < repeatNumMax)
            {
                BLRunStatus runStatus = base.Run(bullet);

                if (runStatus == BLRunStatus.End)
                {
                    repeatNum++;
                    base.Init();
                }
                else if (runStatus == BLRunStatus.Stop)
                {
                    return(BLRunStatus.Stop);                   // BLRunStatus.Stop;
                }
                else
                {
                    return(BLRunStatus.Continue);                   // BLRunStatus.Stop;
                }
            }

            end = true;
            return(BLRunStatus.End);

            //if (repeatNum < repeatNumMax)
            //{
            //    BLRunStatus runStatus = base.Run(bullet);
            //    if (runStatus == BLRunStatus.End)
            //    {
            //        repeatNum++;
            //        //if (bullet.index == DISP_BULLET_INDEX) Debug.WriteLine(String.Format("Repeat: {0} / {1}", repeatNum, repeatNumMax));
            //        base.Init();
            //        if (repeatNum == repeatNumMax)
            //        {
            //            end = true;
            //            return BLRunStatus.End;
            //        }
            //        else
            //            return BLRunStatus.Stop;// Continue;
            //    }
            //    else if (runStatus == BLRunStatus.Stop)
            //        return BLRunStatus.Stop;
            //    else
            //        return BLRunStatus.Stop;// BLRunStatus.Continue;
            //}
            //else
            //{
            //    end = true;
            //    return BLRunStatus.End;
            //}
        }
Example #12
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (term >= 0)
                term--;

            //if (term >= 0) if (bullet.index == DISP_BULLET_INDEX)  Debug.WriteLine("Wait " + term);

            if (term >= 0)
                return BLRunStatus.Stop;
            else
            {
                end = true;
                return BLRunStatus.End;
            }
        }
Example #13
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (first)
            {
                first = false;
                term  = (int)node.GetChildValue(BLName.Term, this);
                if (node.type == BLType.Sequence)
                {
                    horizontalAccel = node.GetChildValue(BLName.Horizontal, this);
                    verticalAccel   = node.GetChildValue(BLName.Vertical, this);
                }
                else if (node.type == BLType.Relative)
                {
                    horizontalAccel = node.GetChildValue(BLName.Horizontal, this) / term;
                    verticalAccel   = node.GetChildValue(BLName.Vertical, this) / term;
                }
                else
                {
                    // spdX = (float)(bullet.speed * Math.Sin(bullet.Direction));
                    // spdY = (float)(bullet.speed * Math.Cos(bullet.Direction));
                    horizontalAccel = (node.GetChildValue(BLName.Horizontal, this) - bullet.spdX) / term;
                    verticalAccel   = (node.GetChildValue(BLName.Vertical, this) - bullet.spdY) / term;
                }
            }

            term--;
            if (term < 0)
            {
                end = true;
                return(BLRunStatus.End);
            }

            bullet.spdX += horizontalAccel;
            bullet.spdY += verticalAccel;

            //Debug.WriteLine(String.Format("accel spdX={0} spdY={1} verAcl={2} horAcl={3} term={4}", bullet.spdX, bullet.spdY, verticalAccel, horizontalAccel, term));

            /*
             * double speedX = bullet.speed * Math.Sin(bullet.Direction);
             * double speedY = bullet.speed * Math.Cos(bullet.Direction);
             * speedX += horizontalAccel;
             * speedY += verticalAccel;
             *
             * bullet.Direction = (float)Math.Atan2(speedX ,speedY);
             * bullet.speed = (float)Math.Sqrt(speedX * speedX + speedY * speedY);
             * //Debug.WriteLine("accel speed={0} dir={1} verAcl={2} horAcl={3} term={4}", bullet.speed, bullet.Direction / Math.PI * 180, verticalAccel, horizontalAccel, term); */
            return(BLRunStatus.Continue);
        }
Example #14
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            while (repeatNum < repeatNumMax)
            {
                BLRunStatus runStatus = base.Run(bullet);

                if (runStatus == BLRunStatus.End)
                {
                    repeatNum++;
                    base.Init();
                }
                else if (runStatus == BLRunStatus.Stop)
                    return BLRunStatus.Stop;// BLRunStatus.Stop;
                else
                    return BLRunStatus.Continue;// BLRunStatus.Stop;
            }

            end = true;
            return BLRunStatus.End;

            //if (repeatNum < repeatNumMax)
            //{
            //    BLRunStatus runStatus = base.Run(bullet);
            //    if (runStatus == BLRunStatus.End)
            //    {
            //        repeatNum++;
            //        //if (bullet.index == DISP_BULLET_INDEX) Debug.WriteLine(String.Format("Repeat: {0} / {1}", repeatNum, repeatNumMax));
            //        base.Init();
            //        if (repeatNum == repeatNumMax)
            //        {
            //            end = true;
            //            return BLRunStatus.End;
            //        }
            //        else
            //            return BLRunStatus.Stop;// Continue;
            //    }
            //    else if (runStatus == BLRunStatus.Stop)
            //        return BLRunStatus.Stop;
            //    else
            //        return BLRunStatus.Stop;// BLRunStatus.Continue;
            //}
            //else
            //{
            //    end = true;
            //    return BLRunStatus.End;
            //}
        }
Example #15
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (term >= 0)
            {
                term--;
            }

            //if (term >= 0) if (bullet.index == DISP_BULLET_INDEX)  Debug.WriteLine("Wait " + term);

            if (term >= 0)
            {
                return(BLRunStatus.Stop);
            }
            else
            {
                end = true;
                return(BLRunStatus.End);
            }
        }
Example #16
0
        public virtual BLRunStatus Run(BulletMLBullet bullet)
        {
            End = true;

            foreach (var task in TaskList)
            {
                if (!task.End)
                {
                    BLRunStatus sts = task.Run(bullet);
                    if (sts == BLRunStatus.Stop)
                    {
                        End = false;
                        return BLRunStatus.Stop;
                    }
                    else if(sts == BLRunStatus.Continue)
                        End = false;
                }
            }

            if (End)
                return BLRunStatus.End;

            return BLRunStatus.Continue; // 継続して実行
        }
Example #17
0
        // BulletMLTreeの内容を元に、実行のための各種クラスを生成し、自身を初期化する
        public void Parse(BulletMLTree tree, BulletMLBullet bullet)
        {
            foreach (BulletMLTree node in tree.Children)
            {
                // Action
                if (node.Name == BLName.Repeat)
                {
                    Parse(node, bullet);
                }
                else if (node.Name == BLName.Action)
                {
                    ////Debug.WriteLine("Action");
                    int repeatNum = 1;
                    if (node.Parent.Name == BLName.Repeat)
                    {
                        repeatNum = (int)node.Parent.GetChildValue(BLName.Times, this);
                    }
                    BulletMLAction task = new BulletMLAction(node, repeatNum);
                    task.Owner = this;
                    TaskList.Add(task);
                    task.Parse(node, bullet);
                }
                else if (node.Name == BLName.ActionRef)
                {
                    BulletMLTree refNode   = tree.GetLabelNode(node.Label, BLName.Action);
                    int          repeatNum = 1;
                    if (node.Parent.Name == BLName.Repeat)
                    {
                        repeatNum = (int)node.Parent.GetChildValue(BLName.Times, this);
                    }
                    BulletMLAction task = new BulletMLAction(refNode, repeatNum);
                    task.Owner = this;
                    TaskList.Add(task);

                    // パラメータを取得
                    for (int i = 0; i < node.Children.Count; i++)
                    {
                        task.ParamList.Add(node.Children[i].GetValue(this));
                    }
                    //if (node.children.Count > 0)
                    //{
                    //    task.paramNode = node;
                    //}

                    task.Parse(refNode, bullet);
                }
                else if (node.Name == BLName.ChangeSpeed)
                {
                    BulletMLChangeSpeed blChangeSpeed = new BulletMLChangeSpeed(node);
                    blChangeSpeed.Owner = this;
                    TaskList.Add(blChangeSpeed);
                    ////Debug.WriteLine("ChangeSpeed");
                }
                else if (node.Name == BLName.ChangeDirection)
                {
                    BulletMLChangeDirection blChangeDir = new BulletMLChangeDirection(node);
                    blChangeDir.Owner = this;
                    TaskList.Add(blChangeDir);
                    ////Debug.WriteLine("ChangeDirection");
                }
                else if (node.Name == BLName.Fire)
                {
                    if (TaskList == null)
                    {
                        TaskList = new List <BulletMLTask>();
                    }
                    BulletMLFire fire = new BulletMLFire(node);
                    fire.Owner = this;
                    TaskList.Add(fire);
                }
                else if (node.Name == BLName.FireRef)
                {
                    if (TaskList == null)
                    {
                        TaskList = new List <BulletMLTask>();
                    }
                    BulletMLTree refNode = tree.GetLabelNode(node.Label, BLName.Fire);
                    BulletMLFire fire    = new BulletMLFire(refNode);
                    fire.Owner = this;
                    TaskList.Add(fire);
                    // パラメータを取得
                    //if (node.children.Count > 0)
                    //{
                    //    fire.paramNode = node;
                    //}
                    for (int i = 0; i < node.Children.Count; i++)
                    {
                        fire.ParamList.Add(node.Children[i].GetValue(this));
                    }
                }
                else if (node.Name == BLName.Wait)
                {
                    BulletMLWait wait = new BulletMLWait(node);
                    wait.Owner = this;
                    TaskList.Add(wait);
                }
                else if (node.Name == BLName.Speed)
                {
                    //BulletMLSetSpeed task = new BulletMLSetSpeed(node);
                    //task.owner = this;
                    //taskList.Add(task);
                    bullet.GetFireData().SpeedInit = true; // 値を明示的にセットしたことを示す
                    bullet.Speed = node.GetValue(this);
                }
                else if (node.Name == BLName.Direction)
                {
                    BulletMLSetDirection task = new BulletMLSetDirection(node);
                    task.Owner = this;
                    TaskList.Add(task);
                }
                else if (node.Name == BLName.Vanish)
                {
                    BulletMLVanish task = new BulletMLVanish();
                    task.Owner = this;
                    TaskList.Add(task);
                }
                else if (node.Name == BLName.Accel)
                {
                    BulletMLAccel task = new BulletMLAccel(node);
                    task.Owner = this;
                    TaskList.Add(task);
                }
                else
                {
                    ////Debug.WriteLine("node.name:{0}", node.name);
                }
            }
        }
Example #18
0
        public virtual BLRunStatus Run(BulletMLBullet bullet)
        {
            end = true;
            for (int i = 0; i < taskList.Count; i++)
            {
                if (!taskList[i].end)
                {
                    BLRunStatus sts = taskList[i].Run(bullet);
                    if (sts == BLRunStatus.Stop)
                    {
                        end = false;
                        return BLRunStatus.Stop;
                    }
                    else if (sts == BLRunStatus.Continue)
                        end = false;
                }
            }

            if (end)
                return BLRunStatus.End;
            else
                return BLRunStatus.Continue;//継続して実行
        }
Example #19
0
        //BulletMLTreeの内容を元に、実行のための各種クラスを生成し、自身を初期化する
        public void Parse(BulletMLTree tree, BulletMLBullet bullet)
        {
            foreach (BulletMLTree node in tree.children)
            {
                // Action
                if (node.name == BLName.Repeat)
                {
                    Parse(node, bullet);
                }
                else if (node.name == BLName.Action)
                {
                    ////Debug.WriteLine("Action");
                    int repeatNum = 1;
                    if (node.parent.name == BLName.Repeat)
                        repeatNum = (int)node.parent.GetChildValue(BLName.Times, this);
                    BulletMLAction task = new BulletMLAction(node, repeatNum);
                    task.owner = this;
                    taskList.Add(task);
                    task.Parse(node, bullet);
                }
                else if (node.name == BLName.ActionRef)
                {
                    BulletMLTree refNode = tree.GetLabelNode(node.label, BLName.Action);
                    int repeatNum = 1;
                    if (node.parent.name == BLName.Repeat)
                        repeatNum = (int)node.parent.GetChildValue(BLName.Times, this);
                    BulletMLAction task = new BulletMLAction(refNode, repeatNum);
                    task.owner = this;
                    taskList.Add(task);

                    // パラメータを取得
                    for (int i = 0; i < node.children.Count; i++)
                    {
                        task.paramList.Add(node.children[i].GetValue(this));
                    }
                    //if (node.children.Count > 0)
                    //{
                    //    task.paramNode = node;
                    //}

                    task.Parse(refNode, bullet);
                }
                else if (node.name == BLName.ChangeSpeed)
                {
                    BulletMLChangeSpeed blChangeSpeed = new BulletMLChangeSpeed(node);
                    blChangeSpeed.owner = this;
                    taskList.Add(blChangeSpeed);
                    ////Debug.WriteLine("ChangeSpeed");
                }
                else if (node.name == BLName.ChangeDirection)
                {
                    BulletMLChangeDirection blChangeDir = new BulletMLChangeDirection(node);
                    blChangeDir.owner = this;
                    taskList.Add(blChangeDir);
                    ////Debug.WriteLine("ChangeDirection");
                }
                else if (node.name == BLName.Fire)
                {
                    if (taskList == null) taskList = new List<BulletMLTask>();
                    BulletMLFire fire = new BulletMLFire(node);
                    fire.owner = this;
                    taskList.Add(fire);
                }
                else if (node.name == BLName.FireRef)
                {
                    if (taskList == null) taskList = new List<BulletMLTask>();
                    BulletMLTree refNode = tree.GetLabelNode(node.label, BLName.Fire);
                    BulletMLFire fire = new BulletMLFire(refNode);
                    fire.owner = this;
                    taskList.Add(fire);
                    // パラメータを取得
                    //if (node.children.Count > 0)
                    //{
                    //    fire.paramNode = node;
                    //}
                    for (int i = 0; i < node.children.Count; i++)
                    {
                        fire.paramList.Add(node.children[i].GetValue(this));
                    }
                }
                else if (node.name == BLName.Wait)
                {
                    BulletMLWait wait = new BulletMLWait(node);
                    wait.owner = this;
                    taskList.Add(wait);
                }
                else if (node.name == BLName.Speed)
                {
                    //BulletMLSetSpeed task = new BulletMLSetSpeed(node);
                    //task.owner = this;
                    //taskList.Add(task);
                    bullet.GetFireData().speedInit = true; // 値を明示的にセットしたことを示す
                    bullet.Speed = node.GetValue(this);
                }
                else if (node.name == BLName.Direction)
                {
                    BulletMLSetDirection task = new BulletMLSetDirection(node);
                    task.owner = this;
                    taskList.Add(task);
                }
                else if (node.name == BLName.Vanish)
                {
                    BulletMLVanish task = new BulletMLVanish();
                    task.owner = this;
                    taskList.Add(task);
                }
                else if (node.name == BLName.Accel)
                {
                    BulletMLAccel task = new BulletMLAccel(node);
                    task.owner = this;
                    taskList.Add(task);
                }
                else
                {
                    ////Debug.WriteLine("node.name:{0}", node.name);
                }
            }
        }
Example #20
0
 public void Init()
 {
     used = true;
     bulletRoot = false;
     mlBullet = new BulletMLBullet(this);
 }
Example #21
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (first)
            {
                first = false;
                float value = (float)(node.GetChildValue(BLName.Direction, this) * Math.PI / 180);
                blType = node.GetChild(BLName.Direction).type;
                if (blType == BLType.Sequence)
                {
                    changeDir = value;
                }
                else
                {
                    if (blType == BLType.Absolute)
                    {
                        changeDir = (float)((value - bullet.Direction));
                    }
                    else if (blType == BLType.Relative)
                    {
                        changeDir = (float)(value);
                    }
                    else
                    {
                        changeDir = (float)((bullet.GetAimDir() + value - bullet.Direction));
                    }

                    if (changeDir > Math.PI)
                    {
                        changeDir -= 2 * (float)Math.PI;
                    }
                    if (changeDir < -Math.PI)
                    {
                        changeDir += 2 * (float)Math.PI;
                    }

                    changeDir /= term;

                    /*
                     *                                      float finalDir = 0;
                     *
                     *                                      if (blType == BLType.Absolute)
                     *                                      {
                     *                                              finalDir = value;
                     *                                      }
                     *                                      else if (blType == BLType.Relative)
                     *                                      {
                     *                                              finalDir = bullet.Direction + value;
                     *                                      }
                     *                                      else
                     *                                      {
                     *                                              finalDir = bullet.GetAimDir() + value;
                     *                                      }
                     *
                     *                                      // 角度の小さいほうへ回転する
                     *                                      float changeDir1 = finalDir - bullet.Direction;
                     *                                      float changeDir2;
                     *                                      changeDir2 = changeDir1 > 0 ? changeDir2 = changeDir1 - 360: changeDir2 = changeDir1 + 360;
                     *                                      changeDir = Math.Abs(changeDir1) < Math.Abs(changeDir2) ? changeDir1 : changeDir2;
                     *                                      changeDir = changeDir / term;
                     */
                }
            }

            term--;

            bullet.Direction = bullet.Direction + changeDir;

            // if (bullet.index == DISP_BULLET_INDEX) Debug.WriteLine(String.Format("changeDirection:{0}度 (changeDir:{1} type:{2})", bullet.Direction / Math.PI * 180, changeDir, node.GetChild(BLName.Direction).type));

            if (term <= 0)
            {
                end = true;
                return(BLRunStatus.End);
            }
            else
            {
                return(BLRunStatus.Continue);
            }
        }
Example #22
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            float changeDir = 0;
            float changeSpd = 0;

            // 方向の設定
            if (dirNode != null)
            {
                changeDir = (int)dirNode.GetValue(this) * (float)Math.PI / (float)180;
                if (dirNode.Type == BLType.Sequence)
                {
                    bullet.GetFireData().SourceDirection += changeDir;
                }
                else if (dirNode.Type == BLType.Absolute)
                {
                    bullet.GetFireData().SourceDirection = changeDir;
                }
                else if (dirNode.Type == BLType.Relative)
                {
                    bullet.GetFireData().SourceDirection = changeDir + bullet.Direction;
                }
                else
                {
                    bullet.GetFireData().SourceDirection = changeDir + bullet.GetAimDir();
                }
            }
            else
            {
                bullet.GetFireData().SourceDirection = bullet.GetAimDir();
            }



            // 弾の生成
#if ExpandedBulletML
            string blName = "";
            if (bulletNode != null)
            {
                blName = bulletNode.bulletName;
            }
            else if (refNode != null)
            {
                blName = refNode.bulletName;
            }
            BulletMLBullet newBullet = bullet.GetNewBullet(blName); //bullet.tree);
#else
            BulletMLBullet newBullet = bullet.GetNewBullet();       //bullet.tree);
#endif

            if (newBullet == null)
            {
                End = true;
                return(BLRunStatus.End);
            }

            if (refNode != null)
            {
                // パラメータを取得
                for (int i = 0; i < refNode.Children.Count; i++)
                {
                    newBullet.Tasks[0].ParamList.Add(refNode.Children[i].GetValue(this));
                }

                //if (refNode.children.Count > 0)
                //{
                //    newBullet.task.paramNode = refNode;// node;
                //}
                // refBulletで参照
                newBullet.Init(bullet.Tree.GetLabelNode(refNode.Label, BLName.Bullet));
#if ExpandedBulletML
                newBullet.Visible = refNode.visible;
#endif
            }
            else
            {
                newBullet.Init(bulletNode);
#if ExpandedBulletML
                newBullet.Visible = bulletNode.visible;
#endif
            }

            newBullet.X = bullet.X;
            newBullet.Y = bullet.Y;
            newBullet.Tasks[0].Owner = this;
            newBullet.Direction      = bullet.GetFireData().SourceDirection;


            if (!bullet.GetFireData().SpeedInit&& newBullet.GetFireData().SpeedInit)
            {
                // 自分の弾発射速度の初期化がまだのとき、子供の弾の速度を使って初期値とする
                bullet.GetFireData().SourceSpeed = newBullet.Speed;
                bullet.GetFireData().SpeedInit   = true;
            }
            else
            {
                // 自分の弾発射速度の初期化済みのとき
                // スピードの設定
                if (spdNode != null)
                {
                    changeSpd = spdNode.GetValue(this);
                    if (spdNode.Type == BLType.Sequence || spdNode.Type == BLType.Relative)
                    {
                        bullet.GetFireData().SourceSpeed += changeSpd;
                    }
                    else
                    {
                        bullet.GetFireData().SourceSpeed = changeSpd;
                    }
                }
                else
                {
                    // 特に弾に速度が設定されていないとき
                    if (!newBullet.GetFireData().SpeedInit)
                    {
                        bullet.GetFireData().SourceSpeed = 1;
                    }
                    else
                    {
                        bullet.GetFireData().SourceSpeed = newBullet.Speed;
                    }
                }
            }

            newBullet.GetFireData().SpeedInit = false;
            newBullet.Speed = bullet.GetFireData().SourceSpeed;

            //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine(String.Format("Fire dir:{0} spd:{1} label:{2}", bullet.srcDir / Math.PI * 180, bullet.srcSpeed, refNode != null ? refNode.label : ""));
            //Debug.WriteLine("index({3}) Fire dir:{0} spd:{1} label:{2}", bullet.srcDir / Math.PI * 180, bullet.srcSpeed, refNode != null ? refNode.label : "", bullet.index);

            End = true;
            return(BLRunStatus.End);
        }
Example #23
0
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            float changeDir = 0;
            float changeSpd = 0;

            // 方向の設定
            if (dirNode != null)
            {
                changeDir = (int)dirNode.GetValue(this) * (float)Math.PI / (float)180;
                if (dirNode.Type == BLType.Sequence)
                {
                    bullet.GetFireData().SourceDirection += changeDir;
                }
                else if (dirNode.Type == BLType.Absolute)
                {
                    bullet.GetFireData().SourceDirection = changeDir;
                }
                else if (dirNode.Type == BLType.Relative)
                {
                    bullet.GetFireData().SourceDirection = changeDir + bullet.Direction;
                }
                else
                {
                    bullet.GetFireData().SourceDirection = changeDir + bullet.GetAimDir();
                }
            }
            else
            {
                bullet.GetFireData().SourceDirection = bullet.GetAimDir();
            }

            // 弾の生成
            #if ExpandedBulletML
            string blName = "";
            if (bulletNode != null)
                blName = bulletNode.bulletName;
            else if (refNode != null)
                blName = refNode.bulletName;
            BulletMLBullet newBullet = bullet.GetNewBullet(blName);//bullet.tree);
            #else
            BulletMLBullet newBullet = bullet.GetNewBullet();//bullet.tree);
            #endif

            if (newBullet == null)
            {
                End = true;
                return BLRunStatus.End;
            }

            if (refNode != null)
            {
                // パラメータを取得
                for (int i = 0; i < refNode.Children.Count; i++)
                {
                    newBullet.Tasks[0].ParamList.Add(refNode.Children[i].GetValue(this));
                }

                //if (refNode.children.Count > 0)
                //{
                //    newBullet.task.paramNode = refNode;// node;
                //}
                // refBulletで参照
                newBullet.Init( bullet.Tree.GetLabelNode(refNode.Label, BLName.Bullet) );
            #if ExpandedBulletML
                newBullet.Visible = refNode.visible;
            #endif
            }
            else
            {
                newBullet.Init(bulletNode);
            #if ExpandedBulletML
               newBullet.Visible = bulletNode.visible;
            #endif
            }

            newBullet.X = bullet.X;
            newBullet.Y = bullet.Y;
            newBullet.Tasks[0].Owner = this;
            newBullet.Direction = bullet.GetFireData().SourceDirection;

            if (!bullet.GetFireData().SpeedInit && newBullet.GetFireData().SpeedInit)
            {
                // 自分の弾発射速度の初期化がまだのとき、子供の弾の速度を使って初期値とする
                bullet.GetFireData().SourceSpeed = newBullet.Speed;
                bullet.GetFireData().SpeedInit = true;
            }
            else
            {
                // 自分の弾発射速度の初期化済みのとき
                // スピードの設定
                if (spdNode != null)
                {
                    changeSpd = spdNode.GetValue(this);
                    if (spdNode.Type == BLType.Sequence || spdNode.Type == BLType.Relative)
                    {
                        bullet.GetFireData().SourceSpeed += changeSpd;
                    }
                    else
                    {
                        bullet.GetFireData().SourceSpeed = changeSpd;
                    }
                }
                else
                {
                    // 特に弾に速度が設定されていないとき
                    if(!newBullet.GetFireData().SpeedInit)
                        bullet.GetFireData().SourceSpeed = 1;
                    else
                        bullet.GetFireData().SourceSpeed = newBullet.Speed;
                }
            }

            newBullet.GetFireData().SpeedInit = false;
            newBullet.Speed = bullet.GetFireData().SourceSpeed;

            //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine(String.Format("Fire dir:{0} spd:{1} label:{2}", bullet.srcDir / Math.PI * 180, bullet.srcSpeed, refNode != null ? refNode.label : ""));
            //Debug.WriteLine("index({3}) Fire dir:{0} spd:{1} label:{2}", bullet.srcDir / Math.PI * 180, bullet.srcSpeed, refNode != null ? refNode.label : "", bullet.index);

            End = true;
            return BLRunStatus.End;
        }
        public override BLRunStatus Run(BulletMLBullet bullet)
        {
            if (first)
            {
                first = false;
                float value = (float)(node.GetChildValue(BLName.Direction, this) * Math.PI / 180);
                blType = node.GetChild(BLName.Direction).Type;
                if (blType == BLType.Sequence)
                {
                    changeDir = value;
                }
                else
                {
                    if (blType == BLType.Absolute)
                    {
                        changeDir = (float)((value - bullet.Direction));
                    }
                    else if (blType == BLType.Relative)
                    {
                        changeDir = (float)(value);
                    }
                    else
                    {
                        changeDir = (float)( (bullet.GetAimDir() + value - bullet.Direction));
                    }

                    if( changeDir > Math.PI ) changeDir -= 2*(float)Math.PI;
                    if( changeDir < -Math.PI ) changeDir += 2*(float)Math.PI;

                    changeDir /= term;

            /*
                    float finalDir = 0;

                    if (blType == BLType.Absolute)
                    {
                        finalDir = value;
                    }
                    else if (blType == BLType.Relative)
                    {
                        finalDir = bullet.Direction + value;
                    }
                    else
                    {
                        finalDir = bullet.GetAimDir() + value;
                    }

                    // 角度の小さいほうへ回転する
                    float changeDir1 = finalDir - bullet.Direction;
                    float changeDir2;
                    changeDir2 = changeDir1 > 0 ? changeDir2 = changeDir1 - 360: changeDir2 = changeDir1 + 360;
                    changeDir = Math.Abs(changeDir1) < Math.Abs(changeDir2) ? changeDir1 : changeDir2;
                    changeDir = changeDir / term;
            */
                }
            }

            term--;

            bullet.Direction = bullet.Direction + changeDir;

            // if (bullet.index == DISP_BULLET_INDEX) Debug.WriteLine(String.Format("changeDirection:{0}度 (changeDir:{1} type:{2})", bullet.Direction / Math.PI * 180, changeDir, node.GetChild(BLName.Direction).type));

            if (term <= 0)
            {
                End = true;
                return BLRunStatus.End;
            }
            else
                return BLRunStatus.Continue;
        }