コード例 #1
0
ファイル: Knife.cs プロジェクト: JohnTen/Mind-over-Blade-Demo
    public bool Withdraw()
    {
        if (state == KnifeState.InSheath || actionTimer > 0 || returning)
        {
            return(false);
        }

        returning   = true;
        actionTimer = actionDelay;

        transform.parent = null;
        state            = KnifeState.Flying;

        if (hittedEnemy != null)
        {
            var dir = (sheath.transform.position - transform.position).normalized;
            hittedEnemy.Hit(dir, 0.8f);
            hittedEnemy.AddForce(dir * dragForce);
        }

        basicAttack = AttackPackage.CreateNewPackage();
        hittedEnemy = null;
        Returning();

        return(true);
    }
コード例 #2
0
ファイル: Knife.cs プロジェクト: FelipeDermann/KnifeHitClone
 public void Deactivate()
 {
     rb.isKinematic = true;
     col.enabled    = false;
     state          = KnifeState.NONE;
     KnifePool.Instance.ReturnKnife(gameObject);
     gameObject.SetActive(false);
 }
コード例 #3
0
ファイル: Knife.cs プロジェクト: FelipeDermann/KnifeHitClone
    public void Throw()
    {
        if (state == KnifeState.ATTACHED || state == KnifeState.FLYING)
        {
            return;
        }
        state = KnifeState.FLYING;

        StartCoroutine(FlyToTarget());
    }
コード例 #4
0
ファイル: Knife.cs プロジェクト: ly774508966/UnitySDK-1
    // Use this for initialization
    void Awake()
    {
        head = transform.Find("head").GetComponent <FollowForce> ();

        head.followForceSpingMax += delegate() {
            Debug.Log("Pin:head.followForceSpingMax");

            head.ClearTargetVertex();
            state = KnifeState.Out;
        };
    }
コード例 #5
0
        private void OnKnifeStateChanged(KnifeState obj)
        {
            for (int i = 0; i < m_behaviours.Length; i++)
            {
                m_behaviours[i].PostKnifeStateChnaged(this, obj);
            }

            if (stateChanged != null)
            {
                stateChanged(obj);
            }
        }
コード例 #6
0
ファイル: Knife.cs プロジェクト: FelipeDermann/KnifeHitClone
    public void AttachToTarget()
    {
        transform.SetParent(GameManager.Instance.currentTarget.transform);
        state = KnifeState.ATTACHED;
        AttachedToTarget?.Invoke();

        GameManager.Instance.IncreaseScore();

        col.enabled = true;

        GetNextKnife();
    }
コード例 #7
0
ファイル: Knife.cs プロジェクト: yabloko9393/FlipTheKnife
        private void SetState(KnifeState state)
        {
            if (m_state == state)
            {
                return;
            }

            m_state = state;

            if (stateChanged != null)
            {
                stateChanged(state);
            }
        }
コード例 #8
0
ファイル: Knife.cs プロジェクト: JohnTen/Mind-over-Blade-Demo
    public bool Launch(Vector3 direction, bool isPiercing = false)
    {
        if (state != KnifeState.InSheath)
        {
            return(false);
        }

        piercing    = isPiercing;
        actionTimer = actionDelay;
        state       = KnifeState.Flying;

        transform.position = sheath.LaunchPosition.position;
        transform.right    = direction;

        basicAttack = AttackPackage.CreateNewPackage();

        return(true);
    }
コード例 #9
0
ファイル: Knife.cs プロジェクト: JohnTen/Mind-over-Blade-Demo
    public bool Hover()
    {
        if (hovered ||
            returning ||
            state != KnifeState.Flying ||
            actionTimer > 0)
        {
            return(false);
        }

        piercing    = false;
        hovered     = true;
        actionTimer = actionDelay;
        state       = KnifeState.Hover;

        basicAttack = AttackPackage.CreateNewPackage();

        return(true);
    }
コード例 #10
0
ファイル: Knife.cs プロジェクト: JohnTen/Mind-over-Blade-Demo
    private void Flying()
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.right, speed * Time.deltaTime);

        transform.position += transform.right * speed * Time.deltaTime;
        traveledDistance   += speed * Time.deltaTime;

        if (hit.collider != null)
        {
            print(hit.collider.name);
            var attackable = hit.collider.GetComponent <IAttackable>();

            if (hit.collider.tag == "Climable")
            {
                StuckedOnClimbable = true;
                state = KnifeState.Stuck;
                transform.position = (Vector3)hit.point + transform.right * sinkingLength;
                return;
            }
            else if (hit.collider.tag == "Player")
            {
            }
            else if (attackable != null)
            {
                print("Enemy fly");
                var attack = Process(basicAttack);
                attack._fromDirection = hit.collider.transform.position - transform.position;
                RaiseOnHitEvent(attackable, attackable.ReceiveAttack(ref attack), attack);
            }
            else
            {
                transform.position = hit.point;
                Hover();
                return;
            }
        }

        if (traveledDistance >= hoveringDistance)
        {
            Hover();
        }
    }
コード例 #11
0
 void HandleKnifeStateChange(ThrowingKnife knife, KnifeState previousState, KnifeState currentState)
 {
     if (currentState == KnifeState.InSheath && previousState == KnifeState.Returning)
     {
         int    i = Random.Range(0, 4);
         string j = i.ToString();
         knifeAudioSource.clip   = _audios["Equip" + j];
         knifeAudioSource.volume = _volume["Equip" + j];
         knifeAudioSource.pitch  = _pitch["Equip" + j];
         knifeAudioSource.Play();
     }
     if (currentState == KnifeState.Flying)
     {
         int    i = Random.Range(0, 4);
         string j = i.ToString();
         knifeAudioSource.clip   = _audios["Throw" + j];
         knifeAudioSource.volume = _volume["Throw" + j];
         knifeAudioSource.pitch  = _pitch["Throw" + j];
         knifeAudioSource.Play();
     }
 }
コード例 #12
0
ファイル: Knife.cs プロジェクト: JohnTen/Mind-over-Blade-Demo
    private void Returning()
    {
        var dir = sheath.transform.position - transform.position;

        if (dir.sqrMagnitude <= backDistance * backDistance)
        {
            sheath.PutBackKnife(this);
            state = KnifeState.InSheath;

            hoverTimer         = 0;
            returning          = false;
            changedDirection   = false;
            hovered            = false;
            StuckedOnClimbable = false;
            traveledDistance   = 0;
            return;
        }

        transform.right = dir;

        Debug.DrawRay(transform.position, transform.right * speed * Time.deltaTime, Color.red);

        RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.right, speed * Time.deltaTime);

        if (hit.collider != null)
        {
            var attackable = hit.collider.GetComponent <IAttackable>();

            if (attackable != null)
            {
                print("Enemy return");
                var attack = Process(basicAttack);
                attack._fromDirection = hit.collider.transform.position - transform.position;
                RaiseOnHitEvent(attackable, attackable.ReceiveAttack(ref attack), attack);
            }
        }

        transform.position += transform.right * speed * Time.deltaTime;
    }
コード例 #13
0
ファイル: Knife.cs プロジェクト: ly774508966/UnitySDK-1
    // Update is called once per frame
    void FixedUpdate()
    {
        if (state == KnifeState.Out)
        {
            // 碰撞检测接触质点,进行穿刺
            float dot = Vector3.Dot(head.transform.forward, head.LastMoveDir);
            if (dot <= 0)
            {
                return;
            }
            if (FindVertexToDeformer())
            {
                state = KnifeState.Deformer;
            }
        }
        else if (state == KnifeState.Deformer)
        {
            float dot = Vector3.Dot(head.transform.forward, head.LastMoveDir);
            if (dot > 0)
            {
                return;
            }

            if (ReturnToOut())
            {
                state = KnifeState.Out;
            }
        }
        else if (state == KnifeState.Puncture)
        {
            // 正在进行穿刺
        }
        else if (state == KnifeState.Pass)
        {
        }
    }
コード例 #14
0
ファイル: KnifeProvider.cs プロジェクト: uiby/Game_Hit
    //[Inject] KnifeManager knifeManager;

    // Use this for initialization
    void Start()
    {
        knifeMover = GetComponent <KnifeMover>();
        knifeState = GetComponent <KnifeState>();
    }
コード例 #15
0
 public virtual void PostKnifeStateChnaged(ILocalGame game, KnifeState knifeState)
 {
 }
コード例 #16
0
ファイル: Knife.cs プロジェクト: yabloko9393/FlipTheKnife
 public Knife()
 {
     m_def   = new KnifeDef();
     m_state = KnifeState.Freeze;
 }