示例#1
0
 /// <summary>
 /// Set boundaries for random movements
 /// </summary>
 protected async void MoveRandomly(float minX, float maxX, float minY, float maxY, float duration)
 {
     while (IsAlive)
     {
         var moveAction = new MoveBy(duration, new Vector3(RandomHelper.NextRandom(minX, maxX), RandomHelper.NextRandom(minY, maxY), 0));
         await Node.RunActionsAsync(moveAction, moveAction.Reverse());
     }
 }
示例#2
0
 async void MoveRandomly()
 {
     while (IsAlive)
     {
         var moveAction = new MoveBy(0.75f, new Vector3(RandomHelper.NextRandom(-0.4f, 0.4f), RandomHelper.NextRandom(-0.3f, 0.3f), 0));
         await Node.RunActionsAsync(moveAction, moveAction.Reverse());
     }
 }
示例#3
0
        async void Launch(Node bulletNode)
        {
            await bulletNode.RunActionsAsync(
                new MoveTo(3f, new Vector3(RandomHelper.NextRandom(-6f, 6f), -6, 0)),
                new CallFunc(() => bulletNode.SetScale(0f)));

            //remove the bullet from the scene.
            bulletNode.Remove();
        }
示例#4
0
        protected async void StartShooting()
        {
            while (IsAlive && Node.Components.Count > 0)
            {
                foreach (var weapon in Node.Components.OfType <Weapon>())
                {
                    await weapon.FireAsync(false);

                    if (!IsAlive)
                    {
                        return;
                    }
                }
                await Node.RunActionsAsync(new DelayTime(RandomHelper.NextRandom(0.1f, 0.5f)));
            }
        }
示例#5
0
        async void SpawnCoins()
        {
            var player = Player;

            while (Player.IsAlive && player == Player)
            {
                var coinNode = scene.CreateChild();
                coinNode.Position = new Vector3(RandomHelper.NextRandom(-2.5f, 2.5f), 5f, 0);
                var coin = new Apple();
                coinNode.AddComponent(coin);
                await coin.FireAsync(false);

                await scene.RunActionsAsync(new DelayTime(3f));

                coinNode.Remove();
            }
        }
示例#6
0
        Node CreateTile(int index)
        {
            var  cache     = Application.ResourceCache;
            Node tile      = Node.CreateChild();
            var  planeNode = tile.CreateChild();

            planeNode.Scale = new Vector3(BackgroundScale, 0.0001f, BackgroundScale);
            var planeObject = planeNode.CreateComponent <StaticModel>();

            planeObject.Model = cache.GetModel(Assets.Models.Plane);
            planeObject.SetMaterial(cache.GetMaterial(Assets.Materials.Grass));

            // area for trees:
            var sizeZ = BackgroundScale / 2.1f;
            var sizeX = BackgroundScale / 3.8f;

            Node treeNode = tile.CreateChild();

            treeNode.Rotate(new Quaternion(0, RandomHelper.NextRandom(0, 5) * 90, 0), TransformSpace.Local);
            treeNode.Scale = new Vector3(0.3f, 0.4f, 0.3f);
            var treeGroup = treeNode.CreateComponent <StaticModel>();

            treeGroup.Model = cache.GetModel(Assets.Models.Tree);
            treeGroup.SetMaterial(cache.GetMaterial(Assets.Materials.Pyramid));

            for (float i = -sizeX; i < sizeX; i += 3.2f)
            {
                for (float j = -sizeZ; j < sizeZ; j += 3.2f)
                {
                    var clonedTreeNode = treeNode.Clone(CreateMode.Local);
                    clonedTreeNode.Position = new Vector3(i + RandomHelper.NextRandom(-0.3f, 0.3f), 0, j);
                }
            }

            treeNode.Remove();

            tile.Rotate(new Quaternion(270 + BackgroundRotationX, 0, 0), TransformSpace.Local);
            tile.RotateAround(new Vector3(0, 0, 0), new Quaternion(0, BackgroundRotationY, 0), TransformSpace.Local);
            var tilePosX = BackgroundScale * (float)Math.Sin(MathHelper.DegreesToRadians(90 - BackgroundRotationX));
            var tilePosY = BackgroundScale * (float)Math.Sin(MathHelper.DegreesToRadians(BackgroundRotationX));

            tile.Position = new Vector3(0, (tilePosX + 0.01f) * index, tilePosY * index + FlightHeight);
            return(tile);
        }
示例#7
0
        protected override async void Init()
        {
            InitialRotation = new Quaternion(180, 270, -30);
            var cache = Application.ResourceCache;
            var node  = Node;
            var model = node.CreateComponent <StaticModel>();

            model.Model = cache.GetModel(Assets.Models.Enemy1);
            model.SetMaterial(cache.GetMaterial(Assets.Materials.Enemy1).Clone(""));
            node.SetScale(RandomHelper.NextRandom(0.1f, 0.12f));
            node.Position = new Vector3(0f, 5f, 0f);

            // load weapons:
            node.AddComponent(new XamarinCube());

            node.Position = new Vector3(3 * (RandomHelper.NextBoolRandom() ? 1 : -1), RandomHelper.NextRandom(0, 2), 0);
            await Node.RunActionsAsync(new MoveTo(1f, new Vector3(RandomHelper.NextRandom(-2, 2), RandomHelper.NextRandom(2, 4), 0)));

            MoveRandomly(minX: -2f, maxX: 2f, minY: -1f, maxY: 1f, duration: 0.5f);
            StartShooting();
        }
示例#8
0
        protected override async Task OnFire(bool player)
        {
            var cache = Application.ResourceCache;

            var bulletNode      = CreateRigidBullet(player);
            var bulletModelNode = bulletNode.CreateChild();

            var model = bulletModelNode.CreateComponent <StaticModel>();

            model.Model = cache.GetModel(Assets.Models.Box);
            model.SetMaterial(Material.FromImage(Assets.Textures.XamarinLogo));
            bulletModelNode.SetScale(2f);
            bulletModelNode.Rotate(new Quaternion(45, 0, 0), TransformSpace.Local);
            bulletNode.SetScale(RandomHelper.NextRandom(0.15f, 0.2f));

            // Trace-effect using particles
            var trace = bulletNode.CreateChild();

            trace.SetScale(2f);
            var particleEmitter = trace.CreateComponent <ParticleEmitter2D>();

            particleEmitter.Effect = cache.GetParticleEffect2D(Assets.Particles.Explosion);

            // Route (Bezier)
            float direction         = player ? 1 : -1;
            var   moveMissileAction = new BezierBy(3f, new BezierConfig
            {
                ControlPoint1 = new Vector3(0, 3f * direction, 0),
                ControlPoint2 = new Vector3(RandomHelper.NextRandom(-3f, 3f), 5 * direction, 0),
                EndPosition   = new Vector3(0, 8 * direction, 0),                      //to launch "to" point
            });

            var bulletRotationTask = bulletModelNode.RunActionsAsync(new RotateBy(3f, 0, 1000, 0));
            var bulletMoveTask     = bulletNode.RunActionsAsync(new EaseOut(moveMissileAction, 1), new DelayTime(2f));         //a delay to leave the trace effect
            await Task.WhenAll(bulletRotationTask, bulletMoveTask);

            //remove the missile from the scene.
            bulletNode.Remove();
        }
示例#9
0
        async Task LaunchSingleMissile(bool left, bool player)
        {
            var cache      = Application.ResourceCache;
            var carrier    = Node;
            var carrierPos = carrier.Position;

            var bulletNode = CreateRigidBullet(player);

            bulletNode.Position = new Vector3(carrierPos.X + 0.4f * (left ? -1 : 1), carrierPos.Y + 0.3f, carrierPos.Z);
            var bulletModelNode = bulletNode.CreateChild();

            bulletModelNode.Scale = new Vector3(1f, 2f, 1f) / 2.5f;
            bulletNode.SetScale(0.3f);

            // Trace-effect using particles
            bulletNode.CreateComponent <ParticleEmitter2D>().Effect = cache.GetParticleEffect2D(Assets.Particles.MissileTrace);
            bulletNode.CreateComponent <ParticleEmitter2D>().Effect = cache.GetParticleEffect2D(Assets.Particles.Explosion);

            // Route (Bezier)
            float directionY         = player ? 1 : -1;
            float directionX         = left ? -1 : 1;
            var   moveMiscsileAction = new BezierBy(1.0f, new BezierConfig
            {
                ControlPoint1 = new Vector3(-directionX, 2f * directionY, 0),
                ControlPoint2 = new Vector3(RandomHelper.NextRandom(-2, 2) * directionX, 4 * directionY, 0),
                EndPosition   = new Vector3(RandomHelper.NextRandom(-1, 1) * directionX, 12 * directionY, 0),
            });

            await bulletNode.RunActionsAsync(
                new EaseIn(moveMissileAction, 1),            // move
                new CallFunc(() => bulletNode.SetScale(0f)), //collapse
                new DelayTime(2f));                          //a delay to leave the trace effect

            //remove the missile from the scene.
            bulletNode.Remove();
        }