コード例 #1
0
    public virtual void RenderUpdate(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        if (world != null)
        {
            FSprite sprite = spriteLeaser.sprites[0];

            if (element != null)
            {
                sprite.isVisible = true;
                sprite.element   = element;
            }
            else
            {
                sprite.isVisible = false;
            }
            sprite.SetPosition(camera.GetScreenPosition(worldPosition) + _positionOffset);
            sprite.rotation = _rotation;
            sprite.scaleX   = scale.x;
            sprite.scaleY   = scale.y;
            if (doesFlip)
            {
                sprite.scaleX *= (camera.GetFlipXByViewAngle(viewAngle) ? -1f : 1f);
            }
            sprite.sortZ = camera.GetSortZ(worldPosition) + sortZOffset;
            sprite.color = color; // new Color(worldPosition.x, worldPosition.y, worldPosition.z);
        }
        else
        {
            spriteLeaser.Erase();
        }
    }
コード例 #2
0
    public void AddRenderer(IRenderer renderer)
    {
        SpriteLeaser spriteLeaser = new SpriteLeaser(this, renderer);

        renderer.OnInitializeSprite(spriteLeaser, this);

        _spriteLeasers.Add(spriteLeaser);
    }
コード例 #3
0
    public virtual void OnInitializeSprite(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        FSprite sprite = new FSprite(element == null ? Futile.whiteElement : element);

        sprite.shader = shader;

        spriteLeaser.sprites.Add(sprite);
    }
コード例 #4
0
    public override void OnInitializeSprite(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        if (_sprites == null)
        {
            LoadSprites();
        }

        base.OnInitializeSprite(spriteLeaser, camera);
    }
コード例 #5
0
    public void UpdateTileRender(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        while (_tilesQueue.Count > 0)
        {
            Tile tile = _tilesQueue.Dequeue();

            if (tile != null)
            {
                bool showing = false;

                if (tile.block.sprite != null)
                {
                    if (GetTileShowing(tile))
                    {
                        showing = true;
                    }
                }

                int index = _drawTiles.IndexOf(tile);

                if (showing)
                {
                    FSprite sprite;

                    if (index < 0)
                    {
                        sprite        = new FSprite(tile.block.sprite);
                        sprite.shader = _shader;

                        _drawTiles.Add(tile);
                        spriteLeaser.sprites.Add(sprite);
                    }
                    else
                    {
                        sprite         = spriteLeaser.sprites[index];
                        sprite.element = tile.block.sprite;
                    }

                    SetSpriteByTile(sprite, tile, camera, true);
                }
                else
                {
                    if (index < 0)
                    {
                        continue;
                    }

                    _drawTiles.RemoveAt(index);

                    spriteLeaser.sprites[index].RemoveFromContainer();
                    spriteLeaser.sprites.RemoveAt(index);
                }
            }
        }
    }
コード例 #6
0
    private void InitializeRenderer()
    {
        do
        {
            IRenderer renderer = _renderersQueue.Peek();

            if (renderer != null)
            {
                SpriteLeaser spriteLeaser = new SpriteLeaser(this, renderer);
                renderer.OnInitializeSprite(spriteLeaser, this);

                _spriteLeasers.Add(spriteLeaser);
            }
            _renderersQueue.Dequeue();
        } while (_renderersQueue.Count > 0);
    }
コード例 #7
0
    public void RenderUpdate(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        bool inRange = ((_chunk.coordination + Vector2.one * 0.5f) * Chunk.Length - new Vector2(_chunk.world.player.worldPosition.x, _chunk.world.player.worldPosition.z)).sqrMagnitude < 1024f;

        if (_showing && !inRange)
        {
            spriteLeaser.RemoveFromContainer();
            _showing = false;
        }
        else if (!_showing && inRange)
        {
            _showing = true;
        }

        if (_showing)
        {
            UpdateTileRender(spriteLeaser, camera);

            for (int index = 0; index < _drawTiles.Count; index++)
            {
                Tile    tile   = _drawTiles[index];
                FSprite sprite = spriteLeaser.sprites[index];

                // if (camera.turning)
                SetSpriteByTile(sprite, tile, camera, true);

                bool inScreenRect = spriteLeaser.InScreenRect(sprite);

                if (sprite.container != null && !inScreenRect)
                {
                    sprite.RemoveFromContainer();
                }
                else if (sprite.container == null && inScreenRect)
                {
                    camera.worldContainer.AddChild(sprite);
                }
            }
        }
    }
コード例 #8
0
    public void GraphicUpdate(float deltaTime)
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            TurnViewDirection(false);
        }
        else if (Input.GetKeyDown(KeyCode.E))
        {
            TurnViewDirection(true);
        }

        viewAngle = Mathf.LerpAngle(_lastViewAngle, GetAngle(_viewDirection), CustomMath.Curve(1f - _turn, -3f));
        _turn    -= deltaTime;

        _shake = Mathf.Lerp(_shake, 0f, deltaTime * 10f);

        if (_cameraTarget != null)
        {
            _targetPosition = Vector3.Lerp(_targetPosition, _cameraTarget.worldPosition, deltaTime * 10f);
        }
        Vector2 cameraPosition = -GetScreenPosition(_targetPosition) + Random.insideUnitCircle * _shake;

        worldContainer.SetPosition(cameraPosition);

        while (_renderersQueue.Count > 0)
        {
            IRenderer renderer = _renderersQueue.Peek();

            if (renderer != null)
            {
                SpriteLeaser spriteLeaser = new SpriteLeaser(this, renderer);
                renderer.OnInitializeSprite(spriteLeaser, this);

                _spriteLeasers.Add(spriteLeaser);
            }
            _renderersQueue.Dequeue();
        }

        for (int index = 0; index < _spriteLeasers.Count; index++)
        {
            _spriteLeasers[index].GraphicUpdate();

            if (_spriteLeasers[index].removeInNextFrame)
            {
                _spriteLeasers[index].RemoveFromContainer();
                _spriteLeasers.RemoveAt(index);
                index--;
            }
        }

        Color skyColor = new Color(0.35f, 0.85f, 0.97f); // Color.Lerp(new Color(0.35f, 0.85f, 0.97f), Color.black, Mathf.Sin(Time.time * 0.1f) * 0.5f + 0.5f);

        Shader.SetGlobalVector("_CameraPosition", _targetPosition);
        Shader.SetGlobalVector("_SkyColor", skyColor);

        _worldMicrophone.worldPosition = _targetPosition;
        _worldMicrophone.viewAngle     = _viewAngle;

        _worldMicrophone.Update(deltaTime);

        _worldCameraUI.Update(deltaTime);
    }
コード例 #9
0
 public virtual bool GetShownByCamera(SpriteLeaser spriteLeaser, WorldCamera camera)
 {
     return(spriteLeaser.InScreenRect(spriteLeaser.sprites[0]));
 }
コード例 #10
0
    public override void RenderUpdate(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        base.RenderUpdate(spriteLeaser, camera);

        spriteLeaser.sprites[0].element = camera.GetFlipZByViewAngle(viewAngle) ? _flipedAtlasElement : element;
    }
コード例 #11
0
 public override void RenderUpdate(SpriteLeaser spriteLeaser, WorldCamera camera)
 {
     base.RenderUpdate(spriteLeaser, camera);
 }
コード例 #12
0
 public bool GetShownByCamera(SpriteLeaser spriteLeaser, WorldCamera camera)
 {
     return(false);
 }
コード例 #13
0
    public void OnInitializeSprite(SpriteLeaser spriteLeaser, WorldCamera camera)
    {
        _initialized = true;

        UpdateTileRender(spriteLeaser, camera);
    }