NPC.UpdateSprite C# (CSharp) Method

UpdateSprite() public method

Updates the appearance of the NPC
public UpdateSprite ( ) : void
return void
    void UpdateSprite()
    {
        if (anim == null)
        {
            anim = GetComponentInChildren<Animator>();
        }
        //if (NPC_ID!=oldNPC_ID)
        //{
        //	currentState=-1;
        //	oldNPC_ID=NPC_ID;
        //}
        //Get the relative vector between the player and the npc.
        direction = GameWorldController.instance.playerUW.gameObject.transform.position - this.gameObject.transform.position;
        //Convert the direction into an angle.
        angle = Mathf.Atan2(direction.x,direction.z) * Mathf.Rad2Deg;

        //Get the relative compass heading of the NPC.
        currentHeading = CompassHeadings[ (int)Mathf.Round((  (this.gameObject.transform.eulerAngles.y % 360) / 45f)) ];

        //Get an animation index number for the angle
        facingIndex = facing(angle);

        //Check the facing index and the animation range to see if they have changed since the last update.
        if ((PreviousFacing!=facingIndex) && (AnimRange!=PreviousAnimRange))
        {
            PreviousFacing=facingIndex;
            PreviousAnimRange=AnimRange;
        }
        //Offset the compass heading by the players relative heading.
        CalcedFacing=facingIndex + currentHeading;
        if (CalcedFacing>=8)//Make sure it wrapps around correcly between 0 and 7 ->The compass headings.
        {
            CalcedFacing=CalcedFacing-8;
        }
        if (CalcedFacing<=-8)
        {
            CalcedFacing=CalcedFacing+8;
        }
        if (CalcedFacing<0)
        {
            CalcedFacing=8+CalcedFacing;
        }
        else if (CalcedFacing>7)
        {
            CalcedFacing=8-CalcedFacing;
        }

        //Calculate an animation index from the facing and the animation range.
                //0=front
                //1=frontright
                //7=frontleft

                CalcFacingForDebug=CalcedFacing;
                if (
                        ((AnimRange== AI_ANIM_ATTACK_BASH) && (!((CalcedFacing==0)||(CalcedFacing==1)||(CalcedFacing==7)) ))
                        ||
                        ((AnimRange== AI_ANIM_ATTACK_SLASH) && (!((CalcedFacing==0)||(CalcedFacing==1)||(CalcedFacing==7)) ))
                        ||
                        ((AnimRange== AI_ANIM_ATTACK_THRUST) &&  (!((CalcedFacing==0)||(CalcedFacing==1)||(CalcedFacing==7)) ))
                        ||
                        ((AnimRange== AI_ANIM_COMBAT_IDLE) && (!((CalcedFacing==0)||(CalcedFacing==1)||(CalcedFacing==7)) ))
                )
                {
                    CalcedFacing=(CalcedFacing+1)*1;//Use an idle animation if we can't see the attack
                }
                else
                {
                    CalcedFacing=(CalcedFacing+1)*AnimRange;
                }

        //play the calculated animation.
        switch (CalcedFacing)
        {
        case AI_ANIM_IDLE_FRONT:
        {
            playAnimation(NPC_ID +"_idle_front",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_FRONT_RIGHT:
        {
            playAnimation(NPC_ID +"_idle_front_right",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_RIGHT:
        {
            playAnimation(NPC_ID +"_idle_right",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_REAR_RIGHT:
        {
            playAnimation(NPC_ID +"_idle_rear_right",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_REAR:
        {
            playAnimation(NPC_ID +"_idle_rear",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_REAR_LEFT:
        {
            playAnimation(NPC_ID + "_idle_rear_left",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_LEFT:
        {
            playAnimation(NPC_ID +"_idle_left",CalcedFacing);
            break;
        }
        case AI_ANIM_IDLE_FRONT_LEFT:
        {
            playAnimation(NPC_ID +"_idle_front_left",CalcedFacing);
            break;
        }
        case AI_ANIM_WALKING_FRONT:
        {
            playAnimation(NPC_ID +"_walking_front",CalcedFacing);
            break;
        }
        case AI_ANIM_WALKING_FRONT_RIGHT:
        {
            playAnimation(NPC_ID + "_walking_front_right",CalcedFacing);
            break;
        }
        case AI_ANIM_WALKING_RIGHT:
        {
            playAnimation(NPC_ID + "_walking_right",CalcedFacing);
            break;
        }
        case AI_ANIM_WALKING_REAR_RIGHT:
        {
            playAnimation(NPC_ID +"_walking_rear_right",CalcedFacing);
            break;
        }
        case AI_ANIM_WALKING_REAR:
        {
            playAnimation(NPC_ID +"_walking_rear",CalcedFacing);
            break;
        }
        case  AI_ANIM_WALKING_REAR_LEFT:
        {
            playAnimation(NPC_ID +"_walking_rear_left",CalcedFacing);
            break;
        }
        case  AI_ANIM_WALKING_LEFT:
        {
            playAnimation(NPC_ID + "_walking_left",CalcedFacing);
            break;
        }
        case AI_ANIM_WALKING_FRONT_LEFT:
        {
            playAnimation(NPC_ID + "_walking_front_left",CalcedFacing);
            break;
        }
        default://special non angled states
        {
            switch(AnimRange)
            {
            case AI_ANIM_DEATH:
                playAnimation (NPC_ID +"_death",AI_ANIM_DEATH);break;
            case AI_ANIM_ATTACK_BASH:
                playAnimation (NPC_ID +"_attack_bash",AI_ANIM_ATTACK_BASH);break;
            case AI_ANIM_ATTACK_SLASH:
                playAnimation (NPC_ID +"_attack_slash",AI_ANIM_ATTACK_SLASH);break;
            case AI_ANIM_ATTACK_THRUST:
                playAnimation (NPC_ID +"_attack_thrust",AI_ANIM_ATTACK_THRUST);break;
            case AI_ANIM_COMBAT_IDLE:
                playAnimation (NPC_ID +"_combat_idle",AI_ANIM_COMBAT_IDLE);break;
            case AI_ANIM_ATTACK_SECONDARY:
                playAnimation (NPC_ID +"_attack_secondary",AI_ANIM_ATTACK_SECONDARY);break;
            }
        }
            break;
        }
    }