import TNet;
//Var definition
public var swimming:boolean = false; //Can be triggert to slow down the movements (like when u swim)
public var moveStatus:String = "idle"; //movestatus for animations
//Movement speeds
var jumpSpeed:float = 8.0; //Jumpspeed / Jumpheight
var gravity:float = 20.0; //Gravity for jump
var runSpeed:float = 10.0; //Speed when the Character is running
var walkSpeed:float = 4.0; //Speed when the Character is walking (normal movement)
var rotateSpeed:float = 250.0; //Rotationspeed of the Character
var walkBackMod:float = 0.75; //Speed in Percent for walk backwards and sidewalk
//Internal vars to work with
private var speedMod:float = 0.0; //temp Var for Speedcalculation
private var grounded:boolean = false; //temp var if the character is grounded
private var moveDirection:Vector3 = Vector3.zero; //move direction of the Character
private var isWalking:boolean = false; //toggle var between move and run
private var jumping:boolean = false; //temp var for jumping
private var mouseSideButton:boolean = false; //temp var for mouse side buttons
private var pbuffer:float = 0.0; //Cooldownpuffer for SideButtons
private var coolDown:float = 0.5; //Cooldowntime for SideButtons
//ref
var refToPlayerStatus:Player_Status;
refToPlayerStatus=GetComponent(Player_Status);
//anims
var animClass:String;
var animCon:GameObject;
var deadRepAnim:boolean=false;
//Network
private var tno: TNObject;
function setAnimClass(){
switch(animClass)
{
case "goblin": animCon=GameObject.Find("mon_goblinWizard_");break;
case "orc": animCon=GameObject.Find("mon_orcWarrior_");break;
case "orge": animCon=GameObject.Find("mon_orgeHitter_");break;
case "trol": animCon=GameObject.Find("mon_trolCurer_");break;
default:animCon=GameObject.Find("mon_goblinWizard_");break;
}
}
function Start(){
setAnimClass();
tno=GetComponent(TNObject);
}
//Every Frame
function Update ()
{
if(tno.isMine){
//Set idel animation
moveStatus = "idle";
// Hold "Run" to run
isWalking = Input.GetAxis("Run") ? false : true;
// Only allow movement and jumps while grounded
if(grounded) {
//movedirection
moveDirection
= new Vector3
((Input
.GetMouseButton(1) ? Input
.GetAxis("Horizontal") : 0),
0,Input
.GetAxis("Vertical"));
//pushbuffer to avoid on/off flipping
if(pbuffer>0)
pbuffer -=Time.deltaTime;
if(pbuffer<0)pbuffer=0;
//Automove Sidebuttonmovement
/* if(Input.GetAxis("Toggle Move") && pbuffer == 0){
pbuffer=coolDown;
mouseSideButton = !mouseSideButton;
}
if(mouseSideButton && ((Input.GetAxis("Vertical") != 0) || Input.GetButton("Jump") || (Input.GetMouseButton(0) && Input.GetMouseButton(1)) ))
mouseSideButton = false;
*/
//L+R MouseButton Movement
if (Input.GetMouseButton(0) && Input.GetMouseButton(1) || mouseSideButton)
moveDirection.z += 1;
if (moveDirection.z > 1)
moveDirection.z = 1;
//Strafing move (like Q/E movement
// moveDirection.x -= Input.GetAxis("Strafing");
// if moving forward and to the side at the same time, compensate for distance
if(Input.GetMouseButton(1) && Input.GetAxis("Horizontal") && Input.GetAxis("Vertical")) {
moveDirection *= .7;
}
//Speedmodification / is moving forward or side/backward
speedMod = ((Input.GetAxis("Vertical") < 0) || (Input.GetMouseButton(1) && Input.GetAxis("Horizontal"))) ? walkBackMod : 1.0;
//Use run or walkspeed
moveDirection *= isWalking ? walkSpeed * speedMod : runSpeed * speedMod;
//reduce movement by 70% when swimming is toggled
moveDirection*= swimming ? 0.0 : 1;
// Jump!
if(Input.GetButton("Jump")){
jumping = true;
moveDirection.y = jumpSpeed;
}
//movestatus normal movement (for animations)
if((moveDirection.x == 0 ) && (moveDirection.z == 0))
moveStatus = "idle";
if(moveDirection.z > 0)
moveStatus = isWalking ? "walking" : "running";
if(moveDirection.z < 0)
moveStatus = isWalking ? "backwalking" : "backrunning";
if(moveDirection.x > 0)
moveStatus = isWalking ? "sidewalking_r" : "siderunning_r";
if(moveDirection.x < 0)
moveStatus = isWalking ? "sidewalking_l" : "siderunning_l";
//movestatus swim movement (for animations)
if(swimming){
if((moveDirection.x == 0 ) && (moveDirection.z == 0))
moveStatus = "swimidle";
if(moveDirection.z > 0)
moveStatus = isWalking ? "swim" : "swimfast";
if(moveDirection.z < 0)
moveStatus = isWalking ? "backswim" : "backswimfast";
if(moveDirection.x > 0)
moveStatus = isWalking ? "sideswim_r" : "sideswimfast_r";
if(moveDirection.x < 0)
moveStatus = isWalking ? "sidewswim_l" : "sideswimfast_l";
if(jumping)
moveStatus = "swimup";
}
//transform direction
moveDirection = transform.TransformDirection(moveDirection);
}
// Allow turning at anytime. Keep the character facing in the same direction as the Camera if the right mouse button is down.
if(Input.GetMouseButton(1)) {
transform.rotation = Quaternion.Euler(0,Camera.main.transform.eulerAngles.y,0);
} else {
transform.Rotate(0,Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime, 0);
}
//Apply gravity
moveDirection.y -= gravity * Time.deltaTime;
//Move controller
var controller:CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
grounded = (flags & CollisionFlags.Below) != 0;
//Reset jumping after landing
jumping = grounded ? false : jumping;
//movestatus jump/swimup (for animations)
if(jumping)
moveStatus = "jump";
if(jumping && swimming)
moveStatus = "swimup";
//health (for anyimations)
if(refToPlayerStatus.health<=0)
moveStatus = "dead";
else
deadRepAnim=false;
//playerActions
if(Input.GetButton("MeleeAttack")&& moveStatus!="melee_attack" && !animCon.animation.IsPlaying("Attack02"))
{
moveStatus="melee_attack";
meleeAttack();
}
//Send animations
tno.Send("PlayAnimation", Target.All,transform.position, transform.rotation, moveStatus);
}//tno.isMine
switch(moveStatus)
{
case "idle":
if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Idle")
;break;
case "jump":
// if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Idle");
break;
case "walking":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "running":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "sidewalking_r":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "siderunning_r":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "sidewalking_l":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "siderunning_l":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "backwalking":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "backrunning":
//if(!animCon.animation.IsPlaying("Attack02"))
animCon.animation.CrossFade("Run");
break;
case "melee_attack":
animCon.animation.Play("Attack02");
break;
case "dead":
if(deadRepAnim)
return;
Debug.Log("Dead anim");
animCon.animation.Play("Dead");
deadRepAnim=true;
break;
}
}
@RFC
function PlayAnimation(pos:Vector3, rot:Quaternion,animation:String){
transform.position=pos;
transform.rotation=rot;
moveStatus=animation;
}