private void InitSequences() { var worldMap = SpaceUtil.WorldMap; float startYPosition = worldMap.Top.y + SpriteMap.HeightHalf; float targetYPosition = (worldMap.Center.y + (worldMap.Top.y * 2f)) * 0.333f; float yDiff = targetYPosition - startYPosition; Vector3 moveDistance = new Vector3(0, yDiff, 0); float rotateTimeHalf = RotateTime * 0.5f; // Initial sequence var moveDown = new MoveBy(this, moveDistance, InitialTravelTime); var setVelocity = new GameTaskFunc(this, () => Velocity = new Vector2(0, -FinalTravelSpeed)); var initialRotateLeft = new RotateTo(this, AngleDown, MinAngle, rotateTimeHalf); var initialSequence = new Sequence(moveDown, setVelocity, initialRotateLeft); // Infinite sequence var fireLeft = new GameTaskFunc(this, FireLeft); var rotateMiddle1 = new RotateTo(this, MinAngle, AngleDown, rotateTimeHalf); var fireDown = new GameTaskFunc(this, FireDown); var rotateRight = new RotateTo(this, AngleDown, MaxAngle, rotateTimeHalf); var fireRight = new GameTaskFunc(this, FireRight); var rotateMiddle2 = new RotateTo(this, MaxAngle, AngleDown, rotateTimeHalf); var rotateLeft = new RotateTo(this, AngleDown, MinAngle, rotateTimeHalf); var infiniteSequence = new Sequence(fireLeft, rotateMiddle1, fireDown, rotateRight, fireRight, rotateMiddle2, fireDown, rotateLeft); var repeat = new RepeatForever(infiniteSequence); Behavior = new EndlessSequence(repeat, initialSequence); }
public async Task ShowStartMenu(bool gameOver) { var cache = Application.ResourceCache; bigAircraft = Node.CreateChild(); var model = bigAircraft.CreateComponent <StaticModel>(); if (gameOver) { model.Model = cache.GetModel(Assets.Models.Enemy1); model.SetMaterial(cache.GetMaterial(Assets.Materials.Enemy1).Clone("")); bigAircraft.SetScale(0.3f); bigAircraft.Rotate(new Quaternion(180, 90, 20), TransformSpace.Local); } else { model.Model = cache.GetModel(Assets.Models.Player); model.SetMaterial(cache.GetMaterial(Assets.Materials.Player).Clone("")); bigAircraft.SetScale(1f); bigAircraft.Rotate(new Quaternion(0, 40, -50), TransformSpace.Local); } bigAircraft.Position = new Vector3(10, 2, 10); bigAircraft.RunActions(new RepeatForever(new Sequence(new RotateBy(1f, 0f, 0f, 5f), new RotateBy(1f, 0f, 0f, -5f)))); //TODO: rotor should be defined in the model + animation rotor = bigAircraft.CreateChild(); var rotorModel = rotor.CreateComponent <Box>(); rotorModel.Color = Color.White; rotor.Scale = new Vector3(0.1f, 1.5f, 0.1f); rotor.Position = new Vector3(0, 0, -1.3f); var rotorAction = new RepeatForever(new RotateBy(1f, 0, 0, 360f * 6)); //RPM rotor.RunActions(rotorAction); menuLight = bigAircraft.CreateChild(); menuLight.Position = new Vector3(-3, 6, 2); menuLight.AddComponent(new Light { LightType = LightType.Point, Brightness = 0.3f }); await bigAircraft.RunActionsAsync(new EaseIn(new MoveBy(1f, new Vector3(-10, -2, -10)), 2)); InitMenu(cache); InitSettings(cache); topPlayers = new Text(); topPlayers.HorizontalAlignment = HorizontalAlignment.Center; topPlayers.SetFont(cache.GetFont(Assets.Fonts.Font), Application.Graphics.Width / 30); Application.UI.Root.AddChild(topPlayers); menuTaskSource = new TaskCompletionSource <bool>(); finished = false; await menuTaskSource.Task; }
public async Task ShowStartMenu(bool gameOver) { var cache = Application.ResourceCache; _bigAircraft = Node.CreateChild(); var model = _bigAircraft.CreateComponent <StaticModel>(); if (gameOver) { model.Model = cache.GetModel(Assets.Models.Enemy1); model.SetMaterial(cache.GetMaterial(Assets.Materials.Enemy1).Clone()); _bigAircraft.SetScale(0.3f); _bigAircraft.Rotate(new Quaternion(180, 90, 20)); } else { model.Model = cache.GetModel(Assets.Models.Player); model.SetMaterial(cache.GetMaterial(Assets.Materials.Player).Clone()); _bigAircraft.SetScale(1f); _bigAircraft.Rotate(new Quaternion(0, 40, -50)); } _bigAircraft.Position = new Vector3(10, 2, 10); _bigAircraft.RunActions(new RepeatForever(new Sequence(new RotateBy(1f, 0f, 0f, 5f), new RotateBy(1f, 0f, 0f, -5f)))); //TODO: rotor should be defined in the model + animation _rotor = _bigAircraft.CreateChild(); var rotorModel = _rotor.CreateComponent <Box>(); rotorModel.Color = Color.White; _rotor.Scale = new Vector3(0.1f, 1.5f, 0.1f); _rotor.Position = new Vector3(0, 0, -1.3f); var rotorAction = new RepeatForever(new RotateBy(1f, 0, 0, 360f * 6)); //RPM _rotor.RunActions(rotorAction); _menuLight = _bigAircraft.CreateChild(); _menuLight.Position = new Vector3(-3, 6, 2); _menuLight.AddComponent(new Light { LightType = LightType.Point, Brightness = 0.3f }); await _bigAircraft.RunActionsAsync(new EaseIn(new MoveBy(1f, new Vector3(-10, -2, -10)), 2)); _textBlock = new Text(); _textBlock.HorizontalAlignment = HorizontalAlignment.Center; _textBlock.VerticalAlignment = VerticalAlignment.Bottom; var str = gameOver ? "游戏结束" : "点击开始"; var font = cache.GetFont(Assets.Fonts.ChineseFont); _textBlock.SetFont(font, 36); _textBlock.SetTextFix(str); Application.UI.Root.AddChild(_textBlock); _menuTaskSource = new TaskCompletionSource <bool>(); _finished = false; await _menuTaskSource.Task; }
private RepeatForever Setup(ITask child) { var repeat = new RepeatForever(); repeat.AddChild(child); return(repeat); }
public async Task ShowStartMenu(bool gameOver) { var cache = Application.ResourceCache; bigAircraft = Node.CreateChild(); var model = bigAircraft.CreateComponent <StaticModel>(); if (gameOver) { model.Model = cache.GetModel(Assets.Models.Enemy1); model.SetMaterial(cache.GetMaterial(Assets.Materials.Enemy1).Clone("")); bigAircraft.SetScale(0.3f); bigAircraft.Rotate(new Quaternion(180, 90, 20), TransformSpace.Local); } else { model.Model = cache.GetModel(Assets.Models.Player); model.SetMaterial(cache.GetMaterial(Assets.Materials.Player).Clone("")); bigAircraft.SetScale(1f); bigAircraft.Rotate(new Quaternion(0, 40, -50), TransformSpace.Local); } bigAircraft.Position = new Vector3(10, 2, 10); bigAircraft.RunActions(new RepeatForever(new Sequence(new RotateBy(1f, 0f, 0f, 5f), new RotateBy(1f, 0f, 0f, -5f)))); // rotor dev'essere definito nel modello + animazione rotor = bigAircraft.CreateChild(); var rotorModel = rotor.CreateComponent <Box>(); rotorModel.Color = Color.White; rotor.Scale = new Vector3(0.1f, 1.5f, 0.1f); rotor.Position = new Vector3(0, 0, -1.3f); var rotorAction = new RepeatForever(new RotateBy(1f, 0, 0, 360f * 6)); // RPM rotor.RunActions(rotorAction); menuLight = bigAircraft.CreateChild(); menuLight.Position = new Vector3(-3, 6, 2); menuLight.AddComponent(new Light { LightType = LightType.Point, Brightness = 0.3f }); await bigAircraft.RunActionsAsync(new EaseIn(new MoveBy(1f, new Vector3(-10, -2, -10)), 2)); textBlock = new Text(); textBlock.HorizontalAlignment = HorizontalAlignment.Center; textBlock.VerticalAlignment = VerticalAlignment.Bottom; textBlock.Value = gameOver ? "FINE PARTITA" : "TOCCARE PER INIZIARE"; textBlock.SetFont(cache.GetFont(Assets.Fonts.Font), Application.Graphics.Width / 15); Application.UI.Root.AddChild(textBlock); menuTaskSource = new TaskCompletionSource <bool>(); finished = false; await menuTaskSource.Task; }
public virtual void DoAnimate(int id, Function onSpecial, int loop, Function onFinished, float speed = 1.0f, bool stopAllFirst = false) { if (stopAllFirst) { stopAllActions(); } ActionInterval act; cca.Animation ani; if (!m_animations.TryGetValue(id, out ani)) { if (id == kActionDie) { act = new FadeOut(0.1f); } else { act = new DelayTime(0.2f); } if (onSpecial != null) { act = new Sequence(act, new CallFunc(onSpecial)); } } else { act = new Animate(ani, delegate(int index, ref object data) { if (onSpecial != null) { onSpecial(); } }); } if (loop == CONST_LOOP_FOREVER) { act = new RepeatForever(act); } else { act = new Sequence(new Repeat(act, (uint)loop), new CallFunc(onFinished)); } Speed action = new Speed(act, speed); action.tag = id; runAction(action); }
public virtual void DoLinkUnitToUnit(UnitNode from, UnitNode to, int id, Function onSpecial, int loop, Function onFinished) { ActionInterval act; cca.Animation ani; if (!m_animations.TryGetValue(id, out ani)) { if (id == kActionDie) { act = new FadeOut(0.1f); } else { act = new DelayTime(0.2f); } if (onSpecial != null) { act = new Sequence(act, new CallFunc(onSpecial)); } } else { visible = false; act = new LinkAnimate(ani, delegate(int index, ref object data) { if (onSpecial != null) { onSpecial(); } }, from, to); } if (loop == CONST_LOOP_FOREVER) { act = new RepeatForever(act); } else { act = new Sequence(new Repeat(act, (uint)loop), new CallFunc(onFinished)); } //m_node.stopActionByTag(id); act.tag = id; runAction(act); }
public void CreateMenu() { if (_scene == null) { _scene = new Scene(); } _scene.CreateComponent <Octree>(); var physics = _scene.CreateComponent <PhysicsWorld>(); physics.SetGravity(new Vector3(0, 0, 0)); var cameraNode = _scene.CreateChild(); cameraNode.Position = (new Vector3(0.0f, 0f, -500.0f)); cameraNode.Rotate(new Quaternion(10, 0, 0)); cameraNode.CreateComponent <Camera>(); var Viewport = new Viewport(Context, _scene, cameraNode.GetComponent <Camera>(), null); if (Application.Platform != Platforms.Android && Application.Platform != Platforms.iOS) { RenderPath effectRenderPath = Viewport.RenderPath.Clone(); var fxaaRp = Application.ResourceCache.GetXmlFile(Assets.PostProcess.FXAA3); effectRenderPath.Append(fxaaRp); Viewport.RenderPath = effectRenderPath; } Application.Renderer.SetViewport(0, Viewport); var zoneNode = _scene.CreateChild(); var zone = zoneNode.CreateComponent <Zone>(); zone.SetBoundingBox(new BoundingBox(-300.0f, 300.0f)); zone.AmbientColor = new Color(1f, 1f, 1f); var plannerNode = _scene.CreateChild(); plannerNode.Position = new Vector3(0, -50, 0); plannerNode.Scale = new Vector3(10, 10, 10); var planner = plannerNode.CreateComponent <StaticModel>(); planner.Model = Application.ResourceCache.GetModel(Assets.Models.VerBot); planner.Material = Application.ResourceCache.GetMaterial(Assets.Materials.VerBot); planner.SetMaterial(Application.ResourceCache.GetMaterial(Assets.Materials.VerBot)); var movement = new RepeatForever(new RotateBy(1, 0, 5, 0)); plannerNode.RunActionsAsync(movement); // Lights: var _lightNode = _scene.CreateChild(); _lightNode.Position = new Vector3(0.0f, 0f, -5.0f); var light = _lightNode.CreateComponent <Light>(); light.Range = 1200; light.Brightness = 2; if (ResultString != "") { Text ResultText = new Text(); ResultText.HorizontalAlignment = HorizontalAlignment.Center; ResultText.VerticalAlignment = VerticalAlignment.Center; ResultText.Value = ResultString; ResultText.SetFont(Application.ResourceCache.GetFont(Assets.Fonts.Font), Application.Graphics.Width / 20); Application.UI.Root.AddChild(ResultText); } Text WelcomeText = new Text(); WelcomeText.HorizontalAlignment = HorizontalAlignment.Center; WelcomeText.VerticalAlignment = VerticalAlignment.Center; WelcomeText.Position = new IntVector2(WelcomeText.Position.X, 150); WelcomeText.Value = WelcomeString; WelcomeText.SetFont(Application.ResourceCache.GetFont(Assets.Fonts.Font), Application.Graphics.Width / 20); Application.UI.Root.AddChild(WelcomeText); }
public void Setup_repeater() { repeater = new RepeatForever(); }
public static Scene MakeTestActionsScene() { TextureInfo Characters = new TextureInfo(new Texture2D("/Application/Sample/GameEngine2D/FeatureCatalog/data/PlanetCute/Objects.png", false), new Vector2i(7, 3)); float world_scale = 0.036f; var sprite = new SpriteTile(); sprite.TextureInfo = Characters; sprite.TileIndex1D = 2; sprite.Quad.S = sprite.CalcSizeInPixels() * world_scale; sprite.CenterSprite(); sprite.Color = new Vector4(1.0f, 1.0f, 1.0f, 0.75f); sprite.BlendMode = BlendMode.Normal; var scene = new Scene() { Name = "Action tests" }; scene.AddChild(sprite); var pos = new Vector2(0.0f, 0.0f); int writing_color_tag = 333; int writing_position_tag = 65406; AddButton(scene, "MoveTo (0,0)", ref pos, () => { sprite.RunAction(new MoveTo(new Vector2(0.0f, 0.0f), 0.1f)); }); AddButton(scene, "MoveBy (3,0)", ref pos, () => { sprite.RunAction(new MoveBy(new Vector2(3.0f, 0.0f), 0.1f)); }); AddButton(scene, "ScaleBy (2,2)", ref pos, () => { sprite.RunAction(new ScaleBy(new Vector2(2.0f, 2.0f), 0.1f)); }); AddButton(scene, "ScaleBy (0.5,0.5)", ref pos, () => { sprite.RunAction(new ScaleBy(new Vector2(0.5f, 0.5f), 0.1f)); }); AddButton(scene, "TintTo White", ref pos, () => { // prevent from running an other action that writes the color if (sprite.GetActionByTag(writing_color_tag) != null) { sprite.StopActionByTag(writing_color_tag); } sprite.RunAction(new TintTo(Math.SetAlpha(Colors.White, 0.75f), 2.0f) { Tag = writing_color_tag }); } ); AddButton(scene, "TintTo Blue", ref pos, () => { // prevent from running an other action that writes the color if (sprite.GetActionByTag(writing_color_tag) != null) { sprite.StopActionByTag(writing_color_tag); } sprite.RunAction(new TintTo(Math.SetAlpha(Colors.Blue, 0.75f), 2.0f) { Tag = writing_color_tag }); } ); AddButton(scene, "Pingpong colors", ref pos, () => { // prevent from running an other action that writes the color if (sprite.GetActionByTag(writing_color_tag) != null) { sprite.StopActionByTag(writing_color_tag); } var action12 = new TintTo(Colors.Green, 0.5f) { Tween = (t) => FMath.Sin(t * Math.Pi * 0.5f), }; var action13 = new TintTo(Colors.Magenta, 0.5f) { Tween = (t) => FMath.Sin(t * Math.Pi * 0.5f), }; var seq = new Sequence(); seq.Add(action12); seq.Add(action13); var repeat0 = new RepeatForever() { InnerAction = seq, Tag = writing_color_tag }; sprite.RunAction(repeat0); } ); AddButton(scene, "Pingpong position", ref pos, () => { // prevent from running the same action twice // (we could also just hold an Action object somewhere and re-run, so that this check wouldn't be needed) if (sprite.GetActionByTag(writing_position_tag) != null) { sprite.StopActionByTag(writing_position_tag); } var action12 = new MoveTo(new Vector2(-5, 0), 0.5f) { Tween = (t) => FMath.Sin(t * Math.Pi * 0.5f), }; var action13 = new MoveTo(new Vector2(5, 0), 0.5f) { Tween = (t) => FMath.Sin(t * Math.Pi * 0.5f), }; var seq = new Sequence(); seq.Add(action12); seq.Add(action13); var repeat0 = new RepeatForever() { InnerAction = seq, Tag = writing_position_tag }; sprite.RunAction(repeat0); } ); AddButton(scene, "StopAllActions", ref pos, () => sprite.StopAllActions()); scene.RegisterDisposeOnExit((System.IDisposable)Characters); return(scene); }
public void StartEffect() { if ( Image.GetActionByTag( BLINK_COLOR_TAG ) != null ) Image.StopActionByTag( BLINK_COLOR_TAG ); var actionBlinkWhite = new TintTo( Colors.White, 0.2f ) { Tween = (t) => Sce.PlayStation.Core.FMath.Sin(t*Math.Pi*0.5f), }; var actionBlinkGrey = new TintTo( Colors.Grey50, 0.20f ) { Tween = (t) => Sce.PlayStation.Core.FMath.Sin(t*Math.Pi*0.5f), }; var seq = new Sequence(); seq.Add( actionBlinkWhite ); seq.Add( actionBlinkGrey ); var repeat0 = new RepeatForever { InnerAction = seq, Tag = BLINK_COLOR_TAG }; Image.RunAction( repeat0 ); }
/// <summary> /// ボスを生成 /// </summary> /// <param name='enemyId'> /// Enemy identifier. /// </param> /// <param name='hp'> /// Hp. /// </param> /// <param name='startTime'> /// Start time. /// </param> public static void SetBossEnemy(EnemyType enemyId, int hp, float startTime) { var seq = new Sequence(); var point_center = new Vector2(700,272); var point_under = new Vector2(700,140); var point_top = new Vector2(700,404); var point_forward = new Vector2(400,272); seq.Add(new MoveTo(point_center,2)); seq.Add(new CallFunc(()=>EnemyBullet.MakeCircleBullets(point_center.X,point_center.Y,10,2))); seq.Add(new CallFunc(()=>EnemyBullet.MakeCircleBullets(point_center.X,point_center.Y,7,5))); seq.Add(new CallFunc(()=>EnemyBullet.MakeCircleBullets(point_center.X,point_center.Y,13,10))); seq.Add(new MoveTo(point_forward,3)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSpiralBullets(point_forward.X,point_forward.Y,17,5))); seq.Add(new MoveTo(point_under,3)); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,0))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,1))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,2))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,3))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,4))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,5))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,6))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,7))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,6))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,5))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,4))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,3))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,2))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,1))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,0))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,1))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,2))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,3))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,4))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,5))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,6))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,7))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,6))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,5))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,4))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,3))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,2))); seq.Add(new MoveTo(point_under,0.2f)); seq.Add(new CallFunc(()=>EnemyBullet.MakeSingleBullet(point_under.X,point_under.Y,-3,1))); seq.Add(new MoveTo(point_top,3)); seq.Add(new CallFunc(()=>AimedBlockBullet(point_top))); seq.Add(new MoveTo(point_center,3)); seq.Add(new CallFunc(()=>EnemyBullet.MakeLineBullets(point_center.X,point_center.Y,10,50,-5,0))); seq.Add(new MoveTo(point_center,1)); seq.Add(new CallFunc(()=>EnemyBullet.MakeLineBullets(point_center.X,point_center.Y,10,40,-5,0))); seq.Add(new MoveTo(point_center,1)); seq.Add(new CallFunc(()=>EnemyBullet.MakeLineBullets(point_center.X,point_center.Y,10,50,-5,0))); seq.Add(new MoveTo(point_center,1)); seq.Add(new CallFunc(()=>EnemyBullet.MakeLineBullets(point_center.X,point_center.Y,10,40,-5,0))); var repeat = new RepeatForever(){ InnerAction = seq }; Enemy.MakeNewEnemy(enemyId,960,272,BulletType.Boss,999999,hp,999999).Sprite.RunAction(repeat); }