// Use this for initialization void Start() { GridUpdateSubscriber gus = GetComponent <GridUpdateSubscriber>(); GridMovementSubscriber gms = GetComponent <GridMovementSubscriber>(); gus.SetSubscriberMethod(new GridUpdateSubscriber.SubscriberDelegate(SubUpdate)); gms.SetMovementMethod(new GridMovementSubscriber.MovementMethod(SubMovement)); gms.SetAttackMethod(new GridMovementSubscriber.AttackMethod(SubAttack)); }
protected void Init() { // NOTE(clark, 2/8/2017): Added ec. Calling GetComponent takes a fair bit of time ec = GetComponent <EnemyComponent>(); GridUpdateSubscriber gus = GetComponent <GridUpdateSubscriber>(); GridMovementSubscriber gms = GetComponent <GridMovementSubscriber>(); gus.SetSubscriberMethod(new GridUpdateSubscriber.SubscriberDelegate(SubUpdate)); gms.SetMovementMethod(new GridMovementSubscriber.MovementMethod(SubMovement)); gms.SetAttackMethod(new GridMovementSubscriber.AttackMethod(SubAttack)); }
// Processed the current state. void ProcessState() { // Check for null case if (declaredMovement == Vector2.zero) { state = MoveStates.IDLE; } else { // Do a raycast to check for player and environment collision. // Shoot out a ray to check for a collision with the level layer. RaycastHit2D hit = Physics2D.Raycast( transform.position + (Vector3)declaredMovement, // origin Vector2.up, // direction! 0.1f, // Only check this cell unit on Grid LayerMask.GetMask("Level", "Player", "Enemies") ); // Hit something. if (hit.collider != null) { LayerMask mask = hit.collider.gameObject.layer; // Switch off the mask // Debug.Log(mask); // Player layer hit. if (mask == LayerMask.NameToLayer("Player")) { state = MoveStates.IDLE; } // Enemies layer hit else if (mask == LayerMask.NameToLayer("Enemies")) { Debug.Log("Hit an enemy"); GridMovementSubscriber t_gms = hit.collider.gameObject.GetComponent <GridMovementSubscriber>(); if (t_gms != null) { MoveStates t_state = t_gms.GetState(); // If it has not processed its mo // Force it to finish its movement. Recursive. if (t_state == MoveStates.NULL) { t_gms.Move(); ProcessState(); } // If it hits this, then we've gotten into a recursive loop. Time to end it. // Or it's just finished. Either way, it has already processed. else { state = MoveStates.IDLE; } } // Else the enemy doesn't move. Therefore I can't move. else { state = MoveStates.IDLE; } } // Level layer hit else if (mask == LayerMask.NameToLayer("Level")) { state = MoveStates.IDLE; } } else { state = MoveStates.MOVING; } } // Debug.Log(transform.name + ": State- " + state.ToString()); }