Esempio n. 1
0
        private IEnumerator TestAnimationRunnerBounds()
        {
            _spriteAnimator.ResetAnimation(_sprite);
            UpdateSpriteFrame();
            int noCam = 0;

            _spriteCollider = _renderer.GetComponent <SpriteCollider>();
            if (_spriteCollider != null)
            {
                _spriteCollider.OnCreate(null);
            }
            while (_spriteAnimator.Active)
            {
                if (!_looping)
                {
                    break;
                }
                if (Camera.current == null)
                {
                    yield return(null);

                    noCam++;
                    if (noCam > 500)
                    {
                        break;
                    }
                    continue;
                }
                Game.SpriteCamera = Camera.current;
                noCam             = 0;
                var orientation = SpriteFacingControl.GetCameraSide(_facing, transform, transform, 5, out var inMargin);
                _billboard.Apply(_renderer.transform, _backwards, ref _lastAngleHeight);
                if (_spriteAnimator.CheckFrameUpdate())
                {
                    UpdateSpriteFrame();
                }
                else if (_orientation != orientation && (!inMargin || (!orientation.IsAdjacent(_orientation))))
                {
                    _orientation = orientation;
                    UpdateSpriteFrame();
                }
                if (!_spriteAnimator.Active && _looping)
                {
                    _spriteAnimator.ResetAnimation(_sprite);
                }
                if (_spriteCollider != null)
                {
                    _spriteCollider.UpdateCollider();
                }
                yield return(null);
            }
        }
Esempio n. 2
0
        public void OnCreate(PrefabEntity entity)
        {
            MaterialPropertyBlock materialBlock = new MaterialPropertyBlock();

            _renderer.GetPropertyBlock(materialBlock);
            _spriteCollider = _renderer.GetComponent <SpriteCollider>();
            if (_sprite == null)
            {
                return;
            }
            _renderer.sprite = _sprite.GetSpriteFrame(0);
            materialBlock.SetTexture("_BumpMap", _sprite.NormalMap);
            materialBlock.SetTexture("_MainTex", _renderer.sprite.texture);
            _renderer.SetPropertyBlock(materialBlock);
            if (_spriteCollider != null)
            {
                _spriteCollider.UpdateCollider();
            }
        }
Esempio n. 3
0
        private void UpdateSpriteFrame()
        {
            var facing = _orientation;

            if (_facing.RequiresFlipping())
            {
                facing          = _orientation.GetFlippedSide();
                _renderer.flipX = _orientation.IsFlipped();
            }
            var sprite = _sprite.GetSpriteFrame(facing, _spriteAnimator.FrameIndex);

            if (sprite == null)
            {
                return;
            }
            _renderer.sprite = sprite;
            if (_spriteCollider != null)
            {
                _spriteCollider.UpdateCollider();
            }
        }
        private void UpdateSprite(int frameIdx)
        {
            var blockMaterial = new MaterialPropertyBlock();
            var sprite        = _animation.GetSprite(frameIdx);
            var width         = sprite.rect.width;
            var height        = sprite.rect.height;
            //var gridY = Mathf.FloorToInt(spriteData.Frame / spriteData.FrameGridX);
            //var gridX = spriteData.Frame % spriteData.FrameGridX;
            //var pixelCoordsX = gridX * width;
            //var pixelCoordsY = sprite.texture.height - ((gridY+1) * height);
            var   pixelCoordsX = sprite.rect.x;
            var   pixelCoordsY = sprite.rect.y;
            float uvWidth      = width / sprite.texture.width;
            float uvHeight     = height / sprite.texture.height;
            var   uvOffsetX    = pixelCoordsX / sprite.texture.width;
            var   uvOffsetY    = pixelCoordsY / sprite.texture.height;

            blockMaterial.SetVector(_shaderPropertyUv, new Vector4(uvWidth, uvHeight, uvOffsetX, uvOffsetY));
            blockMaterial.SetVector(_shaderPropertyColor, Color.white);
            blockMaterial.SetTexture(_shaderPropertyTexture, sprite.texture);
            blockMaterial.SetTexture(_shaderPropertyNormal, _animation.NormalMap);
            if (_animation.EmissiveMap != null)
            {
                _meshRenderer.sharedMaterial.EnableKeyword(_shaderEmissiveKeyword);
                blockMaterial.SetTexture(_shaderPropertyEmissive, _animation.EmissiveMap);
            }
            else
            {
                _meshRenderer.sharedMaterial.DisableKeyword(_shaderEmissiveKeyword);
            }
            _meshRenderer.SetPropertyBlock(blockMaterial);
            var frame         = _animation.GetFrame(frameIdx);
            var pixelsPerUnit = sprite.pixelsPerUnit;
            var size          = new Vector2(sprite.rect.width / pixelsPerUnit, sprite.rect.height / pixelsPerUnit);

            if (frame.HasEvent)
            {
                var center = _meshFilter.transform.TransformPoint(
                    Mathf.Lerp(
                        -(size.x * 0.5f), (size.x * 0.5f), frame.EventPosition.x), size.y * frame.EventPosition.y, 0);
                Debug.DrawRay(center, _meshFilter.transform.forward * 5, Color.red, 5f);
            }
            if (_meshFilter.sharedMesh == null)
            {
                _meshFilter.sharedMesh = ProceduralMeshUtility.GenerateQuad(size, new Vector2(0.5f, 0));
            }
            if (_vertices.Count == 0)
            {
                _meshFilter.sharedMesh.GetVertices(_vertices);
            }
            Resize(size);
            if (_spriteCollider != null)
            {
                var savedCollider = _animation.GetSpriteCollider(frameIdx);
                _spriteCollider.UpdateCollider(savedCollider);
                if (savedCollider != null)
                {
                    var center = _spriteCollider.transform.TransformPoint(Mathf.Lerp(-(size.x * 0.5f), (size.x * 0.5f), savedCollider
                                                                                     .CriticalRect.x), size.y * savedCollider.CriticalRect.y, 0);
                    var colliderSize = new Vector3(savedCollider.CriticalRect.size.x * size.x,
                                                   savedCollider.CriticalRect.size.y * size.y, 0.5f);
                    DebugExtension.DebugBounds(new Bounds(center, colliderSize), Color.red);
                }
            }
        }