Ejemplo n.º 1
0
        void ICmpInitializable.OnInit(Component.InitContext context)
        {
            if (context == InitContext.Activate)
            {
                // Retrieve eye object references and initialize it
                GameObject eyeObject = this.GameObj.ChildByName("Eye");
                this.eye = eyeObject != null?eyeObject.GetComponent <AnimSpriteRenderer>() : null;

                if (this.eye != null)
                {
                    this.eye.AnimLoopMode = AnimSpriteRenderer.LoopMode.FixedSingle;
                    this.eye.AnimDuration = 1.0f;
                    this.eye.AnimTime     = this.eyeOpenValue;
                }

                // Retrieve spike references
                GameObject[] spikeObj = new GameObject[4];
                spikeObj[0] = this.GameObj.ChildByName("SpikeTopRight");
                spikeObj[1] = this.GameObj.ChildByName("SpikeBottomRight");
                spikeObj[2] = this.GameObj.ChildByName("SpikeBottomLeft");
                spikeObj[3] = this.GameObj.ChildByName("SpikeTopLeft");
                this.spikes = new SpriteRenderer[spikeObj.Length];
                for (int i = 0; i < spikeObj.Length; i++)
                {
                    this.spikes[i] = spikeObj[i] != null ? spikeObj[i].GetComponent <SpriteRenderer>() : null;
                }
            }
        }
Ejemplo n.º 2
0
        void ICmpInitializable.OnInit(Component.InitContext context)
        {
            if (context == InitContext.Activate && DualityApp.ExecContext != DualityApp.ExecutionContext.Editor)
            {
                AnimSpriteRenderer r = this.GameObj.Renderer as AnimSpriteRenderer;
                SoundEmitter       s = this.GameObj.GetComponent <SoundEmitter>();
                Transform          t = this.GameObj.Transform;

                r.AnimDuration   = MathF.RoundToInt(0.4f * r.AnimDuration * MathF.Rnd.NextFloat(0.8f, 1.25f) * MathF.Sqrt(intensity));
                t.RelativeScale *= MathF.Sqrt(intensity);
                t.RelativeAngle  = MathF.Rnd.NextFloat(MathF.RadAngle360);
                t.RelativeVel    = new Vector3(MathF.Rnd.NextVector2(1.0f));

                ContentRef <Sound> soundRes = ContentRef <Sound> .Null;
                switch (MathF.Rnd.Next(5))
                {
                case 0: soundRes = GameRes.Data.Sound.Explo1_Sound; break;

                case 1: soundRes = GameRes.Data.Sound.Explo2_Sound; break;

                case 2: soundRes = GameRes.Data.Sound.Explo3_Sound; break;

                case 3: soundRes = GameRes.Data.Sound.Explo4_Sound; break;

                case 4: soundRes = GameRes.Data.Sound.Explo5_Sound; break;
                }
                SoundEmitter.Source source = new SoundEmitter.Source(soundRes, false);
                source.Volume = MathF.Rnd.NextFloat(0.9f, 1.15f) * MathF.Sqrt(intensity);
                source.Pitch  = MathF.Rnd.NextFloat(0.8f, 1.25f) / MathF.Sqrt(intensity);
                source.Paused = false;
                s.Sources.Add(source);
            }
        }
Ejemplo n.º 3
0
        public override bool Convert(ConvertOperation convert)
        {
            List <object>   results   = new List <object>();
            List <Material> availData = convert.Perform <Material>().ToList();

            // Generate objects
            foreach (Material mat in availData)
            {
                if (convert.IsObjectHandled(mat))
                {
                    continue;
                }
                Texture    mainTex = mat.MainTexture.Res;
                GameObject gameobj = convert.Result.OfType <GameObject>().FirstOrDefault();

                if (mainTex == null || mainTex.AnimFrames == 0)
                {
                    SpriteRenderer sprite = convert.Result.OfType <SpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null)
                    {
                        sprite = gameobj.GetComponent <SpriteRenderer>();
                    }
                    if (sprite == null)
                    {
                        sprite = new SpriteRenderer();
                    }
                    sprite.SharedMaterial = mat;
                    if (mainTex != null)
                    {
                        sprite.Rect = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight);
                    }
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }
                else
                {
                    AnimSpriteRenderer sprite = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null)
                    {
                        sprite = gameobj.GetComponent <AnimSpriteRenderer>();
                    }
                    if (sprite == null)
                    {
                        sprite = new AnimSpriteRenderer();
                    }
                    sprite.SharedMaterial = mat;
                    sprite.Rect           = Rect.AlignCenter(0.0f, 0.0f, mainTex.PixelWidth / mainTex.AnimCols, mainTex.PixelHeight / mainTex.AnimRows);
                    sprite.AnimDuration   = 5.0f;
                    sprite.AnimFrameCount = mainTex.AnimFrames;
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }

                convert.MarkObjectHandled(mat);
            }

            convert.AddResult(results);
            return(false);
        }
Ejemplo n.º 4
0
        public override bool Convert(ConvertOperation convert)
        {
            if (convert.Result.OfType <ICmpRenderer>().Any())
            {
                return(false);
            }
            List <object> results = new List <object>();
            List <AtlasViewer.TabItemInfo> availData = convert.Perform <AtlasViewer.TabItemInfo>().ToList();

            foreach (var sprite in availData)
            {
                GameObject         gameobj  = convert.Result.OfType <GameObject>().FirstOrDefault();
                AnimSpriteRenderer renderer = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault();

                if (renderer == null)
                {
                    renderer = new AnimSpriteRenderer();
                    if (sprite.Item.Indexes.Length > 1)
                    {
                        renderer.AnimDuration = (0.1f * sprite.Item.Indexes.Length);
                        renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.Loop;
                    }
                    else
                    {
                        renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.FixedSingle;
                    }

                    renderer.CustomFrameSequence = sprite.Item.Indexes.ToList();
                    var rect = sprite.Pixmap.Res.Atlas[sprite.Item.Indexes[0]];

                    renderer.Rect = new Rect(-rect.W / 2, -rect.H / 2, rect.W, rect.H);
                    var mat = this.FindMatchingResources <Pixmap, Material>(sprite.Pixmap.Res, (s, t) => t.MainTexture.Res?.BasePixmap == s).FirstOrDefault();
                    if (mat == null)
                    {
                        var tex = this.FindMatchingResources <Pixmap, Texture>(sprite.Pixmap.Res, (s, t) => t.BasePixmap == s).FirstOrDefault();
                        if (tex == null)
                        {
                            string texPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Texture>());
                            tex = new Texture(sprite.Pixmap);
                            tex.Save(texPath);
                        }
                        string matPath = PathHelper.GetFreePath(sprite.Pixmap.FullName, Resource.GetFileExtByType <Material>());
                        mat = new Material()
                        {
                            MainTexture = tex
                        };
                        mat.Save(matPath);
                    }
                    renderer.SharedMaterial = mat;
                    results.Add(renderer);
                }
                convert.SuggestResultName(renderer, sprite.Key.Replace('/', '_'));
                convert.MarkObjectHandled(sprite);
            }
            convert.AddResult(results);
            return(false);
        }
Ejemplo n.º 5
0
        public void OnInit(InitContext context)
        {
            if (context != InitContext.Activate)
            {
                return;
            }

            spriteRenderer = GameObj.GetComponent <AnimSpriteRenderer>();
        }
Ejemplo n.º 6
0
        void ICmpUpdatable.OnUpdate()
        {
            AnimSpriteRenderer r = this.GameObj.Renderer as AnimSpriteRenderer;
            SoundEmitter       s = this.GameObj.GetComponent <SoundEmitter>();

            if (!r.IsAnimationRunning && s.Sources.All(src => src.Instance == null || src.Instance.Disposed))
            {
                this.GameObj.DisposeLater();
            }
        }
Ejemplo n.º 7
0
        void ICmpInitializable.OnInit(InitContext context)
        {
            if (context == InitContext.Activate)
            {
                float posBrightness = 0.25f + 0.75f * (500.0f / MathF.Abs(this.GameObj.Transform.Pos.Z - 0.0f));

                AnimSpriteRenderer sprite = this.GameObj.GetComponent <AnimSpriteRenderer>();
                sprite.AnimTime  = MathF.Rnd.NextFloat(0.0f, sprite.AnimDuration);
                sprite.ColorTint = new ColorRgba(posBrightness);

                this.turnSpeed = MathF.Rnd.NextFloat(-0.01f, 0.01f);
                this.velocity  = new Vector3(MathF.Rnd.NextVector2(1.0f));
                this.GameObj.Transform.Scale = 1.0f + (this.GameObj.Transform.Pos.Z / 2000.0f);
            }
        }
Ejemplo n.º 8
0
        public static string GetRmlMarkup(this AnimSpriteRenderer renderer)
        {
            var tex = renderer?.SharedMaterial.Res?.MainTexture.Res;

            if (tex == null || tex.BasePixmap.Res == null)
            {
                return("");
            }
            var texPath = tex.Path;
            var atlas   = tex.BasePixmap.Res.Atlas;

            if (atlas == null || atlas.Count <= 0)
            {
                return($"<img source=\"{texPath}\" />");
            }
            var rect = atlas[0];

            return($"<img source=\"{texPath}\" coords=\"{rect.X}px, {rect.Y}px, {rect.RightX}px, {rect.BottomY}px\"/>");
        }
Ejemplo n.º 9
0
        public void OnInit(InitContext context)
        {
            if (Sound != null)
            {
                DualityApp.Sound.PlaySound(Sound);
            }

            if (Animation != null)
            {
                _renderer = GameObj.GetComponent <AnimSpriteRenderer>();

                _renderer.SharedMaterial = Animation;

                _renderer.AnimLoopMode = AnimSpriteRenderer.LoopMode.Once;

                _renderer.AnimFirstFrame = 1;

                _renderer.AnimFrameCount = 5;

                _renderer.AnimDuration = 2f;
            }
        }
Ejemplo n.º 10
0
        public override bool Convert(ConvertOperation convert)
        {
            // If we already have a renderer in the result set, consider generating
            // another one to be not the right course of action.
            if (convert.Result.OfType <ICmpRenderer>().Any())
            {
                return(false);
            }

            List <object>   results   = new List <object>();
            List <Material> availData = convert.Perform <Material>().ToList();

            // Generate objects
            foreach (Material mat in availData)
            {
                if (convert.IsObjectHandled(mat))
                {
                    continue;
                }
                Texture    mainTex    = mat.MainTexture.Res;
                Pixmap     basePixmap = (mainTex != null) ? mainTex.BasePixmap.Res : null;
                GameObject gameobj    = convert.Result.OfType <GameObject>().FirstOrDefault();

                if (mainTex == null || basePixmap == null || basePixmap.AnimFrames == 0)
                {
                    SpriteRenderer sprite = convert.Result.OfType <SpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null)
                    {
                        sprite = gameobj.GetComponent <SpriteRenderer>();
                    }
                    if (sprite == null)
                    {
                        sprite = new SpriteRenderer();
                    }
                    sprite.SharedMaterial = mat;
                    if (mainTex != null)
                    {
                        sprite.Rect = Rect.Align(Alignment.Center, 0.0f, 0.0f, mainTex.PixelWidth, mainTex.PixelHeight);
                    }
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }
                else
                {
                    AnimSpriteRenderer sprite = convert.Result.OfType <AnimSpriteRenderer>().FirstOrDefault();
                    if (sprite == null && gameobj != null)
                    {
                        sprite = gameobj.GetComponent <AnimSpriteRenderer>();
                    }
                    if (sprite == null)
                    {
                        sprite = new AnimSpriteRenderer();
                    }
                    sprite.SharedMaterial = mat;
                    sprite.Rect           = Rect.Align(Alignment.Center,
                                                       0.0f,
                                                       0.0f,
                                                       (mainTex.PixelWidth / basePixmap.AnimCols) - basePixmap.AnimFrameBorder * 2,
                                                       (mainTex.PixelHeight / basePixmap.AnimRows) - basePixmap.AnimFrameBorder * 2);
                    sprite.AnimDuration   = 5.0f;
                    sprite.AnimFrameCount = basePixmap.AnimFrames;
                    convert.SuggestResultName(sprite, mat.Name);
                    results.Add(sprite);
                }

                convert.MarkObjectHandled(mat);
            }

            convert.AddResult(results);
            return(false);
        }
Ejemplo n.º 11
0
        void ICmpUpdatable.OnUpdate()
        {
            RigidBody          body   = this.GameObj.RigidBody;
            AnimSpriteRenderer sprite = this.GameObj.GetComponent <AnimSpriteRenderer>();
            int maxSpeed = PlayerParty[0].Stats.Speed;

            if (DualityApp.Keyboard[Key.Left] && DualityApp.Keyboard[Key.Up])
            {
                body.LinearVelocity   = new Vector2((float)(maxSpeed * Math.Cos(Math.PI * 5 / 4)), (float)(maxSpeed * Math.Sin(Math.PI * 5 / 4)));
                sprite.AnimFirstFrame = 0;
                sprite.AnimPaused     = false;
            }
            else if (DualityApp.Keyboard[Key.Left] && DualityApp.Keyboard[Key.Down])
            {
                body.LinearVelocity   = new Vector2((float)(maxSpeed * Math.Cos(Math.PI * 3 / 4)), (float)(maxSpeed * Math.Sin(Math.PI * 3 / 4)));
                sprite.AnimFirstFrame = 0;
                sprite.AnimPaused     = false;
            }
            else if (DualityApp.Keyboard[Key.Right] && DualityApp.Keyboard[Key.Up])
            {
                body.LinearVelocity   = new Vector2((float)(maxSpeed * Math.Cos(Math.PI * 7 / 4)), (float)(maxSpeed * Math.Sin(Math.PI * 7 / 4)));
                sprite.AnimFirstFrame = 0;
                sprite.AnimPaused     = false;
            }
            else if (DualityApp.Keyboard[Key.Right] && DualityApp.Keyboard[Key.Down])
            {
                body.LinearVelocity   = new Vector2((float)(maxSpeed * Math.Cos(Math.PI / 4)), (float)(maxSpeed * Math.Sin(Math.PI / 4)));
                sprite.AnimFirstFrame = 0;
                sprite.AnimPaused     = false;
            }
            else
            {
                if (DualityApp.Keyboard[Key.Left])
                {
                    body.LinearVelocity   = new Vector2(-maxSpeed, 0);
                    sprite.AnimFirstFrame = 0;
                    sprite.AnimPaused     = false;
                }
                else if (DualityApp.Keyboard[Key.Right])
                {
                    body.LinearVelocity   = new Vector2(maxSpeed, 0);
                    sprite.AnimFirstFrame = 8;
                    sprite.AnimPaused     = false;
                }

                if (DualityApp.Keyboard[Key.Up])
                {
                    body.LinearVelocity   = new Vector2(0, -maxSpeed);
                    sprite.AnimFirstFrame = 16;
                    sprite.AnimPaused     = false;
                }
                else if (DualityApp.Keyboard[Key.Down])
                {
                    body.LinearVelocity   = new Vector2(0, maxSpeed);
                    sprite.AnimFirstFrame = 24;
                    sprite.AnimPaused     = false;
                }
            }

            if ((DualityApp.Keyboard.KeyReleased(Key.Down) || DualityApp.Keyboard.KeyReleased(Key.Up)) && (!(DualityApp.Keyboard.KeyPressed(Key.Down)) || !(DualityApp.Keyboard.KeyPressed(Key.Up))))
            {
                body.LinearVelocity = new Vector2(body.LinearVelocity.X, 0);
                sprite.AnimTime     = 0;
                sprite.AnimPaused   = true;
            }

            if ((DualityApp.Keyboard.KeyReleased(Key.Right) || DualityApp.Keyboard.KeyReleased(Key.Left)) && (!(DualityApp.Keyboard.KeyPressed(Key.Right)) || !(DualityApp.Keyboard.KeyPressed(Key.Left))))
            {
                body.LinearVelocity = body.LinearVelocity = new Vector2(0, body.LinearVelocity.Y);
                sprite.AnimTime     = 0;
                sprite.AnimPaused   = true;
            }
        }
Ejemplo n.º 12
0
        private int lastFrame;      // Keeps track of last frame rendered for smoother animation blending.

        void ICmpUpdatable.OnUpdate()
        {
            RigidBody          playerOne      = this.GameObj.RigidBody;
            Transform          playerMovement = this.GameObj.Transform;
            AnimSpriteRenderer playerSprite   = this.GameObj.GetComponent <AnimSpriteRenderer>();

            // Move left
            if (DualityApp.Keyboard[Key.Left])
            {
                vectorMove = Vector2.UnitX * -1.0f;
                playerMovement.MoveBy(vectorMove * Time.TimeMult);
            }

            // Move right
            else if (DualityApp.Keyboard[Key.Right])
            {
                vectorMove = Vector2.UnitX * 1.0f;
                playerMovement.MoveBy(vectorMove * Time.TimeMult);
            }

            // Move up
            else if (DualityApp.Keyboard[Key.Up])
            {
                vectorMove = Vector2.UnitY * -1.0f;
                playerMovement.MoveBy(vectorMove * Time.TimeMult);
            }

            // Move down
            else if (DualityApp.Keyboard[Key.Down])
            {
                vectorMove = Vector2.UnitY * 1.0f;
                playerMovement.MoveBy(vectorMove * Time.TimeMult);
            }

            // Punch Sequence
            else if (DualityApp.Keyboard[Key.S])
            {
                // Modify frame sequence to render punch sequence animation
                playerSprite.CustomFrameSequence = new List <int>()
                {
                    24, 25, 26, 33
                };
                playerSprite.AnimLoopMode = AnimSpriteRenderer.LoopMode.Loop;
                playerSprite.AnimDuration = 1;
                playerSprite.UpdateVisibleFrames();

                // Move toward current direction and display attack.
                playerMovement.MoveBy(vectorMove * Time.TimeMult);
            }

            // All custom frame sequences end in 27, the current default animation for the Goku SpriteSheet. Reset after an attack animation.
            if (playerSprite.CurrentFrame != lastFrame && playerSprite.CurrentFrame == 33)
            {
                playerSprite.CustomFrameSequence = new List <int>()
                {
                    33
                };
                playerSprite.AnimLoopMode = AnimSpriteRenderer.LoopMode.Once;
            }

            lastFrame = playerSprite.CurrentFrame;
        }