Esempio n. 1
0
    private void UpdateState(bool _aliveState)
    {
        visibleState = _aliveState;
        OnVisibilityChange(_aliveState);

        MonoBehaviour[] scripts   = GetComponentsInChildren <MonoBehaviour>(true);
        Collider2D[]    colliders = GetComponentsInChildren <Collider2D>();
        Renderer[]      renderers = GetComponentsInChildren <Renderer>(true);

        for (int i = 0; i < scripts.Length; i++)
        {
            if (CanBeDisabled(scripts[i]))
            {
                scripts[i].enabled = _aliveState;
            }
        }

        for (int i = 0; i < colliders.Length; i++)
        {
            colliders[i].enabled = _aliveState;
        }

        for (int i = 0; i < renderers.Length; i++)
        {
            SpriteRenderer sr = renderers[i] as SpriteRenderer;
            // Cast and check cast.
            // This is necessary because some renderers fail the cast.
            if (sr != null && !CanBeDisabled(sr))
            {
            }
            else
            {
                renderers[i].enabled = _aliveState;
            }
        }

        if (registerTile != null)
        {
            if (_aliveState)
            {
                registerTile.UpdatePositionClient();
                registerTile.UpdatePositionServer();
            }
            else
            {
                registerTile.UnregisterClient();
                registerTile.UnregisterServer();
            }
        }
    }
Esempio n. 2
0
    /// <summary>
    /// Essentially the Update loop
    /// </summary>
    /// <returns>true if transform changed</returns>
    private bool Synchronize()
    {
        if (!predictedState.Active)
        {
            return(false);
        }

        bool server = isServer;

        if (server && !serverState.Active)
        {
            return(false);
        }

        bool changed = false;

        if (IsFloatingClient)
        {
            changed &= CheckFloatingClient();
        }

        if (server)
        {
            changed &= CheckFloatingServer();
        }

        if (predictedState.Position != transform.localPosition)
        {
            Lerp();
            changed = true;
        }

        if (serverState.Position != serverLerpState.Position)
        {
            ServerLerp();
            changed = true;
        }

        if (predictedState.SpinFactor != 0)
        {
            transform.Rotate(Vector3.forward, Time.deltaTime * predictedState.Speed * predictedState.SpinFactor);
            changed = true;
        }

        //Checking if we should change matrix once per tile
        if (server && registerTile.PositionServer != Vector3Int.RoundToInt(serverState.Position))
        {
            CheckMatrixSwitch();
            registerTile.UpdatePositionServer();
            changed = true;
        }
        //Registering
        if (registerTile.PositionClient != Vector3Int.RoundToInt(predictedState.Position))
        {
//			Logger.LogTraceFormat(  "registerTile updating {0}->{1} ", Category.Transform, registerTile.WorldPositionC, Vector3Int.RoundToInt( predictedState.WorldPosition ) );
            registerTile.UpdatePositionClient();
            changed = true;
        }

        return(changed);
    }