Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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();
        }