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;
}
}