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); } }
public override BLRunStatus Run(BulletMLBullet bullet) { bullet.Vanish(); end = true; //if(bullet.index == DISP_BULLET_INDEX) Debug.WriteLine("Vanish"); return(BLRunStatus.End); }
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; }
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; }
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); }
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); }
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; //} }
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; } }
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); }
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; //} }
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); } }
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; // 継続して実行 }
// 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); } } }
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;//継続して実行 }
//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); } } }
public void Init() { used = true; bulletRoot = false; mlBullet = new BulletMLBullet(this); }
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); } }
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) { 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; }