void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Player" || other.gameObject.tag == "Agent") { //double direction AnimalCharacter animalCharacter = other.gameObject.GetComponent <AnimalCharacter>(); //both sides if (this.owner.meetAnimalCharacter == null && animalCharacter.meetAnimalCharacter == null) { if ((!this.owner.bInActivity) && (!animalCharacter.bInActivity)) { Debug.Log("Tcone " + owner.name + "Animal Character meet another: " + other.gameObject.name); this.owner.meetAnimalCharacter = animalCharacter; animalCharacter.meetAnimalCharacter = this.owner; meetCharacterStayTime = 2 * owner.tradeWaitTime; } } //one side //if (this.owner.meetAnimalCharacter == null) //{ // this.owner.meetAnimalCharacter = animalCharacter; //} } }
// Start is called before the first frame update void Start() { StartCoroutine(ExecuteAfterTime(1f)); //init belief beliefList = new List <float>(); for (int i = 0; i < 3; i++) { beliefList.Add(UnityEngine.Random.Range(0f, 1f)); } IEnumerator ExecuteAfterTime(float time) { yield return(new WaitForSeconds(time)); animalCharacter = this.GetComponent <AnimalCharacter>(); //animalCharacter.navControl.TravelTo(appleTreeLocation); currentTaskIndex = 0; currentTask = taskList[currentTaskIndex]; // Code to execute after the delay canTakeAction = true; //init characterState = GetCharacterState(); } }
//Pick up object public void Pickup(AnimalCharacter animalCharacter) { //Debug.Log("APickupObject Pickup"); this.transform.position = animalCharacter.holdTransform.position; this.transform.parent = animalCharacter.holdTransform; animalCharacter.bHoldObject = true; animalCharacter.meetPickupObject = null; animalCharacter.holdObject = this; MakeStatic(); }
//Drop object public void Drop(AnimalCharacter animalCharacter) { MakeDynamic(); GetComponent <Rigidbody>().AddForce(animalCharacter.transform.forward * 10f); this.occupied = false; animalCharacter.bHoldObject = false; animalCharacter.holdObject = null; //Register affordance UIAffordance.RegisterObject(this.gameObject); }
public override void InitializeAgent() { //initialize location animalCharacter = GetComponent <AnimalCharacter>(); NUM_ITEM_TYPES = 3; NUM_TOOL_TYPES = 6; NUM_MEET_TYPES = 2; secondPerPeriod = 100; loopCount = 1; }
private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Player" || other.gameObject.tag == "Agent") { //Debug.Log("Ascenetool: " + this.toolName + " enters: " + other.gameObject.name); //Still have place if (animalCharacterNames.Count < maxCapacity) { AnimalCharacter animalCharacter = other.gameObject.GetComponent <AnimalCharacter>(); animalCharacterNames.Add(animalCharacter.characterName); animalCharacter.sceneTool = this; } } }
private void OnTriggerExit(Collider other) { if (other.gameObject.tag == "Player" || other.gameObject.tag == "Agent") { //Debug.Log("Ascenetool: " + this.toolName + " exits: " + other.gameObject.name); AnimalCharacter animalCharacter = other.gameObject.GetComponent <AnimalCharacter>(); animalCharacterNames.Remove(animalCharacter.characterName); if (ReferenceEquals(animalCharacter.sceneTool, this)) { animalCharacter.sceneTool = null; } } }
public override void Interact(AnimalCharacter animalCharacter) { //if have seed in hand plant seed if (animalCharacter.holdObject != null) { ASeed seed = animalCharacter.holdObject.GetComponent <APickupObject>() as ASeed; if (seed) { seed.Drop(animalCharacter); Plant(seed); } } animalCharacter.SetIdle(); }
private void OnTriggerExit(Collider other) { //if (other.gameObject.tag == "Player" || other.gameObject.tag == "Agent") if (other.gameObject.tag == "Vision") { //Debug.Log("APickupObject exits"); //A character/an agent leaves a pickup object AnimalCharacter animalCharacter = other.gameObject.GetComponent <TCone>().owner; if (ReferenceEquals(animalCharacter.meetPickupObject, this)) { animalCharacter.meetPickupObject = null; occupied = false; } } }
private void OnTriggerEnter(Collider other) { //if (other.gameObject.tag == "Player" || other.gameObject.tag == "Agent") if (other.gameObject.tag == "Vision") { //Debug.Log("APickupObject enters"); //A character/an agent sees a pickup object AnimalCharacter animalCharacter = other.gameObject.GetComponent <TCone>().owner; if (animalCharacter.meetPickupObject == null && !occupied) { animalCharacter.meetPickupObject = this; occupied = true; } } }
//Reset fluents for characters public void ResetAnimalCharacter() { //energy and full energy = 0.5f; fullness = 0.5f; //Set up start money money = 10f; this.transform.position = originalLocation; this.transform.rotation = Quaternion.identity; //Reset activity, animation and nevigation SetIdle(); meetAnimalCharacter = null; }
public override void Interact(AnimalCharacter animalCharacter) { animalCharacter.StopMove(); //Set Activity animalCharacter.currentActivity = EActivity.CollectFruit; animalCharacter.animator.SetInteger("animation", 3); //Action //Debug.Log("APond: Collect fish"); StartCoroutine(CollectFish()); IEnumerator CollectFish() { yield return(new WaitForSeconds(this.activityDuration)); animalCharacter.SetIdle(); //Collect Fruit if (fruitCount > 0) //still have fruit { foreach (Transform childTransform in transform) { APickupObject pickupObject = childTransform.GetComponent <APickupObject>(); if (pickupObject) { fruitCount--; //if character do not have object in hand if (!animalCharacter.bHoldObject) { pickupObject.Pickup(animalCharacter); } else //hold an object already, nothing happens { fruitCount++; //pickupObject.MakeDynamic(); //pickupObject.occupied = false; } break; } } } } }
public override void Interact(AnimalCharacter animalCharacter) { //Set Activity animalCharacter.currentActivity = EActivity.Sleep; animalCharacter.animator.SetInteger("animation", 5); animalCharacter.StopMove(); //Action //Debug.Log("AHouse: sleep"); StartCoroutine(SleepNow()); IEnumerator SleepNow() { yield return(new WaitForSeconds(activityDuration)); animalCharacter.SetIdle(); //Energy gain animalCharacter.energy = Mathf.Min(1f, animalCharacter.energy + 0.5f); } }
//Eat food public void Eat(AnimalCharacter animalCharacter) { animalCharacter.StopMove(); //Debug.Log("AFood(eat): " + this.objectType.ToString()); animalCharacter.currentActivity = EActivity.Eat; StartCoroutine(EatFood()); //Eat animation animalCharacter.animator.SetInteger("animation", 4); IEnumerator EatFood() { yield return(new WaitForSeconds(this.eatTime)); animalCharacter.SetIdle(); //Gain fullness animalCharacter.fullness = Mathf.Min(animalCharacter.fullness + fullGain, 1f); //Distroy this food UIAffordance.UnregisterObject(this.gameObject); Destroy(this.gameObject); } }
void OnTriggerExit(Collider other) { if (other.gameObject.tag == "Player" || other.gameObject.tag == "Agent") { //Debug.Log("Player Agent Tcone " + name + " Animal Character exit another : " + other.gameObject.name); AnimalCharacter animalCharacter = other.gameObject.GetComponent <AnimalCharacter>(); if ((owner.agreeCommunication || animalCharacter.agreeCommunication) && ReferenceEquals(this.owner.meetAnimalCharacter, animalCharacter)) { //if (ReferenceEquals(owner, owner.meetAnimalCharacter.meetAnimalCharacter)) { return; } } //both sides if (this.owner.meetAnimalCharacter && animalCharacter.meetAnimalCharacter) { //Debug.Log("Player Agent Tcone 2222" + name + " Animal Character exit another : " + other.gameObject.name); if (ReferenceEquals(this.owner.meetAnimalCharacter, animalCharacter) && ReferenceEquals(animalCharacter.meetAnimalCharacter, this.owner)) { Debug.Log("Tcone " + owner.name + " Animal Character exit another : " + other.gameObject.name); owner.meetAnimalCharacter = null; animalCharacter.meetAnimalCharacter = null; } } //one side //if (this.owner.meetAnimalCharacter) //{ // if (ReferenceEquals(this.owner.meetAnimalCharacter, animalCharacter)) // { // owner.meetAnimalCharacter = null; // } //} } }
public override void Interact(AnimalCharacter animalCharacter) { //Set Activity animalCharacter.currentActivity = EActivity.Cook; //NEED COOK ANIMATION !!!!!!!!!! animalCharacter.animator.SetInteger("animation", 5); animalCharacter.StopMove(); //Action //Debug.Log("ACampfire: Cook"); StartCoroutine(Cook()); IEnumerator Cook() { if (animalCharacter.holdObject != null) { AFood food = animalCharacter.holdObject as AFood; if (food && food.cookable) { Debug.Log("ACampfire Cook:" + food.objectType.ToString()); yield return(new WaitForSeconds(food.cookTime)); //After cook food.cookable = false; food.fullGain += 0.3f; //Change material //Color foodColor = food.gameObject.GetComponent<Renderer>().material.color; //food.gameObject.GetComponent<Renderer>().material.color = // new Color(foodColor.r / 2f, foodColor.g / 2f, foodColor.b / 2, foodColor.a); } } animalCharacter.SetIdle(); } }
//Group activity: trade public void Trade() { //stop StopMove(); meetAnimalCharacter.StopMove(); this.agreeCommunication = true; this.bInActivity = true; //meetAnimalCharacter.bInActivity = true; this.animator.SetInteger("animation", 0); this.currentActivity = EActivity.Trade; //if already in trade event if (meetAnimalCharacter.agreeCommunication) { return; } //Debug.LogError("Trade: " + name + " look at " + meetAnimalCharacter.name); //Wait another animalcharacter's response StartCoroutine(WaitTradeRequest(tradeWaitTime)); IEnumerator WaitTradeRequest(float waitTime) { float accumulatedWaitTime = 0f; while (accumulatedWaitTime < waitTime) { accumulatedWaitTime += Time.deltaTime; Debug.Log("Trade look at movement " + this.name + " : " + meetAnimalCharacter.name); this.transform.LookAt(meetAnimalCharacter.transform.position); meetAnimalCharacter.transform.LookAt(this.transform.position); if (meetAnimalCharacter.agreeCommunication) { break; } yield return(null); } //yield return new WaitForSeconds(.1f); //just for delay //if both two agents agree to trade if (this.agreeCommunication && meetAnimalCharacter.agreeCommunication) { Debug.Log("Animal Character !!!Trade!!!: " + this.name + " with " + meetAnimalCharacter.name); APickupObject myObject = this.holdObject; APickupObject hisObject = meetAnimalCharacter.holdObject; //Trade event if (myObject && hisObject) //case 1: exchange goods { //Debug.Log("Animal Character Trade case 1"); myObject.Drop(this); myObject.occupied = true; hisObject.Drop(meetAnimalCharacter); hisObject.occupied = true; myObject.Pickup(meetAnimalCharacter); hisObject.Pickup(this); } else if (myObject == null && hisObject == null) //case 2: nothing happens { //Debug.Log("Animal Character Trade case 2"); } else if (myObject != null && hisObject == null) //case 3: sell { //Debug.Log("Animal Character Trade case 3"); if (meetAnimalCharacter.money > myObject.price) { myObject.Drop(this); myObject.occupied = true; myObject.Pickup(meetAnimalCharacter); this.money += myObject.price; meetAnimalCharacter.money -= myObject.price; } } else if (myObject == null && hisObject != null) //case 4: buy { //Debug.Log("Animal Character Trade case 4"); if (this.money > hisObject.price) { hisObject.Drop(meetAnimalCharacter); hisObject.occupied = true; hisObject.Pickup(this); this.money -= hisObject.price; meetAnimalCharacter.money += hisObject.price; } } } else { //Debug.LogError("Animal Character No trade"); } if (meetAnimalCharacter) { meetAnimalCharacter.SetIdle(); meetAnimalCharacter.agreeCommunication = false; //Debug.LogError("Trade Complete 1"); meetAnimalCharacter.meetAnimalCharacter = null; meetAnimalCharacter = null; //Debug.LogError("Trade Complete 2"); } this.SetIdle(); this.agreeCommunication = false; } }
// Start is called before the first frame update void Start() { owner = this.transform.parent.GetComponent <AnimalCharacter>(); Debug.Log("Tcone: owner"); }
private void Start() { GameObject player = GameObject.FindWithTag("Player"); playerCharacter = player.GetComponent <AnimalCharacter>(); }
//Virtual Act Method: realize interaction between this scene tool and agent public virtual void Interact(AnimalCharacter animalCharacter) { throw new NotImplementedException(); }
public void DrawMap(AnimalCharacter animalCharacter, float visionRange = 40f) { CleanChild(); Vector3 characterPosition = animalCharacter.gameObject.transform.position; characterPosition.y = 0; for (int i = 0; i < affordanceObjectList.Count; ++i) { Vector3 objectPosition = affordanceObjectList[i].transform.position; objectPosition.y = 0; if (Vector3.Distance(characterPosition, objectPosition) < visionRange) { //Debug.Log("UIAffordance: " + affordanceObjectList[i].gameObject.name); GameObject affordanceObject = Instantiate(affordanceObjectPrefab, this.transform); //Set UI UIAffordanceObject affordanceUI = affordanceObject.GetComponent <UIAffordanceObject>(); string objectName; string conditionText; string affordanceText; if (affordanceObjectList[i].GetComponent <ASceneTool>()) { objectName = affordanceObjectList[i].GetComponent <ASceneTool>().toolType.ToString(); ASceneTool sceneTool = affordanceObjectList[i].GetComponent <ASceneTool>(); conditionText = sceneTool.animalCharacterNames.Count < sceneTool.maxCapacity ? "(Available)" : ReferenceEquals(animalCharacter.sceneTool, sceneTool) ? "(In)" : "(Occupied)"; affordanceText = sceneTool.animalCharacterNames.Count < sceneTool.maxCapacity ? "[" + sceneTool.activityType.ToString() + "]" : "[None]"; affordanceUI.ChangeNameText(objectName); affordanceUI.ChangeConditionText(conditionText); affordanceUI.ChangeAffordanceText(affordanceText); } else //if (affordanceObjectList[i].GetComponent<APickupObject>()) { APickupObject pickupObject = affordanceObjectList[i].GetComponent <APickupObject>(); objectName = pickupObject.objectType.ToString(); affordanceUI.ChangeNameText(objectName); conditionText = pickupObject.occupied ? "(Occupied)" : ReferenceEquals(animalCharacter.holdObject, pickupObject) ? "(owned)" : "(Available)"; string descriptionText = ""; if (pickupObject as AFood) { descriptionText += " Eatable"; } if (pickupObject as ASeed) { descriptionText += " Plantable"; } affordanceUI.ChangeConditionText(conditionText); affordanceUI.ChangeAffordanceText("[" + descriptionText + "]"); } affordanceUI.ChangeBackGroudColor(AffordanceColor[objectName]); //Draw rectangle RectTransform rt = affordanceUI.gameObject.GetComponent <RectTransform>(); Vector2 offsets = -rt.offsetMax + rt.offsetMin; float offset_x = (objectPosition.x - characterPosition.x) * 4 + rt.rect.width; float offset_y = (-objectPosition.z + characterPosition.z) * 2 + rt.rect.height; //Debug.Log("Affordance rt size: " + rt.rect.width + " " + rt.rect.height); rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, offset_x, AffordanceSize[objectName].x); rt.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, offset_y, AffordanceSize[objectName].y); ////Draw line //GameObject LineImage = Instantiate(lineImage, this.transform); //RectTransform imageRectTransform = LineImage.GetComponent<RectTransform>(); //Vector2 differenceVector = new Vector2(offset_x, offset_y); ////imageRectTransform.sizeDelta = new Vector2(differenceVector.magnitude, 10f); //imageRectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, offset_x, differenceVector.magnitude); //imageRectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, offset_y, 10f); //imageRectTransform.pivot = new Vector2(0, 0.5f); //imageRectTransform.position = new Vector2(300f, 300f); //float angle = Mathf.Atan2(differenceVector.y, differenceVector.x) * Mathf.Rad2Deg; //imageRectTransform.rotation = Quaternion.Euler(0, 0, angle); } } }