public void UseAspect(BotMentalAspect someAspect) { try { if (someAspect is BotAction) { BotAction act = (BotAction)someAspect; act.InvokeReal(); return; } if (InDialogWith != null) { Actor.TalkTo(InDialogWith, someAspect); return; } if (someAspect is SimObject) { SimObject someObject = (SimObject)someAspect; DoBestUse(someObject); } } finally { //if (IsThinking) // CurrentAction = this; } }
private void Objects_OnUpdateSimObject(BotMentalAspect bma, string property, object value, object o) { return; SimObject ea = bma as SimObject; if (ea == null) { return; } string id = ea.ID.ToString(); addObjects.Start(); addObjects.Enqueue(new ThreadStart(() => { Invoke( new MethodInvoker( delegate() { lock (lstPrims.Items) { if (lstPrims.Items.ContainsKey(id)) { SimObject prim = lstPrims.Items[id].Tag as SimObject; lstPrims.Items[id].Text = GetObjectName(prim); } } if (currentPrim != null && ea.ID == currentPrim.ID) { UpdateCurrentObject(); } })); return; })); }
public override void InvokeReal() { SimActor TheBot = (SimActor)this.TheBot; TimeRemaining = rand.Next(1, 3); // one to tree cycles while (TimeRemaining-- > 0) { String use = TypeUsage.UsageName; TheBot.Approach(Victem, 5); TheBot.Debug(ToString()); CurrentTopic = TheBot.LastAction; TheBot.TalkTo(Victem, CurrentTopic); Thread.Sleep(8000); //User.ApplyUpdate(use, simObject); } BotNeeds CurrentNeeds = (BotNeeds)TheBot["CurrentNeeds"]; BotNeeds needsBefore = CurrentNeeds.Copy(); BotNeeds simNeeds = TypeUsage.ChangeActual; //TODO rate interaction CurrentNeeds.AddFrom(simNeeds); CurrentNeeds.SetRange(0.0F, 100.0F); BotNeeds difNeeds = CurrentNeeds.Minus(needsBefore); TheBot.Debug(ToString() + " => " + difNeeds.ShowNonZeroNeeds()); }
/// <summary> /// Triggers the OnUpdateDataAspect event. /// </summary> public virtual void SendOnUpdateDataAspect(BotMentalAspect ea, string property, object oldValue, object newValue) { if (!SendOnDataAspectUpdate) return; if (OnUpdateDataAspect != null) OnUpdateDataAspect(ea, property, oldValue, newValue); MetaDataQueue.Enqueue("SendOnUpdateDataAspect " + ea + "." + property + "=" + newValue, () => SendNewRegionEvent(SimEventType.DATA_UPDATE, property, ea)); }
public BotSocialAction(SimAvatar who, SimTypeUsage what, SimAvatar target) : base(what.UsageName + " " + target) { TheBot = (SimControllableAvatar) who; TypeUsage = what; Victem = target; CurrentTopic = null; TimeRemaining = rand.Next(1, 3); // one to tree cycles }
public BotSocialAction(SimAvatar who, SimTypeUsage what, SimAvatar target) : base(what.UsageName + " " + target) { TheBot = (SimControllableAvatar)who; TypeUsage = what; Victem = target; CurrentTopic = null; TimeRemaining = rand.Next(1, 3); // one to tree cycles }
/// <summary> /// Triggers the OnUpdateDataAspect event. /// </summary> public virtual void SendOnUpdateDataAspect(BotMentalAspect ea, string property, object oldValue, object newValue) { if (!SendOnDataAspectUpdate) { return; } if (OnUpdateDataAspect != null) { OnUpdateDataAspect(ea, property, oldValue, newValue); } MetaDataQueue.Enqueue("SendOnUpdateDataAspect " + ea + "." + property + "=" + newValue, () => SendNewRegionEvent(SimEventType.DATA_UPDATE, property, ea)); }
/// <summary> /// TODO Real Eval routine /// </summary> /// <param name="mostInteresting"></param> /// <param name="cAspect"></param> /// <returns></returns> public BotMentalAspect CompareTwo(BotMentalAspect mostInteresting, BotMentalAspect cAspect) { if ((mostInteresting is SimObject) && (cAspect is SimObject)) { int rate = CompareObjects((SimObject)mostInteresting, (SimObject)cAspect); if (rate > 0) { return(cAspect); } if (rate < 0) { return(mostInteresting); } } return((MyRandom.Next(1, 2) == 1) ? mostInteresting : cAspect); }
public void UseAspect(BotMentalAspect someAspect) { try { if (someAspect is BotAction) { BotAction act = (BotAction) someAspect; act.InvokeReal(); return; } if (InDialogWith != null) { Actor.TalkTo(InDialogWith, someAspect); return; } if (someAspect is SimObject) { SimObject someObject = (SimObject) someAspect; DoBestUse(someObject); } } finally { //if (IsThinking) // CurrentAction = this; } }
/// <summary> /// TODO Real Eval routine /// </summary> /// <param name="mostInteresting"></param> /// <param name="cAspect"></param> /// <returns></returns> public BotMentalAspect CompareTwo(BotMentalAspect mostInteresting, BotMentalAspect cAspect) { if ((mostInteresting is SimObject) && (cAspect is SimObject)) { int rate = CompareObjects((SimObject)mostInteresting, (SimObject)cAspect); if (rate > 0) return cAspect; if (rate < 0) return mostInteresting; } return (MyRandom.Next(1, 2) == 1) ? mostInteresting : cAspect; }
public void TalkTo(SimObject avatar, BotMentalAspect talkAbout) { /// TODO find a better text representation (a thought bubble maybe?) TalkTo(avatar, "" + talkAbout); }
private void Objects_OnUpdateSimObject(BotMentalAspect bma, string property, object value, object o) { return; SimObject ea = bma as SimObject; if (ea==null) return; string id = ea.ID.ToString(); addObjects.Start(); addObjects.Enqueue(new ThreadStart(() => { Invoke( new MethodInvoker( delegate() { lock (lstPrims.Items) { if (lstPrims.Items.ContainsKey(id)) { SimObject prim = lstPrims.Items[id].Tag as SimObject; lstPrims.Items[id].Text = GetObjectName(prim); } } if (currentPrim != null && ea.ID == currentPrim.ID) { UpdateCurrentObject(); } })); return; })); }