Wednesday, 6 November 2013

AI_Patrol script

using UnityEngine;
using System.Collections;
public class AI_Patrol : MonoBehaviour
{
 //-----------------------------------------------------------------------------
 #region public_vars
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

 public enum AIState { none, idle, walking, run }

 public float patrolSpeed = 2F;       // The nav mesh agent's speed when patrolling.
 public float patrolWaitTime = 1F;      // The amount of time to wait when the patrol way point is reached.

 public float patrolSpeedDamper = 5F;     // Patrol at 1/5th of animation speed

 public AIState currentAIState = AIState.none;

 public float speed = 0.5f;

 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 #endregion
 //-----------------------------------------------------------------------------

 //-----------------------------------------------------------------------------
 #region private_vars
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // constants

 private const float MIN_NAVAGENT_SPEED = 0.1F;
 private const float MAX_NAVAGENT_SPEED = 1.25F;
 private const float m_SpeedDampTime = .25f;
 private const float m_DirectionDampTime = .25f;

 private int   m_WayPointIndex = 0;

 private int maxWaypointIndex = 0;

 private NavMeshAgent nmaAI = null;
 private Animator animatorAI = null;

 private const float MIN_IDLE_TIME = 2;
 private const float MAX_IDLE_TIME = 8;


 private int currentWaypointIndex = 0;

 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 #endregion
 //-----------------------------------------------------------------------------

 //-----------------------------------------------------------------------------
 #region public_methods
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 #endregion
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 #region private_methods
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

 void Awake()
 {
  nmaAI = GetComponent<NavMeshAgent>();
 }

 //-----------------------------------------------------------------------------
 // Use this for initialization
 void Start ()
 {
  animatorAI = GetComponent<Animator>();

  StartCoroutine( Idle() );

 }

 void OnTriggerEnter( Collider hit)
 {
  Debug.Log("AI_Patrol: OnTriggerStay hit: "+hit.gameObject.tag);

  if( hit.gameObject.tag == "Enemy" )
  {
   Throw ( hit.gameObject );
  }
 }


 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 IEnumerator Idle()
 {
  currentAIState = AIState.idle;

  float randomIdleTime = Random.Range( MIN_IDLE_TIME, MAX_IDLE_TIME ) + Time.time;

  while( randomIdleTime > Time.time )
  {
   animatorAI.SetFloat("Speed",0 );
   nmaAI.speed = 0 ;
 
   yield return null;
  }
  
  StartCoroutine( Patrolling() );
 }

 //-----------------------------------------------------------------------------
 IEnumerator Patrolling ()
 {
  currentAIState = AIState.walking;

  // Set an appropriate speed for the NavMeshAgent.
  nmaAI.speed = Mathf.Clamp( animatorAI.GetFloat( "Speed" ) / patrolSpeedDamper, MIN_NAVAGENT_SPEED, MAX_NAVAGENT_SPEED );

  // Set the destination to a random patrolWayPoint.
  //nmaAI.destination = Waypoints.GetRandomWaypoint();

  nmaAI.destination = Waypoints.GetWaypoint(currentWaypointIndex);
  currentWaypointIndex++;

  bool endPatrol = false;
  
  // While not near the next waypoint or while there is a destination...
  while( !endPatrol )
  {
   if( Vector3.Distance( nmaAI.destination, animatorAI.rootPosition ) > nmaAI.stoppingDistance )
   {
    animatorAI.SetFloat( "Speed", MAX_NAVAGENT_SPEED,m_SpeedDampTime, Time.deltaTime );
  
    Vector3 curentDir = animatorAI.rootRotation * Vector3.forward;
    Vector3 wantedDir = ( nmaAI.destination - animatorAI.rootPosition ).normalized;

    if( Vector3.Dot( curentDir, wantedDir ) > 0 )
    {
     animatorAI.SetFloat( "Direction", Vector3.Cross(curentDir, wantedDir ).y, m_DirectionDampTime, Time.deltaTime );
    }
    else
    {
              animatorAI.SetFloat( "Direction", Vector3.Cross(curentDir, wantedDir ).y > 0 ? 1 : -1, m_DirectionDampTime, Time.deltaTime);
    }
    nmaAI.speed = Mathf.Clamp( animatorAI.GetFloat( "Speed" ) / patrolSpeedDamper, MIN_NAVAGENT_SPEED, MAX_NAVAGENT_SPEED );
   }
   else
   {
     endPatrol = true;
   }
 
 
   yield return null;
  }

  StartCoroutine( Idle() );
 }
 //-----------------------------------------------------------------------------
private bool throwing = false;

 public void Throw( GameObject hitObject )
 {
  if( !throwing )
  {
   StartCoroutine( AnimateThrow( hitObject ) );
  }
 }

 public float rotationDelta;

 IEnumerator AnimateThrow( GameObject hitObject )
 {
  if( !throwing )
  {
   throwing = true;
 
   animatorAI.SetBool( "Throw", true);
   yield return new WaitForEndOfFrame();
 
   AnimatorStateInfo stateInfo = animatorAI.GetCurrentAnimatorStateInfo( 0 );
 
   animatorAI.SetBool( "Throw", false);
    
      // transform.LookAt( hitObject.transform.position );
   bool rotating = true;
 
   float endOfThrowTime = stateInfo.length + Time.time;
   float step = speed * Time.deltaTime;
 
   while( rotating)
   {
  
    Vector3 targetDir = hitObject.transform.position - transform.position;
  
    Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, step, 0.0F);
  
    Debug.DrawRay(transform.position, newDir, Color.red);
  
    transform.rotation = Quaternion.LookRotation(newDir);
    
   
//    if(Mathf.Abs( (int) rotationDelta ) > 179 )
    if( endOfThrowTime < Time.time )
    {
     rotating = false;
    }
  
    yield return null;
  
   }
  
   transform.LookAt( hitObject.transform.position );
 
//   yield return new WaitForSeconds( stateInfo.length );
 
   throwing = false;
  }
 }


 //-----------------------------------------------------------------------------
 #endregion
 //-----------------------------------------------------------------------------




}

Update

Rescaled the unity file fixing the issue where the AI was moving extremely slowly.




Map
Drew a map of the building showing where the different rooms will be. At the present moment we haven't decided the path the player will go down.

Slaughterhouse concept
Painted over a Maya render to get the basic concept of the slaughterhouse done. The poster is meant to be an advertisement showing the humans having better quality of life than what they are living in which is often done with advertisements for animal products.  This didn't turn out well as a concept piece, I should of painted more into it and I'm not happy with the the shadows.

Tuesday, 5 November 2013

Tasks for the week

Check the trello board !!! (should be checking and updating  your progress on tasks everyday) and ticking off tasks once they've been done

Joe: Finish the concept art for the alien. The versions wearing suits and the versions with stomachs can be paintovers of previous concept pieces or sketches.


Toop: Complete weekly schedule and update presentation


Alice: Getting placeholder sounds to use in the graybox and finishing processing sketch


All three of us also need to write a personal statement (300 words)

Wednesday, 30 October 2013

Graybox

Early graybox test from start of the project


Changed the room layout and added placeholder objects, obstacles and lighting
Added in teddy bears as placeholder AI and added waypoints for them to patrol to
 I also changed the ambient light in the render settings to black to allow pitch darkness in the game.

Added a sphere with a point light inside it. Initially we had the issue of the sphere not illuminating despite being transparent and adding the halo effect to the point light though importing the image effects package and applying bloom to the main camera fixed this issue.
 
We had an issue with the bear running very slowly, this appears to be due to scaling issues because everything is scaled up. To fix this we will need to rescale the entire level, because this can't be done in one go this may take a while as objects will need to be reorganised.

Tuesday, 29 October 2013

Recent designs


This is a simple logo design that I created for my group "Barnpunk". It is going to also be used as a form of watermark for any concept or art work produced on this project and also for the loading screen with the gear moving behind it to give it the form of moving.


This is a front and side view of our alien creature (still haven't got a name for it) I drew this in the style of its most naked form so as to refer to when creating a 3D model. This will be easier to look at as it'll help me design the bone structure and to see what parts will move. We had a discussion about it being the final design but we had agreed that it should have a bit more clothing such as a space suit. Throughout the week I shall design up some ideas for a space suit idea using these images as the base structure of the anatomy.

Tuesday, 22 October 2013

This week (till monday 28th morning)

Toop: Continue concepting till end of October unless all is done. (complete 2-4)

Joe: Enemy development for presentation and test arm in graybox

Alice: Player coding (player health and player movement)


Once all concepts are done these can be made into assets starting 5th November at the latest.

For now we will use a small test environment and placeholder objects for assets in Unity

Front View and Side View of the alien

 

 
This is a front and side view of our alien concept; the top image shows more of the fleshy/muscular parts to the alien. The bottom image shows more to do with the skeleton structureand how it may stand in idle position. Note how the alien and chicken simularities include the big thighs, skull shape, and the posture of the ribcage.