예제 #1
0
 // Start is called before the first frame update
 void Start()
 {
     particle       = GetComponent <ParticleSystem>();
     rb             = GetComponent <Rigidbody2D>();
     spriteRenderer = GetComponent <SpriteRenderer>();
     sprites        = GetComponent <SpriteReference>();
 }
예제 #2
0
        public override void Update()
        {
            base.Update();

            SpriteReference cinder = SpriteLoader.Instance.AddSprite("content/cinder_ender");

            BigCreatureRender render = (BigCreatureRender)Render;
            bool powered             = this.HasStatusEffect(statusEffect => statusEffect is PoweredUp);

            if (powered)
            {
                render.Sprite = SpriteLoader.Instance.AddSprite("content/ender_erebizo_powered");
                for (int i = 0; i < 1; i++)
                {
                    Vector2 emitPos   = new Vector2(X * 16, Y * 16) + Mask.GetRandomPixel(Random);
                    Vector2 centerPos = VisualTarget;
                    Vector2 velocity  = Util.AngleToVector(Random.NextFloat() * MathHelper.TwoPi) * (Random.NextFloat() + 0.5f);
                    velocity = Vector2.Normalize(emitPos - centerPos) * (Random.NextFloat() + 0.5f);
                    new Cinder(World, cinder, emitPos, velocity, Random.Next(90) + 20);
                }
            }
            else
            {
                render.Sprite = SpriteLoader.Instance.AddSprite("content/ender_erebizo");
            }
        }
예제 #3
0
        private void AddSpriteNode(ulong nodeId, SpriteReference spriteRef)
        {
            var spriteBitmap = _spriteBitmapStore.Get(spriteRef.RelativePath);
            var item         = new SpriteNodeEditorItem(nodeId, this, spriteBitmap);

            _items.Add(nodeId, item);
        }
예제 #4
0
        private void DrawWing(SceneGame scene, SpriteReference sprite, Color color, int segments, float directionMod, float distanceMod, Microsoft.Xna.Framework.Graphics.SpriteEffects mirror)
        {
            //new Color(244, 211, 23)
            //SpriteReference hand = SpriteLoader.Instance.AddSprite("content/hand");
            int index = 0;

            for (int i = 1; i <= segments; i++)
            {
                int     subSegments = 9;
                float   angle       = directionMod * MathHelper.ToRadians(90 - i * 5);
                float   distance    = (float)LerpHelper.Quadratic(10, distanceMod * 50, (float)i / segments);
                Vector2 pivot       = VisualPosition() + Util.AngleToVector(angle) * distance;
                scene.DrawSpriteExt(sprite, 0, pivot + GetHandOffset(index), sprite.Middle, angle + directionMod * MathHelper.PiOver4, Vector2.One, mirror, color, 0);
                index++;
                for (int e = 0; e <= subSegments; e++)
                {
                    float subSegmentSlide = (float)e / (subSegments + 1);
                    float subAngle        = angle - directionMod * MathHelper.ToRadians(i * 2);
                    float subDistance     = distanceMod * e * 5;
                    float visAngle        = subAngle + directionMod * MathHelper.PiOver2 + directionMod * MathHelper.ToRadians(i * -10);
                    scene.DrawSpriteExt(sprite, 0, pivot + GetHandOffset(index) + Util.AngleToVector(subAngle) * subDistance, sprite.Middle, visAngle, Vector2.One, mirror, color * MathHelper.Lerp(0.3f, 1, subSegmentSlide), 0);
                    index++;
                }
            }
        }
예제 #5
0
 public PotionAppearance(SpriteReference sprite, string name, string description)
 {
     Sprite      = sprite;
     Name        = name;
     Description = description;
     Randomized  = this;
 }
예제 #6
0
 public void UpdateBrush(SpriteReference spriteReferences)
 {
     if (brush != null)
     {
         brush.UpdateBrush(spriteReferences);
     }
 }
예제 #7
0
        public override void DrawFrame(SceneGame scene, Vector2 pos, PoseData poseData, Facing facing, Matrix transform, Color color, ColorMatrix colorMatrix)
        {
            SpriteReference abyssalTendril = SpriteLoader.Instance.AddSprite("content/abyssal_tendril_bush");

            var mirror = Microsoft.Xna.Framework.Graphics.SpriteEffects.None;

            bool tendrilDown     = IsTendrilDown(poseData.Pose);
            bool tendrilDownLast = IsTendrilDown(poseData.PoseLast);
            int  frameOffset     = 0;

            switch (poseData.Pose)
            {
            case (CreaturePose.Attack):
                frameOffset = 3 + (poseData.PoseFrame / 2) % 4;
                break;

            case (CreaturePose.Cast):
                frameOffset = 3 + (poseData.PoseFrame / 4) % 4;
                break;
            }

            if (tendrilDown != tendrilDownLast && poseData.PoseFrame < 15)
            {
                frameOffset = 1 + (poseData.PoseFrame / 10) % 2;
            }

            scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (matrix, projection) =>
            {
                scene.SetupColorMatrix(Color * colorMatrix, transform * matrix, projection);
            });
            scene.DrawSprite(abyssalTendril, frameOffset, pos - new Vector2(0, 16), mirror, color, 0);
            scene.PopSpriteBatch();
        }
예제 #8
0
        private static Domain.Nodes.Node BuildSpriteNode(DocumentData data, Node node)
        {
            var spriteRef  = new SpriteReference(node.SpriteKey);
            var domainNode = new SpriteNode(data.MessageBus, node.Id, node.Name, spriteRef)
            {
                Parent = node.ParentId == 0
                    ? null
                    : data.Nodes[node.ParentId] // node list is in hierarchical order, so parents always are available when their children are added.
            };

            if (domainNode.Parent == null)
            {
                data.RootNodes.InternalAdd(domainNode);
            }
            else
            {
                domainNode.Parent?.InternalAdd(domainNode);
            }

            domainNode.GetProperty(PropertyType.TranslationX).SetDesignValueInternal(node.Position.X);
            domainNode.GetProperty(PropertyType.TranslationY).SetDesignValueInternal(node.Position.Y);
            domainNode.GetProperty(PropertyType.RotationAngle).SetDesignValueInternal(node.Angle);
            domainNode.GetProperty(PropertyType.Visibility).SetDesignValueInternal(node.IsVisible ? 1f : 0f);

            return(domainNode);
        }
예제 #9
0
        public NameInput(Scene scene, string name, string text, Vector2 position, int width, string oldString)
        {
            Scene         = scene;
            OldString     = oldString;
            NewString     = oldString;
            Position      = position;
            Width         = width;
            MenuAreaBasic = new MenuAreaBasic(this, () => Position, 10);
            SpriteReference textbox    = SpriteLoader.Instance.AddSprite("content/ui_box");
            var             formatting = new TextFormatting()
            {
                Bold = false,
            };
            var dialogInstant = new DialogFormattingInstant();

            UI = new LabelledUI(textbox, textbox, textBuilder =>
            {
                textBuilder.AppendText(name, formatting, dialogInstant);
            }, () => new Point(Width, Height));

            Text = new TextBuilder(Width - 16 - 16, Height);
            Text.StartLine(LineAlignment.Left);
            Text.AppendText(text, formatting, dialogInstant);
            Text.EndLine();
            Text.StartLine(LineAlignment.Left);
            //TODO: Text Input
            Text.EndLine();
            Text.EndContainer();
            Text.Finish();
        }
예제 #10
0
 public ParticleExplosion(SceneGame world, SpriteReference sprite, Vector2 velocity, LerpHelper.Delegate subImageLerp, LerpHelper.Delegate velocityLerp, int time) : base(world, time)
 {
     Sprite       = sprite;
     SubImageLerp = subImageLerp;
     Velocity     = velocity;
     VelocityLerp = velocityLerp;
 }
예제 #11
0
 internal static void Postfix(StandardTowerPurchaseButton __instance, ref SpriteReference __result)
 {
     if (__instance.baseTowerModel.GetModTower()?.ModTowerSet is ModTowerSet modTowerSet)
     {
         __result = modTowerSet.ContainerReference;
     }
 }
예제 #12
0
        // Set the Strengthen button's interactability based on whether the player has enough resources
        public void UpdateStrengthenButton()
        {
            _buttonStrengthen.gameObject.SetActive(true);

            // remove the previous cost
            _textResourceCosts.text = "";

            // Populate new cost tiles
            var rankCost = _selectedUpgrade.UpgradeData.GetStrengthenCost();

            foreach (var resource in rankCost)
            {
                if (!string.IsNullOrEmpty(_textResourceCosts.text))
                {
                    _textResourceCosts.text += " ";                             // add space to separate the resources
                }
                _textResourceCosts.text += resource.Value.ToString();

                // add the respective sprite for the resource
                _textResourceCosts.text += SpriteReference.GetResourceSprite(resource.Key);
            }

            // Set interactability & text color based on whether the player has enough resources
            bool hasResources = ItemProgress.HasResources(rankCost);

            _buttonStrengthen.interactable = hasResources;
            _textResourceCosts.color       = hasResources ? _colorTextEnabled : _colorTextDisabled;
            _textStrengthen.color          = hasResources ? _colorTextEnabled : _colorTextDisabled;
        }
예제 #13
0
 public ParticleBlob(SceneGame world, SpriteReference sprite, Vector2 velocity, LerpHelper.Delegate velocityLerp, LerpHelper.Delegate scaleLerp, int time) : base(world, time)
 {
     Sprite       = sprite;
     Velocity     = velocity;
     VelocityLerp = velocityLerp;
     ScaleLerp    = scaleLerp;
 }
예제 #14
0
        public static void Postfix(ref SpriteReference reference, ref Image image)
        {
            //Console.WriteLine(SpriteRegister.register == null);
            //Console.WriteLine(SpriteRegister.register.Count);


            if (reference != null && image != null && SpriteRegister.register.Count > 0)
            {
                foreach (KeyValuePair <string, Sprite> entry in SpriteRegister.register)
                {
                    //Console.WriteLine(entry.Key == null);
                    //Console.WriteLine(reference.GUID == null);
                    //Console.WriteLine(entry.Value == null);
                    //Console.WriteLine(entry.Value.texture == null);


                    if (entry.Key == reference.GUID)
                    {
                        var val = entry.Value;
                        if (entry.Value == null)
                        {
                            Texture2D pngTexture = SpriteRegister.TextureFromPNG(entry.Key);
                            val = Sprite.Create(pngTexture, new Rect(0.0f, 0.0f, pngTexture.width, pngTexture.height), default);
                        }
                        //var temp = val.texture;
                        //if (temp == null) Console.WriteLine("tex null");
                        image.canvasRenderer.SetTexture(val.texture);
                        image.sprite = val;
                    }
                }
            }
        }
예제 #15
0
 public DrawableFloor(string id, SpriteReference sprite, Color color, DrawPass pass) : base(id)
 {
     Sprite = sprite;
     Icon   = sprite;
     Color  = color;
     Pass   = pass;
 }
예제 #16
0
 public SpriteNodeAddedEvent(ulong nodeId, string name, SpriteReference spriteRef, ulong?parentNodeId, int index)
 {
     NodeId       = nodeId;
     Name         = name;
     SpriteRef    = spriteRef;
     ParentNodeId = parentNodeId;
     Index        = index;
 }
예제 #17
0
        /// <summary>
        /// (Cross-Game compatible) Returns's the GUID of this SpriteReference
        /// </summary>
        /// <param name="spriteReference"></param>
        /// <returns></returns>
        public static string GetGUID(this SpriteReference spriteReference)
        {
#if BloonsTD6
            return(spriteReference.GUID);
#elif BloonsAT
            return(spriteReference.Guid);
#endif
        }
예제 #18
0
 public SpriteNodeRemovedEvent(ulong nodeId, string name, SpriteReference spriteRef, ulong?parentNodeId, int index, List <PropertyValueSet> propertyValues)
 {
     NodeId         = nodeId;
     Name           = name;
     SpriteRef      = spriteRef;
     ParentNodeId   = parentNodeId;
     Index          = index;
     PropertyValues = propertyValues;
 }
예제 #19
0
 public ParticleSpore(SceneGame world, SpriteReference sprite, Vector2 start, Vector2 end, LerpHelper.Delegate velocityLerp, int time) : base(world, time)
 {
     Sprite       = sprite;
     Position     = start;
     Target       = end;
     VelocityLerp = velocityLerp;
     OffsetX      = Random.Next(sprite.Width);
     OffsetY      = Random.Next(sprite.Height);
 }
예제 #20
0
        /// <summary>
        /// (Cross-Game compatible) Returns a new SpriteReference that uses the given guid
        /// </summary>
        /// <param name="guid">The guid that you'd like to assign to the SpriteReference</param>
        /// <returns></returns>
        public static SpriteReference CreateSpriteReference(string guid)
        {
#if BloonsTD6
            return(new SpriteReference(guid));
#elif BloonsAT
            var reference = new SpriteReference();
            reference.guid = guid;
            return(reference);
#endif
        }
예제 #21
0
 public ParticleThrow(SceneGame world, SpriteReference sprite, Vector2 start, Vector2 end, float height, LerpHelper.Delegate velocityLerp, LerpHelper.Delegate scaleLerp, int time, float fadeSlide) : base(world, time)
 {
     Sprite       = sprite;
     Position     = start;
     Target       = end;
     Height       = height;
     VelocityLerp = velocityLerp;
     ScaleLerp    = scaleLerp;
     FadeSlide    = fadeSlide;
 }
예제 #22
0
        private void EmitFlare(Creature creature, int n)
        {
            SpriteReference sprite = SpriteLoader.Instance.AddSprite("content/cinder");

            for (int i = 0; i < n; i++)
            {
                Vector2 emitPos   = new Vector2(creature.X * 16, creature.Y * 16) + creature.Mask.GetRandomPixel(Random);
                Vector2 centerPos = creature.VisualTarget;
                Vector2 velocity  = Vector2.Normalize(emitPos - centerPos) * (Random.NextFloat() + 0.5f) * 1;
                new Cinder(creature.World, sprite, emitPos, velocity, (int)Math.Min(Random.Next(90) + 90, 50));
            }
        }
예제 #23
0
        public SpriteViewModel Build(SpriteReference sprite)
        {
            var filename = _editor.CurrentDocument.GetAbsoluteAssetPath(sprite.RelativePath);

            return(new SpriteViewModel
            {
                Sprite = sprite,
                Label = Path.GetFileNameWithoutExtension(sprite.RelativePath),
                Thumbnail = _thumbnailLoader.LoadThumbnail(filename, 40),
                Filename = filename
            });
        }
예제 #24
0
        public override void DrawLine(Scene scene, Vector2 linePos, int e)
        {
            ActAction       action = Actions[e];
            SpriteReference cursor = SpriteLoader.Instance.AddSprite("content/cursor");

            if (Selection == e)
            {
                scene.SpriteBatch.Draw(cursor.Texture, linePos + new Vector2(0, LineHeight / 2 - cursor.Width / 2), cursor.GetFrameRect(0), Color.White);
            }
            scene.DrawText(action.Name, linePos + new Vector2(16, 0), Alignment.Left, new TextParameters().SetConstraints(Width - 32, 16).SetBold(true).SetColor(Color.White, Color.Black));
            scene.DrawText(action.Description, linePos + new Vector2(16, 16), Alignment.Left, new TextParameters().SetConstraints(Width - 32, 16).SetBold(false).SetColor(Color.Gray, Color.Black));
        }
예제 #25
0
        public override IEnumerable <Wait> RoutineUse(Creature user, object target)
        {
            Consume();
            user.VisualPose = user.FlickPose(CreaturePose.Cast, CreaturePose.Stand, 70);
            yield return(user.WaitSome(50));

            SpriteReference cinder = SpriteLoader.Instance.AddSprite("content/cinder_ender");

            new FlarePower(user.World, cinder, user, 50);
            new ScreenFlashPowerUp(user, () => ColorMatrix.Ender(), 100, 100, 50, 50);
            user.AddStatusEffect(new PoweredUp());
            yield return(user.WaitSome(20));
        }
예제 #26
0
        protected void DrawWeaponAsIcon(SceneGame scene, SpriteReference sprite, int frame, Vector2 position)
        {
            Vector2 scale;

            if (sprite.Width >= 16)
            {
                scale = new Vector2(14 * Sqrt2 / sprite.Width);
            }
            else
            {
                scale = Vector2.One;
            }
            scene.DrawSpriteExt(sprite, frame, position - sprite.Middle, sprite.Middle, MathHelper.ToRadians(-45), scale, SpriteEffects.None, Color.White, 0);
        }
예제 #27
0
        public override IEnumerable <Wait> RoutineUse(Creature user, object target)
        {
            if (target is Creature targetCreature)
            {
                yield return(user.CurrentHits);

                Consume();
                new ChaosSplash(user.World, new Vector2(user.X * 16 + 8, user.Y * 16 + 8), Vector2.Zero, 0, 15);
                user.VisualColor = user.Static(Color.Transparent);
                EmitFlare(user, 10);
                var nearbyTiles = targetCreature.Tile.GetNearby(4).Where(tile => !tile.Solid && !tile.Creatures.Any()).ToList();
                user.MoveTo(nearbyTiles.Pick(Random), 0);
                EmitFlare(user, 10);
                user.VisualColor = user.Flick(user.Flash(user.Static(Color.Transparent), user.Static(ColorMatrix.Chaos()), 1, 1), user.Static(Color.White), 10);
                var             impact      = user.Tile.GetAllNeighbors();
                SpriteReference chaosBall   = SpriteLoader.Instance.AddSprite("content/projectile_chaos");
                List <Creature> targets     = new List <Creature>();
                List <Tile>     targetTiles = new List <Tile>();
                int             emitTime    = 15;
                int             ballTime    = 5;
                foreach (var tile in impact)
                {
                    if (tile.Creatures.Any())
                    {
                        new ProjectileEmitter(user.World, () => user.VisualTarget, () => tile.VisualTarget, emitTime, (start, end) => new Ball(user.World, chaosBall, start, end, LerpHelper.Linear, ballTime));
                        targets.AddRange(tile.Creatures);
                        targetTiles.Add(tile);
                    }
                }
                if (targets.Any())
                {
                    yield return(user.WaitSome(emitTime + ballTime));
                }
                foreach (var blastTarget in targets)
                {
                    user.Attack(blastTarget, SkillUtil.SafeNormalize(blastTarget.VisualTarget - user.VisualTarget), ExplosionAttack);
                    EmitFlare(blastTarget, 10);
                }
                foreach (var targetTile in targetTiles)
                {
                    new FireExplosion(user.World, targetTile.VisualTarget, Vector2.Zero, 0, 12);
                }
                if (targets.Any())
                {
                    new ScreenShakeRandom(user.World, 5, 10, LerpHelper.Linear);
                    yield return(user.WaitSome(20));
                }
            }
        }
예제 #28
0
 public ParticleCinder(SceneGame world, SpriteReference sprite, Vector2 pos, Vector2 velocity, float driftSpeed, float velocityMax, float rotation, float scale, LerpHelper.Delegate scaleLerp, LerpHelper.Delegate angleLerp, int time) : base(world, time)
 {
     Sprite       = sprite;
     Position     = pos;
     Velocity     = velocity;
     VelocityMax  = velocityMax;
     Rotation     = rotation;
     Angle        = Random.NextFloat() * MathHelper.TwoPi;
     Scale        = scale;
     DriftSpeed   = driftSpeed;
     DriftAngle   = Random.NextFloat() * MathHelper.TwoPi;
     ScaleLerp    = scaleLerp;
     AngleLerp    = angleLerp;
     RandomOffset = Random.NextFloat();
 }
        internal static void Postfix(ref SpriteReference reference, ref Image image)
        {
            if (reference is null || image is null || reference.GUID is null)
            {
                return;
            }

            var guid = reference.GUID;

            if (ResourceHandler.GetSprite(guid) is Sprite spr)
            {
                spr.texture.mipMapBias = -1;
                image.SetSprite(spr);
            }
        }
예제 #30
0
        public override void DrawFrame(SceneGame scene, Vector2 pos, PoseData poseData, Facing facing, Matrix transform, Color color, ColorMatrix colorMatrix)
        {
            SpriteReference abyssalTendril = SpriteLoader.Instance.AddSprite("content/abyssal_tendril");

            var    mirror      = Microsoft.Xna.Framework.Graphics.SpriteEffects.None;
            Random rand        = new Random(this.GetHashCode());
            int    wiggleFrame = poseData.PoseFrame + rand.Next(100);

            bool tendrilDown     = IsTendrilDown(poseData.Pose);
            bool tendrilDownLast = IsTendrilDown(poseData.PoseLast);
            int  frameOffset     = 0;
            bool invisible       = poseData.Pose == CreaturePose.Walk;

            switch (poseData.Pose)
            {
            case (CreaturePose.Stand):
                frameOffset = 2 + (wiggleFrame / 10) % 4;
                break;

            case (CreaturePose.Attack):
                frameOffset = 2 + (wiggleFrame / 2) % 4;
                break;

            default:
                frameOffset = 2 + (wiggleFrame / 4) % 4;
                break;
            }

            if (tendrilDown != tendrilDownLast && poseData.PoseFrame < 5 + rand.Next(20))
            {
                frameOffset = 0 + (wiggleFrame / 10) % 2;
                invisible   = false;
            }

            if (invisible)
            {
                return;
            }

            scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (matrix, projection) =>
            {
                scene.SetupColorMatrix(Color * colorMatrix, transform * matrix, projection);
            });
            scene.DrawSprite(abyssalTendril, frameOffset, pos - new Vector2(0, 8), mirror, color, 0);
            scene.PopSpriteBatch();
        }
예제 #31
0
 public void CopyReference(PointToBrick copiedFrom, Sprite parent)
 {
     if (copiedFrom.pointedSpriteReference != null)
     pointedSpriteReference = copiedFrom.pointedSpriteReference.Copy(parent) as SpriteReference;
 }
예제 #32
0
 internal override void LoadFromXML(XElement xRoot)
 {
     if(xRoot.Element("pointedSprite") != null)
     pointedSpriteReference = new SpriteReference(xRoot.Element("pointedSprite"), sprite);
 }