コード例 #1
0
    void setupScenario()
    {
        /* Specify the global time step of the simulation. */
        RVO.Simulator.Instance.setTimeStep(m_step);

        /*
         * Specify the default parameters for agents that are subsequently
         * added.
         */
        RVO.Simulator.Instance.setAgentDefaults(15.0f, 10, 10.0f, 10.0f, 1.5f, 2.0f, new RVO.Vector2(0.0f, 0.0f));

        /*
         * Add agents, specifying their start position, and store their
         * goals on the opposite side of the environment.
         */
        GameObject prefab = Resources.Load("agent") as GameObject;

        for (int i = 0; i < 250; ++i)
        {
            RVO.Simulator.Instance.addAgent(200.0f *
                                            new RVO.Vector2((float)Math.Cos(i * 2.0f * Math.PI / 250.0f),
                                                            (float)Math.Sin(i * 2.0f * Math.PI / 250.0f)));
            m_goals.Add(-RVO.Simulator.Instance.getAgentPosition(i));

            GameObject go = GameObject.Instantiate(prefab) as GameObject;
            go.name = "agent" + i;
            Agent1 agent = go.AddComponent <Agent1>();
            agent.Init(i);
        }
    }
コード例 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Comienza la demo");
            Agent1 ag1 = new Agent1();
            Agent2 ag2 = new Agent2();

            Task tsk  = ag1.Run();
            Task tsk2 = ag2.Run();


            Message msg1 = new Message()
            {
                Count   = 5.0M,
                Incremt = 2.0M,
                Price   = 4.0M,
                Text    = "Manzanas"
            };

            Message msg2 = new Message()
            {
                Count   = 3.0M,
                Incremt = 4.0M,
                Price   = 3.5M,
                Text    = "Naranjas"
            };

            ag1.Input.Enqueue(msg1);
            ag2.Input.Enqueue(msg1);
            ag1.Input.Enqueue(msg2);
            ag2.Input.Enqueue(msg2);

            Console.WriteLine("Fin de la demo");

            Console.ReadKey();
        }
コード例 #3
0
        public void RegisterAgent(Agent1 agent)
        {
            var agentPath = GetObjectPathForLocalObject(agent);

            _system.Register(agentPath, agent);
            AgentManager.RegisterAgent(agentPath, "KeyboardDisplay");
        }
コード例 #4
0
    public static bool DoRangeDamage(Agent1 agent, Transform arrowTransform, float damage, float hitMomentum)
    {
        foreach (var target in Game1.Instance.AgentMgr.agents)
        {
            if (agent == target)
            {
                continue;
            }

            if (target.BlackBoard.invulnerable)
            {
                continue;
            }

            Vector3 pos1 = arrowTransform.position;
            pos1.y = 0;
            Vector3 pos2 = target.Transform.position;
            pos2.y = 0;

            if ((pos1 - pos2).sqrMagnitude < 0.4 * 0.4f)
            {
                ReceiveDamage(target, agent, WeaponType.BOW, damage, hitMomentum);
                return(true);
            }
        }

        return(false);
    }
コード例 #5
0
    public override void OnEnter()
    {
        _attacker            = Agent.BlackBoard.Attacker;
        _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount;
        _damageResultType    = Agent.BlackBoard.damageResultType;

        SendEvent();
    }
コード例 #6
0
 public override void Reset()
 {
     base.Reset();
     attacker   = null;
     fromWeapon = WeaponType.NONE;
     impuls     = Vector3.zero;
     lyingTime  = 0;
 }
コード例 #7
0
 static void ReceiveImpuls(Agent1 agent, Agent1 attacker, Vector3 impuls)
 {
     agent.BlackBoard.Attacker       = attacker;
     agent.BlackBoard.attackerWeapon = WeaponType.NONE;
     agent.BlackBoard.impuls         = impuls;
     agent.BlackBoard.damageType     = attacker.BlackBoard.FaceToOtherBack(agent) ? DamageType.BACK : DamageType.FRONT;
     agent.Decision.OnInjury();
 }
コード例 #8
0
 public override void Reset()
 {
     base.Reset();
     attacker   = null;
     fromWeapon = WeaponType.NONE;
     damageType = DamageType.NONE;
     impuls     = Vector3.zero;
 }
コード例 #9
0
    public virtual Vector3 GetBestAttackStart(Agent1 target)
    {
        Vector3 dirToTarget = target.Position - Agent.Position;

        dirToTarget.Normalize();

        return(target.Position - dirToTarget * Agent.BlackBoard.weaponRange);
    }
コード例 #10
0
ファイル: ArrowMgr.cs プロジェクト: ysguoqiang/samurai
    public void Spawn(Agent1 agent, Vector3 pos, Vector3 dir, float damage, float speed, float hitMomentum)
    {
        Arrow arrow = Arrow.pools.Get();

        arrow.Init(agent, _arrowPrefab, pos, dir, damage, speed, hitMomentum);
        _arrows.Add(arrow);
        arrow.Show();
    }
コード例 #11
0
 public override void Reset()
 {
     base.Reset();
     finalPosition = Vector3.zero;
     moveType      = MoveType.NONE;
     motionType    = MotionType.NONE;
     target        = null;
 }
コード例 #12
0
 public override void Reset()
 {
     base.Reset();
     target          = null;
     attackDir       = Vector3.zero;
     attackPhaseDone = false;
     animAttackData  = null;
 }
コード例 #13
0
 public override void OnTauntBegin(Agent1 agent)
 {
     _oriPosBeforeShake = Game1.Instance.world.position;
     _shakeCoroutine    = TransformTools.Instance.Shake(Game1.Instance.world, Vector3.one, 0.8f, 0, 10f, 0.2f);
     if (agent.particleSystemTauntTust)
     {
         ParticleTools.Instance.Play(agent.particleSystemTauntTust, 0, 0.8f);
     }
 }
コード例 #14
0
 public override void Reset()
 {
     base.Reset();
     totalMoveDistance   = 0;
     minDistanceToTarget = 0;
     moveType            = MoveType.NONE;
     motionType          = MotionType.WALK;
     target = null;
 }
コード例 #15
0
    public override void OnEnter()
    {
        _injuryPhrase        = 0;
        _attacker            = Agent.BlackBoard.Attacker;
        _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount;
        _damageResultType    = Agent.BlackBoard.damageResultType;
        _startTrailTimer     = 0;

        SendEvent();
    }
コード例 #16
0
 public override void Reset()
 {
     base.Reset();
     _eventInjury         = null;
     _eventKnockDown      = null;
     _eventDeath          = null;
     _attacker            = null;
     _attackerRepeatCount = 0;
     _damageResultType    = DamageResultType.NONE;
 }
コード例 #17
0
    static void ReceiveHitCompletelyBlocked(Agent1 agent, Agent1 attacker)
    {
        //CombatEffectMgr.Instance.PlayBlockHitEffect(agent.ChestPosition, -attacker.Forward);
        ParticleComponent.Instance.Play(ParticleType.BLOCK_SUCCESS, agent.ChestPosition, -attacker.Forward);

        /*BlackBoard.Berserk += BlackBoard.BerserkBlockModificator;
         * BlackBoard.Rage += BlackBoard.RageBlockModificator;
         * if (attacker.IsPlayer)
         *  Game.Instance.NumberOfBlockedHits++;*/
    }
コード例 #18
0
    public virtual Agent1 SelectTarget(float distanceRange, List <Agent1> agents)
    {
        Agent1 ret    = null;
        float  maxVal = -1;

        for (int i = 0; i < agents.Count; i++)
        {
            float  val   = 0;
            Agent1 agent = agents[i];

            if (agent.group == Agent.group || agent == Agent)
            {
                continue;
            }

            if (agent.BlackBoard.IsAlive == false)
            {
                continue;
            }

            Vector3 dirToTarget = (agent.Position - Agent.Position);
            float   distance    = dirToTarget.magnitude;
            dirToTarget.Normalize();

            if (distance > distanceRange)
            {
                continue;
            }

            // 当前目标
            if (agent == Agent.BlackBoard.desiredTarget)
            {
                val += 0.1f;
            }

            // 面对的敌人
            float angle = Vector3.Angle(dirToTarget, Agent.Forward);
            val += 0.2f - ((angle / 180.0f) * 0.2f);

            // 当前目标方向的敌人
            angle = Vector3.Angle(dirToTarget, Agent.BlackBoard.desiredDirection);
            val  += 0.5f - ((angle / 180.0f) * 0.5f);

            // 距离近的
            val += 0.2f - ((distance / 5) * 0.2f);

            if (val > maxVal)
            {
                maxVal = val;
                ret    = agent;
            }
        }

        return(ret);
    }
コード例 #19
0
    static void ReceiveBlockedHit(Agent1 agent, Agent1 attacker, WeaponType byWeapon,
                                  float damage, AnimAttackData data)
    {
        agent.BlackBoard.Attacker       = attacker;
        agent.BlackBoard.attackerWeapon = byWeapon;
        //_goapMgr.WorldState.SetWSProperty(WorldStatePropKey.EVENT, EventTypes.BLOCK_BROKEN);

        bool fromBehind = Vector3.Dot(attacker.Forward, agent.Forward) > -0.1f;

        if (fromBehind)
        {
            //agent.BlackBoard.blockResult = BlockResult.FAIL;
            ReceiveDamage(agent, attacker, byWeapon, damage, data.hitMomentum);// block失败(扣血)
            //agent.BlackBoard.health = Mathf.Max(1, agent.BlackBoard.health - damage);
            //agent.BlackBoard.damageType = DamageType.BACK;
            //CombatEffectMgr.Instance.PlayBloodEffect(agent.Transform.position, -attacker.Forward);
            ParticleComponent.Instance.Play(ParticleType.BLOOD_AND_HIT_BLINK, agent.Transform.position, -attacker.Forward);;
            //SpriteEffectsManager.Instance.CreateBlood(Transform);
            SpriteComponent.Instance.CreateSprite(SpriteType.BLOOD,
                                                  new Vector3(agent.transform.localPosition.x, agent.transform.localPosition.y + 0.5f,
                                                              agent.transform.localPosition.z),
                                                  new Vector3(90, Random.Range(0, 180), 0));
        }
        else
        {
            // 如果满足破防几率
            if (Random.Range(0, 100) < agent.BlackBoard.breakBlockChance)
            {
                // block失败(但不扣血)
                //agent.BlackBoard.blockResult = BlockResult.FAIL;
                AnimFSMEventBreakBlock eventBreakBlock = AnimFSMEventBreakBlock.pool.Get();
                eventBreakBlock.attacker       = attacker;
                eventBreakBlock.attackerWeapon = byWeapon;
                eventBreakBlock.success        = false;
                agent.FSMComponent.SendEvent(eventBreakBlock);
                //if (attacker.isPlayer)
                //  Game.Instance.NumberOfBreakBlocks++;
                //CombatEffectsManager.Instance.PlayBlockBreakEffect(Transform.position, -attacker.Forward);
            }
            else
            {
                // block成功
                //agent.BlackBoard.blockResult = BlockResult.SUCCESS;
                AnimFSMEventBreakBlock eventBreakBlock = AnimFSMEventBreakBlock.pool.Get();
                eventBreakBlock.attacker       = attacker;
                eventBreakBlock.attackerWeapon = byWeapon;
                eventBreakBlock.success        = true;
                agent.FSMComponent.SendEvent(eventBreakBlock);
                //if (attacker.isPlayer)
                //  Game.Instance.NumberOfBlockedHits++;
                //CombatEffectMgr.Instance.PlayBlockHitEffect(agent.ChestPosition, -attacker.Forward);
                ParticleComponent.Instance.Play(ParticleType.BLOCK_SUCCESS, agent.ChestPosition, -attacker.Forward);
            }
        }
    }
コード例 #20
0
 public override void Reset()
 {
     base.Reset();
     _injuryPhrase        = 0;
     _eventInjury         = null;
     _eventDeath          = null;
     _eventAttack         = null;
     _attacker            = null;
     _attackerRepeatCount = 0;
     _damageResultType    = DamageResultType.NONE;
     _startTrailTimer     = 0;
 }
コード例 #21
0
ファイル: Controls.cs プロジェクト: BurgheleaDragos/BANLogic
        public override bool Equals(object obj)
        {
            var controls = obj as Controls;

            if (controls == null)
            {
                return(false);
            }
            return(Agent1 != null && Agent1.Equals(controls.Agent1) &&
                   (Message != null && controls.Message == Message ||
                    controls.Formula != null && controls.Formula.Equals(Formula)));
        }
コード例 #22
0
    Vector3 GetDestination(Agent1 target)
    {
        if (target == null)
        {
            return(Vector3.zero);
        }
        Vector3 dirToTarget = target.Position - Agent.Position;

        dirToTarget.Normalize();

        return(target.Position - dirToTarget * range);
    }
コード例 #23
0
        public override bool Equals(object obj)
        {
            var receive = obj as Receives;

            if (receive == null)
            {
                return(false);
            }
            return(Agent1.Equals(receive.Agent1) &&
                   (Formula != null && Formula.Equals(receive.Formula) ||
                    Message != null && Message.Equals(receive.Message, StringComparison.InvariantCultureIgnoreCase)));
        }
コード例 #24
0
ファイル: HandleTrail.cs プロジェクト: ysguoqiang/samurai
    public static void ShowTrail(Agent1 agent, AnimAttackData data, float trailTime)
    {
        if (agent.BlackBoard.showMotionEffect == false || data.trail == null)
        {
            return;
        }

        data.trailParenTrans.position = agent.Transform.position + Vector3.up * 0.15f;
        data.trailParenTrans.rotation = Quaternion.AngleAxis(agent.Transform.rotation.eulerAngles.y, Vector3.up);

        data.trail.SetActive(true);
        MaterialTools.Instance.FadeOut(data.renderer, "_TintColor", trailTime, data.renderer.gameObject);
    }
コード例 #25
0
    void SetAgent0()
    {
        GameObject prefab = Resources.Load("testCustomRVOAgent") as GameObject;
        {
            RVO.Simulator.Instance.addAgent(new RVO.Vector2(0, -10), 10, 10, 10, 10, 0.5f, 1, new RVO.Vector2(0, 0));
            m_goals.Add(new RVO.Vector2(0, 10));

            GameObject go = GameObject.Instantiate(prefab) as GameObject;
            go.name = "agent" + 0;
            Agent1 agent = go.AddComponent <Agent1>();
            agent.Init(0);
        }
    }
コード例 #26
0
    void SetAgent1()
    {
        GameObject prefab = Resources.Load("agent") as GameObject;
        {
            RVO.Simulator.Instance.addAgent(new RVO.Vector2(-10, 0));
            m_goals.Add(new RVO.Vector2(10, 0));

            GameObject go = GameObject.Instantiate(prefab) as GameObject;
            go.name = "agent" + 1;
            Agent1 agent = go.AddComponent <Agent1>();
            agent.Init(1);
        }
    }
コード例 #27
0
ファイル: HandleDeadBody.cs プロジェクト: ysguoqiang/samurai
 public static void DoHandleDeadBody(Agent1 agent)
 {
     //FSMComponent fsm = respawnData.agent.GetComponent<FSMComponent>();
     //fsm.enabled = false;
     //respawnData.agent.Invoke("ReturnHuman", 延时)
     //respawnData.agent.gameObject.SetActive(false);
     agent.FSMComponent.enabled = false;
     agent.Decision.enabled     = false;
     if (agent.IsPlayer)
     {
         //respawnData.agent.PlayerOrder.enabled = false;
         //respawnData.agent.PlayerInput.enabled = false;
     }
 }
コード例 #28
0
    public override void OnUpdate()
    {
        if (_damageResultType < Agent.BlackBoard.damageResultType)
        {
            _damageResultType    = Agent.BlackBoard.damageResultType;
            _attacker            = Agent.BlackBoard.Attacker;
            _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount;
            SendEvent();
        }
        else if (_damageResultType == Agent.BlackBoard.damageResultType)
        {
            if (_attacker != Agent.BlackBoard.Attacker)
            {
                _attacker            = Agent.BlackBoard.Attacker;
                _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount;
                SendEvent();
            }
            else if (_attackerRepeatCount != Agent.BlackBoard.AttackerRepeatCount)
            {
                _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount;
                SendEvent();
            }
        }

        if (_eventInjury != null && _eventInjury.IsFinished && _injuryPhrase >= 3 && _eventAttack == null)
        {
            SendRevengeAttackEvent();
        }

        if (_eventAttack != null)
        {
            if (_eventAttack.attackPhaseStart && _startTrailTimer == 0)
            {
                _startTrailTimer = Time.timeSinceLevelLoad + _startTrailDelay;
            }

            if (_startTrailTimer > 0 && Time.timeSinceLevelLoad > _startTrailTimer)
            {
                // 显示刀光(方案2:动态生成mesh,参见BossOrochi)
                Agent.PlayWeaponTrail(false);
            }

            if (_eventAttack.attackPhaseDone)
            {
                // 关闭刀光(方案2:动态生成mesh,参见BossOrochi)
                Agent.StopWeaponTrail();
            }
        }
    }
コード例 #29
0
ファイル: Program.cs プロジェクト: MyGit-567/ThreadTask
        static void Main(string[] args)
        {
            Agent1     agent1     = new Agent1();
            Agent2     agent2     = new Agent2();
            Agent3     agent3     = new Agent3();
            Product1   product1   = new Product1();
            Product2   product2   = new Product2();
            Management management = new Management();

            management._agents.Add(agent1);
            management._agents.Add(agent2);
            management._agents.Add(agent3);
            management._products.Add(product1);
            management._products.Add(product2);
        }
コード例 #30
0
 public void Init(Agent1 agent, GameObject prefab, Vector3 pos, Vector3 dir,
                  float damage, float speed, float hitMomentum)
 {
     _agent = agent;
     if (_transform == null)
     {
         _transform = GameObject.Instantiate(prefab).GetComponent <Transform>();
     }
     _transform.position = pos;
     _transform.forward  = dir;
     _damage             = damage;
     _speed       = speed;
     _hitMomentum = hitMomentum;
     _hit         = false;
     _endTimer    = Time.timeSinceLevelLoad + flyTime;
 }
コード例 #31
0
 public void RegisterAgent(Agent1 agent)
 {
     var agentPath = GetObjectPathForLocalObject(agent);
     _system.Register(agentPath, agent);
     AgentManager.RegisterAgent(agentPath, "KeyboardDisplay");
 }
コード例 #32
0
 public void SetDefaultAgent(Agent1 agent)
 {
     var agentPath = GetObjectPathForLocalObject(agent);
     AgentManager.RequestDefaultAgent(agentPath);
 }