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); }
public void Deactivate() { rb.isKinematic = true; col.enabled = false; state = KnifeState.NONE; KnifePool.Instance.ReturnKnife(gameObject); gameObject.SetActive(false); }
public void Throw() { if (state == KnifeState.ATTACHED || state == KnifeState.FLYING) { return; } state = KnifeState.FLYING; StartCoroutine(FlyToTarget()); }
// 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; }; }
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); } }
public void AttachToTarget() { transform.SetParent(GameManager.Instance.currentTarget.transform); state = KnifeState.ATTACHED; AttachedToTarget?.Invoke(); GameManager.Instance.IncreaseScore(); col.enabled = true; GetNextKnife(); }
private void SetState(KnifeState state) { if (m_state == state) { return; } m_state = state; if (stateChanged != null) { stateChanged(state); } }
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); }
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); }
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(); } }
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(); } }
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; }
// 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) { } }
//[Inject] KnifeManager knifeManager; // Use this for initialization void Start() { knifeMover = GetComponent <KnifeMover>(); knifeState = GetComponent <KnifeState>(); }
public virtual void PostKnifeStateChnaged(ILocalGame game, KnifeState knifeState) { }
public Knife() { m_def = new KnifeDef(); m_state = KnifeState.Freeze; }