Пример #1
0
        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;
            }
        }
Пример #2
0
        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());
        }
Пример #4
0
 /// <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));
 }
Пример #5
0
 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
 }
Пример #7
0
 /// <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));
 }
Пример #8
0
 /// <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);
 }
Пример #9
0
 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());
 }
Пример #10
0
        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;
            }
        }
Пример #11
0
 /// <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;
 }
Пример #12
0
 public void TalkTo(SimObject avatar, BotMentalAspect talkAbout)
 {
     ///  TODO find a better text representation (a thought bubble maybe?)
     TalkTo(avatar, "" + talkAbout);
 }
Пример #13
0
        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 void TalkTo(SimObject avatar, BotMentalAspect talkAbout)
 {
     ///  TODO find a better text representation (a thought bubble maybe?)
     TalkTo(avatar, "" + talkAbout);
 }