Saturday, March 19, 2011

Week 11 - Assignment 10

var patrol:boolean = false;//
private var waiting:boolean = false;
var wait:boolean;
var waypoint:Transform[];//
var lastWayPoint:int;
var damping:float = 50;
private var targetPosition:Vector3;//
private var currentWayPoint:int = 0;//
private var startForce:float = 0.0;//
private var brakeForce:float = 2.0;//
private var accelerationForce:float =5.0;//
private var target:Transform;
private var idleHereTimer:int = 3;
private var player2 : GameObject;
private var enemyState = "String";
private var health= 100;
private var localChase =false;
private var firstX=Vector3(0.0, 0.0, 0.0);
private var lastPositionPlayer= Vector3(0.0, 0.0, 0.0);
private var returnTimer=0.0;
private var lookingTimer=0.0;
var dropItem:boolean = false;
var spawnDist:float= 0.0;
var itemDropped:GameObject;
//var distanceToGround=0.0;
var enemyLvl:int;// 0,1,2,3 determines amount of health an enemy has (0 is tutorial level)
var move:boolean = false;
var distFromTarget:Vector3;
var nxtLook:Vector3;
var forward:Vector3;
var enemyRot:Vector3;
var detectDistance : float; //Distance to the Player
private var dropped:boolean; // limits items dropped to 1

//what type of enemy is this?
var heavyMinion : boolean = false;
var mediumMinion : boolean = false;
var lightMinion : boolean = false;

var agressiveEnemy : boolean = true;
private var timer :float;// timer follows time.delta time
var attackTimer:int;// wait time between enemy attacks
private var canAttack:boolean = false;//no more being attacked
private var timeRec:int; // time to compare
//enemy damage arrays
var heavyMinionArr = new Array (8,12,20);
var mediumMinionArr = new Array (6,8,12);
var lightMinionArr = new Array (4,6,8);

//index's for generating random elements of an array
var heavyIndex : int;
var mediumIndex :int;
var lightIndex : int;

// temporary damage for enemies
private var damage:boolean;
private var hit:boolean;
function Start(){
switch(enemyLvl)
{
case 0:
health = 20;// 2 hit kill
break;
case 1:
health = 30;// 3 hit kill
break;
case 2:
health = 40;// 4 hit kill
break;
case 3:
health = 100; // boss 10 hit kill
break;
}
enemyState="idle";
player2 = GameObject.FindWithTag("Player");
//~ if(patrol == false)
//~ {
//~ enemyState = "idle";
//~ }
//~ else
//~ {
//~ enemyState = "patrol";
//~ }
firstX=transform.position;
}
function Update ()
{
// temps
if(damage)
{
health -= 10;
damage = false;
animation.Play("Med_knockback");
}
if(detectDistance < 2)
{
if(Input.GetButtonUp(Game_script.attack))
{
damage = true;
}
}
// above is temp
if(player2 == null)
{
player2 = Game_script.TheCharacter;
}
detectDistance = Vector3.Distance (player2.transform.position, transform.position);
heavyIndex = Random.Range(0,heavyMinionArr.length);
mediumIndex = Random.Range(0,heavyMinionArr.length);
lightIndex = Random.Range(0,heavyMinionArr.length);
//need to change to enemy collider ontrigger enter for hitting and animation
if (agressiveEnemy)
{
if (Game_script.playerStealthed == false)
{
if(detectDistance <= 5)
{
enemyState="chase";
}
}
if (localChase)
{
if(detectDistance >= 15)
{
startLooking();
}
}
if(move)
{
rigidbody.transform.Translate(3*Vector3.forward * Time.deltaTime);
//enemyRot = Vector3(player2.transform.position.z,transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, player2.transform.rotation, Time.deltaTime);
animation.Play("Med_walk");
}
if(enemyState=="idle"){
returnTimer=0.0;
move=false;
animation.Play("Med_idle");
}
if(enemyState == "patrol")
{
Patrolling();
}
if(enemyState == "chase"){
enemychase();
}
if(enemyState == "attackmode"){
enemyAttack();
}
if(localChase){
enemyState="chase";
}
if(enemyState=="looking"){
startLooking2();
}
if(enemyState=="confusion"){
startConfusion();
}
if(enemyState=="return"){
returnPosition();
}
if(returnTimer>=20){
enemyState="stuck";
stuck();
returnTimer=0.0;
}
if(lookingTimer>=10){
enemyState="return";
lookingTimer=0.0;
}
}
//reest position when player dies
if(Game_script.playerHealth<=0){
enemyState="return";
}
if(health <= 0) {
// may need to be health <= 0
enemyState="dead";
health=1;
Game_script.enemyDetectionLevel = 1;
Game_script.iSeeYou = false;
Player_Controls.enemyDead = true;
Death();
if(dropItem == true && dropped == false)
{
var tpos = transform.position;
var spawnPos = tpos + (Vector3(0, tpos.y - spawnDist , 0)); // can subtract 6 if we want object to hit ground
Instantiate(itemDropped, spawnPos, Quaternion.Euler(Vector3(0, 0, 270)));
dropped = true;
}
}
}
function Death(){
animation.Stop();
animation.Play("Med_death");
yield WaitForSeconds(1);
Destroy(gameObject);
}
function OnCollisionStay (collision : Collision) {
if (collision.gameObject.tag == "Player") {
enemyState="attackmode";
move=false;
}

}
function enemyAttack(){
transform.LookAt(player2.transform);
localChase=false;
move=false;

animation.Play("Med_attack1");

//localChase=true;
//enemyState="idle";
// need to change to interact with player weapon collider
//~ blocked out attack timer for now
//~ if(canAttack)
//~ {
//~ attackFunction();
//~ }
//~ else
//~ {
//~ timer += Time.deltaTime;
//~ if(timer > (timeRec + 5) - timer)
//~ {
//~ canAttack = true;
//~ }
//~ }
}
//~ blocked out attackFunction for now
//~ function attackFunction()
//~ {
//~ canAttack = false;
//~ timeRec = timer;
//~ if(heavyMinion)
//~ {
//~ Game_script.playerHealth -= heavyMinionArr[heavyIndex];
//~ switch(heavyIndex)
//~ {
//~ case 1:
//~ animation.Play("Heavy_attack1");
//~ break;
//~ case 2:
//~ animation.Play("Heavy_attack2");
//~ break;
//~ case 3:
//~ animation.Play("Heavy_attack3");
//~ break;
//~ }
//~ }
//~ else if(mediumMinion)
//~ {
//~ //Game_script.playerHealth -= mediumMinionArr[mediumIndex];
//~ switch(mediumIndex)
//~ {
//~ case 1:
//~ animation.Play("Med_attack1");
//~ break;
//~ case 2:
//~ animation.Play("Med_attack2");
//~ break;
//~ case 3:
//~ animation.Play("Med_attack3");
//~ break;
//~ }
//~ }
//~ else if(lightMinion)
//~ {
//~ Game_script.playerHealth -= lightMinionArr[lightIndex];
//~ switch(heavyIndex)
//~ {
//~ case 1:
//~ animation.Play("Heavy_attack1");
//~ break;
//~ case 2:
//~ animation.Play("Heavy_attack2");
//~ break;
//~ case 3:
//~ animation.Play("Heavy_attack3");
//~ break;
//~ }
//~ }
//~ }
function enemychase(){
transform.LookAt(player2.transform);
var dist =Vector3.Distance(player2.transform.position, transform.position);
if(dist<=2){
localChase=false;
enemyState="attackmode";
}
if (dist>=4){
move = true;
localChase =true;
}
}
function startLocalChase () {
localChase =true;
}
function startLooking(){
localChase = false;
lastPositionPlayer=player2.transform.position;
enemyState ="looking";
transform.LookAt(lastPositionPlayer);
}
function startLooking2(){
if(!localChase){
lookingTimer+= Time.deltaTime;
transform.LookAt(lastPositionPlayer);
move = true;
var dist =Vector3.Distance(lastPositionPlayer, transform.position);
if(dist<=2){
enemyState="confusion";
}
}
}
function startConfusion(){
if(!localChase){
lookingTimer=0.0;
move = false;
transform.Rotate(20*Vector3.down * Time.deltaTime);
yield WaitForSeconds(2);
enemyState="return";
}
}
function returnPosition(){
if(!localChase){
returnTimer+= Time.deltaTime;
transform.LookAt(firstX);
move = true;
var dist =Vector3.Distance(firstX, transform.position);
if(dist<=2){
enemyState="idle";
}
}
}
function stuck(){
move = false;
yield WaitForSeconds(2);
enemyState="idle";
}
function Assassination()
{
health = 0;
animation.Play("Med_assassination");
//placeholder
//yield WaitForSeconds(3);
if (!agressiveEnemy)
{
Game_script.enemyDetectionLevel = 1;
Game_script.iSeeYou = false;
Player_Controls.enemyDead = true;
}
Destroy(gameObject);
}
function Patrolling()
{
target = waypoint[currentWayPoint].transform;//
distFromTarget = target.position - transform.position;
nxtLook = target.position - transform.position;
var thisRotation = Quaternion.LookRotation(target.position - transform.position,Vector3.up);
if(move)
{
//transform.LookAt(Vector3(target.position.x, transform.position.y, target.position.z));
transform.rotation = Quaternion.Slerp(transform.rotation, thisRotation, Time.deltaTime * .3);
}
if(distFromTarget.magnitude <2.8)
{
move =false;
whatNext();
}
else
{
move = true;
}
}
function whatNext()
{
if(waiting)
{
//currentWayPoint = currentWayPoint;
//same
yield WaitForSeconds(idleHereTimer);
waiting = false;
}
else
{
NextWP();
if(wait)
{
waiting = true;
}
}
}
function NextWP()
{
switch(currentWayPoint)
{
case 0:
currentWayPoint = 1;
break;
case 1:
currentWayPoint = 2;
break;
case 2:
currentWayPoint = 3;
break;
case 3:
currentWayPoint = 4;
break;
case 4:
currentWayPoint = 5;
break;
default:
currentWayPoint = 0;
break;
}
if(currentWayPoint == lastWayPoint)
{
currentWayPoint = 0;
}
}

No comments:

Post a Comment