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); } }
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(); }
public void RegisterAgent(Agent1 agent) { var agentPath = GetObjectPathForLocalObject(agent); _system.Register(agentPath, agent); AgentManager.RegisterAgent(agentPath, "KeyboardDisplay"); }
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); }
public override void OnEnter() { _attacker = Agent.BlackBoard.Attacker; _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount; _damageResultType = Agent.BlackBoard.damageResultType; SendEvent(); }
public override void Reset() { base.Reset(); attacker = null; fromWeapon = WeaponType.NONE; impuls = Vector3.zero; lyingTime = 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(); }
public override void Reset() { base.Reset(); attacker = null; fromWeapon = WeaponType.NONE; damageType = DamageType.NONE; impuls = Vector3.zero; }
public virtual Vector3 GetBestAttackStart(Agent1 target) { Vector3 dirToTarget = target.Position - Agent.Position; dirToTarget.Normalize(); return(target.Position - dirToTarget * Agent.BlackBoard.weaponRange); }
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(); }
public override void Reset() { base.Reset(); finalPosition = Vector3.zero; moveType = MoveType.NONE; motionType = MotionType.NONE; target = null; }
public override void Reset() { base.Reset(); target = null; attackDir = Vector3.zero; attackPhaseDone = false; animAttackData = null; }
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); } }
public override void Reset() { base.Reset(); totalMoveDistance = 0; minDistanceToTarget = 0; moveType = MoveType.NONE; motionType = MotionType.WALK; target = null; }
public override void OnEnter() { _injuryPhrase = 0; _attacker = Agent.BlackBoard.Attacker; _attackerRepeatCount = Agent.BlackBoard.AttackerRepeatCount; _damageResultType = Agent.BlackBoard.damageResultType; _startTrailTimer = 0; SendEvent(); }
public override void Reset() { base.Reset(); _eventInjury = null; _eventKnockDown = null; _eventDeath = null; _attacker = null; _attackerRepeatCount = 0; _damageResultType = DamageResultType.NONE; }
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++;*/ }
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); }
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); } } }
public override void Reset() { base.Reset(); _injuryPhrase = 0; _eventInjury = null; _eventDeath = null; _eventAttack = null; _attacker = null; _attackerRepeatCount = 0; _damageResultType = DamageResultType.NONE; _startTrailTimer = 0; }
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))); }
Vector3 GetDestination(Agent1 target) { if (target == null) { return(Vector3.zero); } Vector3 dirToTarget = target.Position - Agent.Position; dirToTarget.Normalize(); return(target.Position - dirToTarget * range); }
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))); }
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); }
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); } }
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); } }
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; } }
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(); } } }
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); }
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; }
public void SetDefaultAgent(Agent1 agent) { var agentPath = GetObjectPathForLocalObject(agent); AgentManager.RequestDefaultAgent(agentPath); }