private bool findRadialGravity(Position pos, float radius, ElementColor color) { foreach (Element elem in elementsTimeLine[timeStep]) { if (elem.type == ElementType.RadialGravity) { float dist = LevelHelper.getDistance(pos, elem.getPosition()); if (dist < radius) { RadialGravity rg = (RadialGravity)elem; if (rg.containsColor(color)) { return(true); } else { // add color to existing RadialGravity elementsTimeLine[timeStep].Remove(rg); List <ElementColor> colors = new List <ElementColor>(); colors.Add(rg.colors[0]); colors.Add(color); RadialGravity rgNew = new RadialGravity(rg.getPosition(), rg.strength, rg.strengthRadius, colors, rg.id); elementsTimeLine[timeStep].Add(rgNew); return(true); } } } } return(false); }
private void AddGravity(Position pos, ElementColor color) { if (findRadialGravity(pos, RadialGravity.forceRadius, color)) { return; } Position posRG = Randoms.getPositionInCircle(pos, RadialGravity.forceRadius); float strength = GravityForce.force[Randoms.getInt(0, 2)]; RadialGravity rg = new RadialGravity(posRG, strength, RadialGravity.forceRadius, new List <ElementColor>() { color }); elementsTimeLine[timeStep].Add(rg); }
private void AddGravity(Position pos1, Position pos2, ElementColor color) { Position center = LevelHelper.getCenter(pos1, pos2); float radius = LevelHelper.getDistance(pos1, pos2) * factorRadiusGravity; Position posRG = Randoms.getPositionInCircle(center, radius); float dist1 = LevelHelper.getDistance(pos1, posRG); float dist2 = LevelHelper.getDistance(pos2, posRG); float dist = Math.Max(dist1, dist2); float strength = GravityForce.getForce(dist); float strengthRadius = GravityForce.getForceRadius(strength); RadialGravity rg = new RadialGravity(posRG, strength, strengthRadius, new List <ElementColor>() { color }); elementsTimeLine[timeStep].Add(rg); }
void AcquireOffset() { if (m_Divebombing && ms_DivebombLock == this) { ms_DivebombLock = null; } if (!m_Divebombing && !ms_DivebombLock && UnityEngine.Random.Range(0.0f, 1.0f) > 0.7f) { ms_DivebombLock = this; m_Divebombing = true; m_Offset = Vector3.zero; return; } m_Divebombing = false; var down = RadialGravity.GetDirectionAtPoint(transform.position); var forward = Vector3.Cross(down, Vector3.forward); m_Offset = down * UnityEngine.Random.Range(-7.0f, -5.0f) + forward * UnityEngine.Random.Range(-8.0f, 8.0f); // temp easily see pos //transform.position = m_Aggro.transform.position + m_Offset; }
public void FixedUpdate() { float dt = Time.fixedDeltaTime; m_T += dt; m_Character.Args.m_ShootPos = Vector3.zero; if (m_Aggro != null) { m_Character.Args.m_ShootPos = m_Aggro.transform.position; m_StateT += dt; if (m_Chase) { m_Target = transform.position + transform.TransformDirection(Vector3.right); } else { float nextTime = m_Character.GetPerkBool("fast") ? 1.0f : 3.0f; if (m_StateT > nextTime) { CalcNewTarget(); m_StateT = 0.0f; } } if (!IsTargetValid(m_Aggro)) { m_Aggro = null; } else { var targetPos = m_Target; var delta = targetPos - transform.position; var rb = GetComponent <Rigidbody>(); var offset = transform.position; m_Character.Args.m_TargetPos = m_Target; m_Character.Args.m_TargetFacing = m_Aggro.transform.position; } } else { m_Character.Args.m_TargetFacing = transform.position + RadialGravity.GetDirectionAtPoint(transform.position); m_Character.Args.m_TargetPos = m_HomeBase; foreach (var player in TwoDee.ComponentList.GetCopiedListOfType <TwoDee.ThirdPersonUserControl>()) { if (!IsTargetValid(player.gameObject)) { continue; } var playerpos = player.gameObject.transform.position; var aggroRange = m_Character.GetAggroRange(true); if (m_Chase) { aggroRange = 80.0f; } if ((playerpos - transform.position).magnitude < aggroRange) { m_Aggro = player.gameObject; return; } } } m_Character.ControlUpdate(); }