Example #1
0
            public override void Init()
            {
                base.Init();

                Timer.Add(() => {
                    Self.GetComponent <AudioEmitterComponent>().EmitRandomized("mob_fire_static");

                    var a = Self.AngleTo(Self.Target);

                    var p = new ProjectilePattern(KeepShapePattern.Make(0))
                    {
                        Position = Self.Center
                    };

                    Self.Area.Add(p);

                    ProjectileTemplate.MakeFast(Self, "small", Self.Center, a, (pr) => {
                        pr.CanBeReflected = false;
                        pr.CanBeBroken    = false;

                        p.Add(pr);
                        pr.Color = ProjectileColor.Red;
                        pr.AddLight(32, pr.Color);
                    }, swordData, () => {
                        Timer.Add(() => {
                            p.Launch(a, 30);
                            Self.GetComponent <AudioEmitterComponent>().EmitRandomized("mob_fire_static");

                            Become <FightState>();
                        }, 0.2f);
                    });
                }, 1f);
            }
Example #2
0
        public override void Init()
        {
            base.Init();

            for (var i = 0; i < 4; i++)
            {
                ProjectileTemplate.Make(Self, "green_small", Self.Center,
                                        i * (float)Math.PI * 0.5f, 5, 2, 0,

                                        p => p.AddLight(16f, Projectile.GreenLight),

                                        "  x ",
                                        "xxxx",
                                        "  x ");
            }
        }
Example #3
0
            public override void Update(float dt)
            {
                base.Update(dt);

                if (T >= 0.2f && !fired)
                {
                    fired = true;

                    if (Self.Target != null)
                    {
                        var h      = Self.Target.GetComponent <HealthComponent>();
                        var c      = h.Health <= 1 ? 'f' : Chars[Rnd.Int(Chars.Length)];
                        var a      = Self.AngleTo(Self.Target);
                        var color  = ProjectileColor.Rainbow[Rnd.Int(ProjectileColor.Rainbow.Length)];
                        var sprite = Rnd.Chance(60) ? "circle" : "square";

                        if (LetterTemplateData.Data.TryGetValue(c, out var data))
                        {
                            var p = new ProjectilePattern(KeepShapePattern.Make(0))
                            {
                                Position = Self.Center
                            };

                            Self.Area.Add(p);

                            ProjectileTemplate.MakeFast(Self, sprite, Self.Center, a, (pr) => {
                                p.Add(pr);
                                pr.Color = color;
                                pr.AddLight(32, color);

                                pr.CanBeReflected      = false;
                                pr.BodyComponent.Angle = a;
                            }, data, () => {
                                Timer.Add(() => {
                                    p.Launch(a, Rnd.Float(30, 80));
                                    Self.GetComponent <AudioEmitterComponent>().EmitRandomized("mob_fire_static");
                                }, 0.2f);
                            });
                        }
                    }
                }

                if (T >= delay || Self.Target == null)
                {
                    Become <ToIdleState>();
                }
            }
    public static ProjectileTemplate fromXML(XElement xmlProjectile)
    {
        //TODO: Remove the defaults from hard coding.
        string name = "UNNAMED PROJECTILE";
        string spriteName = "NO_SPRITE";
        FloatStat damageRatio = new FloatStatExplicit(1.0f);
        IntStat bounces = new IntStatExplicit(5);
        FloatStat lifespan = new FloatStatExplicit(10.0f);
        FloatStat speed = new FloatStatExplicit(1.0f);

        //Load in data from XML.
        if (xmlProjectile.Attribute("name") != null)
        {
            name = (string)xmlProjectile.Attribute("name");
        }
        if (xmlProjectile.Element("Sprite") != null)
        {
            spriteName = (string)xmlProjectile.Element("Sprite");
        }
        if (xmlProjectile.Element("DamageRatio") != null)
        {
            damageRatio = FloatStat.fromXML(xmlProjectile.Element("DamageRatio"));
        }
        if (xmlProjectile.Element("Bounces") != null)
        {
            bounces = IntStat.fromXML(xmlProjectile.Element("Bounces"));
        }
        if (xmlProjectile.Element("Lifespan") != null)
        {
            lifespan = FloatStat.fromXML(xmlProjectile.Element("Lifespan"));
        }
        if (xmlProjectile.Element("Speed") != null)
        {
            speed = FloatStat.fromXML(xmlProjectile.Element("Speed"));
        }

        ProjectileTemplate projectileTemplate = new ProjectileTemplate(name, spriteName, damageRatio, bounces, lifespan, speed);

        //Load in Behaviors from XML.
        //TODO: Load in behavior from XML.

        return projectileTemplate;
    }
Example #5
0
        public override void Update(float dt)
        {
            base.Update(dt);

            if (T >= (count + 1) * Delay)
            {
                count++;

                if (count == 4)
                {
                    Self.SelectAttack();
                    return;
                }

                ProjectileTemplate.Make(Self, "green_small", Self.Center, Self.AngleTo(Self.Target), 5, 2, 0,
                                        p => p.AddLight(16f, Projectile.GreenLight),

                                        "  x ",
                                        "xxxx",
                                        "  x ");
            }
        }
Example #6
0
        private Entity GetProjectile(ProjectileTemplate data)
        {
            if (_poolDict.TryGetValue(data.ID, out var stack))
            {
                if (stack.UsedCount > 0)
                {
                    var pooled = stack.Pop();
                    if (pooled != null)
                    {
                        pooled.Pooled = false;
                        return(pooled);
                    }
                }
            }
            else
            {
                stack = new ManagedArray <Entity>(data.PoolSize);
                _poolDict.Add(data.ID, stack);
            }
            var entity = GetDefaultEntity(data.ID);

            //var prefab = data.GetValue<string>(DatabaseFields.Model);
            entity.Add(new TypeId(data.ID));
            switch (data.Type)
            {
            default:
            case "Simple":
                break;

            case "SpriteAnimation":
                entity.Add(new CollisionCheckForward(data.CollisionDistance));
                break;

            case "VolumeLaser":
                entity.Add(new CollisionCheckForward(data.CollisionDistance));
                break;
            }
            switch (data.Movement)
            {
            case "Forward":
                entity.Add(new ForwardMover());
                break;

            case "Arc":
                entity.Add(new ArcMover());
                break;
            }
            entity.Get <DespawnTimer>().Length = data.Timeout;
            entity.Get <MoveSpeed>().Speed     = data.Speed;
            entity.Get <RotationSpeed>().Speed = data.Rotation;
            if (data.ActionFx != null)
            {
                entity.Add(new ActionFxComponent(data.ActionFx));
                if (data.ActionFx.TryGetColor(out var actionColor))
                {
                    entity.Add(new HitParticlesComponent(actionColor));
                }
            }
            if (data.TrailAmount > 0)
            {
                entity.Add(new ParticleTrailComponent(data.TrailAmount, data.TrailFrequency, data.TrailColor, ParticleGravityStatus.Default));
            }
            if (data.Components != null)
            {
                World.Get <DataFactory>().AddComponentList(entity, data.Data, data.Components);
            }
            return(entity);
        }