예제 #1
0
    public void Detained()
    {
        var bodyguard = PlayerEntity.Instance.GetBodyguard();

        if (bodyguard == null)
        {
            SoundManager.Instance.PlaySound("Ban");
            return;
        }

        if (m_Slot != null)
        {
            m_Slot.m_Actor = null;
            m_Slot         = null;
        }

        // play sound
        SoundManager.Instance.PlaySound("Detain");

        // disable colliders
        foreach (var collider in GetComponentsInChildren <Collider2D>())
        {
            collider.enabled = false;
        }

        PlayerEntity.Instance.m_BoardActors.Remove(this);
        PlayerEntity.Instance.m_ReserveActors.Remove(this);

        var closestDetainedBounds =
            Vector3.Distance(PlayerEntity.Instance.m_ZoneDetaindLeft.ClosestPoint(transform.position), transform.position)
            < Vector3.Distance(PlayerEntity.Instance.m_ZoneDetaindRight.ClosestPoint(transform.position), transform.position)
                ? PlayerEntity.Instance.m_ZoneDetaindLeft
                : PlayerEntity.Instance.m_ZoneDetaindRight;

        // play move animation
        m_DetainedTween.MovePosition = UnityRandom.BoundPoint(closestDetainedBounds);
        m_DetainedTween
        .Start()
        .setDelay(bodyguard.Detain(this, out var model))
        .setOnStart(() =>
        {
            // link model
            model.transform.SetParent(transform, false);
            model.transform.localPosition = UnityRandom.Vector2(PlayerEntity.Instance.m_PositionRandomization).WithY(-0.1f);
        })
        .setOnComplete(() =>
        {
            Destroy(model);
            Destroy(gameObject);
        });
    }
예제 #2
0
    public void Leave()
    {
        if (m_Slot != null)
        {
            m_Slot.m_Actor = null;
            m_Slot         = null;
        }

        PlayerEntity.Instance.m_BoardActors.Remove(this);
        PlayerEntity.Instance.m_ReserveActors.Remove(this);

        m_LeaveTween.MovePosition = UnityRandom.BoundPoint(PlayerEntity.Instance.m_ZoneLeave);
        m_LeaveTween
        .Start()
        .setOnComplete(() =>
        {
            Destroy(gameObject);
        });
    }
예제 #3
0
    //////////////////////////////////////////////////////////////////////////
    private void Awake()
    {
        m_ModelModifier   = GetComponentInChildren <ModelModifier>();
        m_TargetRow       = Mathf.Clamp(m_TargetRow, 0, Grid.Instance.m_Column - 1);
        m_Behavior        = GetComponent <BehaviorBase>();
        m_Behavior.Master = this;
        m_Behavior.iInit();

        transform.position = UnityRandom.BoundPoint(PlayerEntity.Instance.m_ZoneSpawn);

        // restore moves
        m_MovesLeft = m_MaxMoves;

        // add to reserve
        PlayerEntity.Instance.m_ReserveActors.Add(this);
        // increase danger level
        PlayerEntity.Instance.m_CurrentDangers += m_DangerLevel;
        // increase visitors count
        PlayerEntity.Instance.m_CurrentVisitors++;
    }