Esempio n. 1
0
    private static bool RectContainsCircle(Rect rect, CollisionCircle obj)
    {
        if (!rect.Contains(obj.Trans.position))
        {
            return(false);
        }

        float radius = 0;

        if (obj.IsStatic)
        {
            radius = obj.GetRadius();
        }

        if ((obj.Trans.position.x - radius) <= rect.x)
        {
            return(false);
        }
        if ((obj.Trans.position.x + radius) >= (rect.x + rect.width))
        {
            return(false);
        }
        if ((obj.Trans.position.y - radius) <= rect.y)
        {
            return(false);
        }
        if ((obj.Trans.position.y + radius) >= (rect.y + rect.height))
        {
            return(false);
        }
        return(true);
    }
Esempio n. 2
0
 public void CollidedEnded(CollisionCircle other)
 {
     if (InstanceId == other.InstanceId)
     {
         return;
     }
     if (Owner.PlayerNumber == other.Owner.PlayerNumber)
     {
         return;
     }
     if (IsDead)
     {
         return;
     }
     if (!IsWeapon)
     {
         return;
     }
     if (Mover.Weapon.Target != null)
     {
         if (Mover.Weapon.Target.GameObj == other.Trans.gameObject)
         {
             Mover.Weapon.Target = null;
         }
     }
 }
Esempio n. 3
0
        protected override void LoadContent()
        {
            base.LoadContent();

            Sprite        = Game.Content.Load <Texture2D>("Graphics/Entities/ship");
            _bulletSprite = this.Game.Content.Load <Texture2D>("Graphics/Entities/ship_bullet");
            _hitboxSprite = this.Game.Content.Load <Texture2D>("Graphics/Pictures/hitbox");
            Center        = new Vector2(Sprite.Width / 2f, Sprite.Height / 2f);
            CollisionBox  = new CollisionCircle(this, new Vector2(Sprite.Height / 6f, Sprite.Height / 6f), _hitboxRadius / 2f);

            _lifeIcon = Game.Content.Load <Texture2D>("Graphics/Pictures/life");

            _bulletTimeBarLeft    = Game.Content.Load <Texture2D>("Graphics/Pictures/bulletTimeBarLeft");
            _bulletTimeBarContent = Game.Content.Load <Texture2D>("Graphics/Pictures/bulletTimeBarContent");
            _bulletTimeBarRight   = Game.Content.Load <Texture2D>("Graphics/Pictures/bulletTimeBarRight");

            if (_shootSound == null)
            {
                _shootSound = Game.Content.Load <SoundEffect>(@"Audio/SE/hit");
            }
            if (_deadSound == null)
            {
                _deadSound = Game.Content.Load <SoundEffect>(@"Audio/SE/dead");
            }

            float xLag = Config.Resolution.X / 2;

            if (Config.PlayersNumber > 1)
            {
                xLag /= 2;
            }

            _camera = new Camera2D(_viewport, Config.GameArea.X, Config.GameArea.Y, 1f);
        }
Esempio n. 4
0
 public void Collided(CollisionCircle other)
 {
     if (InstanceId == other.InstanceId)
     {
         return;
     }
     if (Owner.PlayerNumber == other.Owner.PlayerNumber)
     {
         return;
     }
     if (IsDead)
     {
         return;
     }
     if (!IsWeapon)
     {
         return;
     }
     if (IsWeapon && !Mover.Weapon.HasTarget)
     {
         Mover.Weapon.Target    = other.Trans.GetComponent <ITargetable>();
         Mover.Weapon.HasTarget = true;
     }
     else
     {
         Mover.Weapon.AttackTarget();
     }
 }
Esempio n. 5
0
        protected override void LoadContent()
        {
            base.LoadContent();

            Sprite        = GameRef.Content.Load <Texture2D>("Graphics/Entities/player");
            _bulletSprite = GameRef.Content.Load <Texture2D>("Graphics/Entities/player_bullet");
            _hitboxSprite = GameRef.Content.Load <Texture2D>("Graphics/Pictures/player_hitbox");
            CollisionBoxes.Add(new CollisionCircle(this, new Vector2(Sprite.Height / 6f, Sprite.Height / 6f), _hitboxRadius / 2f));

            _shieldSprite          = GameRef.Content.Load <Texture2D>("Graphics/Entities/shield");
            _shieldOrigin          = new Vector2(_shieldSprite.Width / 2f, _shieldSprite.Height / 2f);
            _shieldCollisionCircle = new CollisionCircle(this, Vector2.Zero, _shieldSprite.Width / 2f);

            _lifeIcon = GameRef.Content.Load <Texture2D>("Graphics/Pictures/life_icon");

            _bulletTimeBarLeft    = GameRef.Content.Load <Texture2D>("Graphics/Pictures/gauge_left");
            _bulletTimeBarContent = GameRef.Content.Load <Texture2D>("Graphics/Pictures/gauge_middle");
            _bulletTimeBarRight   = GameRef.Content.Load <Texture2D>("Graphics/Pictures/gauge_right");

            if (_shootSound == null)
            {
                _shootSound = GameRef.Content.Load <SoundEffect>(@"Audio/SE/hit");
            }
            if (_deadSound == null)
            {
                _deadSound = GameRef.Content.Load <SoundEffect>(@"Audio/SE/dead");
            }
        }
Esempio n. 6
0
        private void setupEnvironments(Car car, World world, Game game, Move move)
        {
            TilePos.TileSize = game.TrackTileSize;

            GlobalMap.InstanceInit(world);
            GlobalMap.Instance.SetupEnvironment(world, game);

            AngleReachEvent.setupEnvironment(game);

            MoveToAngleFunction.setupEnvironment(world);
            MoveToPoint.setupEnvironment(world);

            PhysicExtensions.setupEnvironment(game);
            PhysicEventsCalculator.setupEnvironment(game, world);

            CollisionSide.SetupEnvironment(game);
            CollisionCircle.SetupEnvironment(game);
            CollisionDetector.SetupEnvironment(game, GlobalMap.Instance);

            map.SetupEnvironment(car, GlobalMap.Instance);
            path.SetupEnvironment(car, GlobalMap.Instance, world, game);

            foreach (IAction action in actions.Values)
            {
                action.setupEnvironment(car, world, game, path);
            }

            foreach (AdditionalPoints action in additionalPointsActions)
            {
                action.setupEnvironment(car, world, game, path);
            }
        }
Esempio n. 7
0
        public Player(XmasHell game)
        {
            _game             = game;
            _currentDirection = Vector2.Zero;

            _idleAnimationTimer = new CountdownTimer(5);
            _idleAnimationTimer.Stop();
            _idleAnimationTimer.Completed += (sender, args) =>
            {
                Console.WriteLine("PLAY IDLE");
                CurrentAnimator.Play("Idle");
            };

            var playerHitboxTexture = Assets.GetTexture2D("Graphics/Sprites/Player/hitbox");

            var animatorConfig = new Config
            {
                MetadataEnabled = false,
                EventsEnabled   = false,
                PoolingEnabled  = true,
                TagsEnabled     = false,
                VarsEnabled     = false,
                SoundsEnabled   = false
            };

            var factory = new DefaultProviderFactory <ISprite, SoundEffect>(animatorConfig, true);

            var loader = new SpriterContentLoader(_game.Content, "Graphics/Sprites/Player/player");

            loader.Fill(factory);

            Stack <SpriteDrawInfo> drawInfoPool = new Stack <SpriteDrawInfo>();

            foreach (var entity in loader.Spriter.Entities)
            {
                var animator = new CustomSpriterAnimator(_game, entity, factory, drawInfoPool);
                _animators.Add(animator);
            }

            CurrentAnimator = _animators.First();
            var spriteSize = new Vector2(60, 82);

            CurrentAnimator.Position = new Vector2(spriteSize.X / 2f, spriteSize.Y / 2f);
            CurrentAnimator.Play("Idle");

            CurrentAnimator.AnimationFinished += AnimationFinished;

            _hitboxSprite = new Sprite(playerHitboxTexture)
            {
                //Scale = new Vector2(
                //    (GameConfig.PlayerHitboxRadius * 2f) / playerHitboxTexture.Width,
                //    (GameConfig.PlayerHitboxRadius * 2f) / playerHitboxTexture.Height
                //)
            };
            _hitbox = new CollisionCircle(this, Vector2.Zero, GameConfig.PlayerHitboxRadius);

            // Don't forget to set the player position delegate to the MoverManager
            _game.GameManager.MoverManager.SetPlayerPositionDelegate(Position);
        }
Esempio n. 8
0
        public void PointOutsideReturnsFalseTest(float x, float y, float z, float radius)
        {
            var shape = new CollisionCircle(Vector2.Zero, radius);

            var result = shape.IsWithin(new Vector3(x, y, z));

            result.Should().BeFalse();
        }
Esempio n. 9
0
    /// <summary>
    /// Test if this collides with another collision circle.
    /// </summary>
    /// <returns><c>true</c>, the two circles collide, <c>false</c> the two circles dont collide.</returns>
    /// <param name="c">the circle to test against.</param>
    public bool TestCollisionCircle(CollisionCircle c)
    {
        Vector3 position = this.transform.position;
        float   distance = c.Raduis + radius;

        distance *= distance;
        Vector3 offset = position - c.Position;

        return(offset.sqrMagnitude < distance);
    }
Esempio n. 10
0
    private void OnEnable()
    {
        //mode = Mode.Idle;
        Collision = new CollisionCircle(Trans, null, Owner, null);
        CollisionManager.Instance.AddCollidable(Collision);
        Collision.IsDead             = false;
        Collision.CollidedBaseCircle = null;

        LoadFromConfig();
    }
Esempio n. 11
0
        public Bullet Update(int id, List <int> bulletsToDelete)
        {
            if (_dieing)
            {
                UpdateAnimation();
                if (_animations[_currentAnimation].FinishedPlaying)
                {
                    SetInactive(_id);
                    bulletsToDelete.Add(id);
                }

                return(this);
            }

            --KillTime;
            if (KillTime == 0)
            {
                Clear();
                return(this);
            }

            if (SpawnDelay > 0)
            {
                --SpawnDelay;
            }
            if (SpawnDelay != 0)
            {
                return(this);
            }

            UpdateAnimation();
            Behavior.Update(ref this);

            if (AutomaticCollision)
            {
                if (!_tileMap.CellIsPassableByPixel(CircleCollisionCenter) ||
                    !Camera.WorldRectangle.Contains((int)Position.X, (int)Position.Y))
                {
                    Clear();
                    return(this);
                }
            }

            if (CollisionCircle.Intersects(((Player)VariableProvider.CurrentPlayer).PlayerBulletCollisionCircle))
            {
                Clear();
                return(this);
                //VariableProvider.CurrentPlayer.Send<string>("KILL", null);
            }

            _directionVector.Normalize();
            _lastDirection = Direction;
            _lastPosition  = Position;
            return(this);
        }
Esempio n. 12
0
    public void Start()
    {
        Trans.localScale = Vector3.one;

        Collision = new CollisionCircle(Trans, null, Owner, null);
        CollisionManager.Instance.AddCollidable(Collision);

        ConfigManager.Instance.OnConfigsLoaded += Reset;
        GameManager.Instance.OnGameStart       += Reset;
        GameManager.Instance.OnGameStart       += Initialize;
    }
Esempio n. 13
0
 private void Start()
 {
     Collision = new CollisionCircle(Trans, Mover, Owner, this);
     CollisionManager.Instance.AddCollidable(Collision);
     IsAttacking                  = false;
     Collision.IsDead             = false;
     Collision.CollidedBaseCircle = null;
     Target    = null;
     HasTarget = false;
     isStarted = true;
 }
Esempio n. 14
0
        public void LoadContent(IContentLoader contentLoader)
        {
            sprite = contentLoader.Load <Texture2D>("Graphics/Entities/player");
            var size = (sprite.Width, sprite.Height);
            var pos  = (position.X, position.Y);

            ship = system.ActorOf(Props.Create(() => new Danmaku.ShipActor(pos, size)));

            _shieldSprite = contentLoader.Load <Texture2D>("Graphics/Entities/shield");
            _shieldOrigin = new Vector2(_shieldSprite.Width / 2f, _shieldSprite.Height / 2f);

            CollisionBoxes.Add(new CollisionCircle(this, new Vector2(sprite.Height / 6f, sprite.Height / 6f), _hitboxRadius / 2f));
            _shieldCollisionCircle = new CollisionCircle(this, Vector2.Zero, _shieldSprite.Width / 2f);
        }
Esempio n. 15
0
        protected override void LoadContent()
        {
            Sprite = Game.Content.Load <Texture2D>(@"Graphics/Sprites/balls");

            Center = new Vector2(Sprite.Height / 2f, Sprite.Height / 2f);

            CollisionBox = new CollisionCircle(this, Vector2.Zero, Sprite.Height / 2f);

            int index = (int)(Sprite.Height * _rand.Next((Sprite.Width / Sprite.Height)));

            _spriteRectangle = new Rectangle(index, 0, Sprite.Height, Sprite.Height);

            base.LoadContent();
        }
Esempio n. 16
0
        public bool Collided(CollisionCircle c)
        {
            var rad = c.Circ.Radius;
            var center = c.Circ.Center;

            return c.Circ.ContainsPoint(new Point(Rect.Left, Rect.Top))
                || c.Circ.ContainsPoint(new Point(Rect.Left, Rect.Bottom))
                || c.Circ.ContainsPoint(new Point(Rect.Right, Rect.Top))
                || c.Circ.ContainsPoint(new Point(Rect.Right, Rect.Bottom))
                || Rect.ContainsPoint(new Point(center.X, center.Y - rad))
                || Rect.ContainsPoint(new Point(center.X, center.Y + rad))
                || Rect.ContainsPoint(new Point(center.X - rad, center.Y))
                || Rect.ContainsPoint(new Point(center.X + rad, center.Y));
        }
        private bool tireCollisionWithCar(Vector tirePos, PCar car, out Vector normal, double multR = 1)
        {
            CollisionCircle collisionTire = new CollisionCircle(tirePos, game.TireRadius * multR);
            CollisionRect   collisionCar  = new CollisionRect(car);

            CollisionInfo collision = new CollisionInfo(collisionTire, collisionCar);

            if (CollisionDetector.CheckCollision(collision))
            {
                normal = collision.NormalObj1;
                return(true);
            }

            normal = null;
            return(false);
        }
Esempio n. 18
0
        public void Update(GameTime a_GameTime)
        {
            if (Follow != null)
            {
                if (CollisionCircle.Intersects(Follow.CollisionCircle) == false)
                {
                    Velocity  = Follow.Position - Position;
                    Position += (Vector2.Normalize(Velocity)) * 5;

                    if (Velocity != Vector2.Zero)
                    {
                        ConstantVelocity = Velocity;
                    }
                }
            }
        }
Esempio n. 19
0
        /// <summary>
        /// Returns whether or not the tongue intersects with a circle.
        /// </summary>
        /// <param name="collisionCircle"></param>
        /// <returns></returns>
        public bool Intersects(CollisionCircle collisionCircle)
        {
            if (!IsAttacking)
            {
                return(false);
            }

            foreach (Vector2 v in GetCollisionPoints())
            {
                if (collisionCircle.Contains(v.X, v.Y))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 20
0
    /// <summary>
    /// Handle collisions between the boss and the players bullets
    /// </summary>
    public void CollideBossBullets()
    {
        HealthManager     health       = Boss.GetComponent <HealthManager> ();
        List <GameObject> bullets      = bulletManager.BulletsList;
        CollisionCircle   bossCollider = Boss.GetComponent <CollisionCircle> ();

        if (!health.Immune)
        {
            for (int i = bullets.Count - 1; i >= 0; i--)
            {
                if (bossCollider.TestCollisionCircle(bullets [i].GetComponent <CollisionCircle> ()))
                {
                    health.Hit();
                    bulletManager.DestroyBullet(i);
                }
            }
        }
    }
Esempio n. 21
0
 public CollisionCircle(Transform newTrans, Mover newMover, Owner newOwner, Weapon newWeapon)
 {
     showGizmos = true;
     Trans      = newTrans;
     Mover      = newMover;
     if (Mover == null)
     {
         IsStatic = true;
         Planet   = Trans.GetComponent <Planet>();
     }
     Owner  = newOwner;
     Weapon = newWeapon;
     if (Weapon != null)
     {
         IsWeapon = true;
     }
     IsCollidedWithBase = false;
     CollidedBaseCircle = null;
     CollidedCount      = 0;
     InstanceId         = Trans.gameObject.GetInstanceID();
 }
        private Vector tireCollisionWithMap(Vector pos, Vector lastPos)
        {
            int    ticks = 5;
            Vector spd   = (pos - lastPos) / (double)ticks;

            for (int i = 0; i < ticks; i++)
            {
                pos += spd;

                CollisionCircle      collisionTire = new CollisionCircle(pos, game.TireRadius);
                List <CollisionInfo> collisions    = CollisionDetector.CollisionsWithMap(collisionTire);

                if (!collisions.HasCollision())
                {
                    continue;
                }

                return(collisions.AverageNormalObj1());
            }

            return(null);
        }
Esempio n. 23
0
    /// <summary>
    /// Handles collisions between the ship and asteroids.
    /// </summary>
    public void CollideShipAsteroids()
    {
        //get the players health script
        HealthManager health = Ship.GetComponent <HealthManager> ();

        //check if the player currently has immunity
        if (!health.Immune)
        {
            //get the asteroids and the ships collision circle
            List <GameObject> asteroids    = asteroidManager.AsteroidsList;
            CollisionCircle   shipCollider = Ship.GetComponent <CollisionCircle> ();
            //loop through the asteroids
            for (int i = asteroids.Count - 1; i >= 0; i--)
            {
                //check for collision
                if (shipCollider.TestCollisionCircle(asteroids [i].GetComponent <CollisionCircle> ()))
                {
                    //if there is a collision damage the ship
                    health.Hit();
                }
            }
        }
    }
Esempio n. 24
0
    /// <summary>
    /// Handles collisions between asteroids and the players bullets.
    /// </summary>
    public void CollideAsteroidsBullets()
    {
        //get the asteroids and the players bullets
        List <GameObject> asteroids = asteroidManager.AsteroidsList;
        List <GameObject> bullets   = bulletManager.BulletsList;

        //loop through the asteroids
        for (int i = asteroids.Count - 1; i >= 0; i--)
        {
            //get the asteroids collision circle then loop through the bullets
            CollisionCircle curr = asteroids [i].GetComponent <CollisionCircle> ();
            for (int j = bullets.Count - 1; j >= 0; j--)
            {
                //check for collision
                if (curr.TestCollisionCircle(bullets[j].GetComponent <CollisionCircle>()))
                {
                    //if there is a collision destroy both the asteroid and the bullet then and stop looping through bullets
                    asteroidManager.DestroyAsteroid(asteroids[i]);
                    bulletManager.DestroyBullet(j);
                    j = -1;
                }
            }
        }
    }
 public bool CollidesWithFrozenEnemy(CollisionCircle circle)
 {
     return(false);
 }
Esempio n. 26
0
    public void AddCollidable(CollisionCircle obj)
    {
//        qtree.Insert(obj);
        ObjectsToInsert.Enqueue(obj);
    }
Esempio n. 27
0
    public void Insert(CollisionCircle obj)
    {
        if (objects.Count < 1 && activeNodes == 0)
        {
            objects.Add(obj);
            obj.IsInQt = true;
            return;
        }

        if (rect.size.x < Vector2.one.x && rect.size.y < Vector2.one.y)
        {
            objects.Add(obj);
            obj.IsInQt = true;
            return;
        }

        Rect[] quadrant = new Rect[4];
        quadrant[0] = (childs[0] != null) ? childs[0].rect : new Rect(rect.x + halfWidth, rect.y, halfWidth, halfHeight);
        quadrant[1] = (childs[1] != null) ? childs[1].rect : new Rect(rect.x, rect.y, halfWidth, halfHeight);
        quadrant[2] = (childs[2] != null) ? childs[2].rect : new Rect(rect.x, rect.y + halfHeight, halfWidth, halfHeight);
        quadrant[3] = (childs[3] != null) ? childs[3].rect : new Rect(rect.x + halfWidth, rect.y + halfHeight, halfWidth, halfHeight);

        if (RectContainsCircle(rect, obj))
        {
            bool found = false;
            for (int i = 0; i < 4; i++)
            {
                if (RectContainsCircle(quadrant[i], obj))
                //if (quadrant[i].Contains(obj.GetPoint()))
                {
                    // using existing child
                    if (childs[i] != null)
                    {
                        childs[i].Insert(obj);
                    }
                    // create new child
                    else
                    {
                        childs[i]        = new QuadTreeEternal(quadrant[i]);
                        childs[i].Root   = Root;
                        childs[i].parent = this;
                        childs[i].level  = level + 1;
                        childs[i].Insert(obj);
                        hasChilds    = true;
                        activeNodes |= (byte)(1 << i);
                    }
                    found = true;
                }
            }
            if (!found)
            {
                objects.Add(obj);
                obj.IsInQt = true;
            }
        }
        else
        {
            // attach object to root if it's outside of battleground boundaries
            //objects.Add(obj);
            obj.IsInQt = false;
        }
    }
Esempio n. 28
0
    private static void CheckBodies(CollisionCircle unit1, CollisionCircle unit2)
    {
        if (unit1.InstanceId == unit2.InstanceId)
        {
            return;
        }
        if (unit1.IsStatic && unit2.IsStatic)
        {
            return;
        }
        if (unit1.IsDead || unit2.IsDead)
        {
            return;
        }
        if (unit1.IsWeapon || unit2.IsWeapon)
        {
            return;
        }
        float distance = (unit1.Trans.position - unit2.Trans.position).sqrMagnitude;

        // if no mover then it's a base
        if (unit1.IsStatic)
        {
            if (unit1.Owner.PlayerNumber == -1)
            {
                float radiuses = unit1.GetRadius();
                if (distance < radiuses * radiuses)
                {
                    if (unit2.IsCollidedWithBase == false)
                    {
                        unit2.CollidedBaseCircle = unit1;
                        unit2.IsCollidedWithBase = true;
                        unit1.CollidedCount++;
                    }
                }
                else
                {
                    if (unit2.CollidedBaseCircle == unit1)
                    {
                        unit2.CollidedBaseCircle = null;
                        unit2.IsCollidedWithBase = false;
                        unit1.CollidedCount--;
                    }
                }
            }
            else
            {
                float radiuses = unit1.GetRadius();
                if (distance < radiuses * radiuses)
                {
                    if (unit1.Owner.PlayerNumber == unit2.Owner.PlayerNumber)
                    {
                        if (!unit2.IsDead)
                        {
                            if (unit2.Mover.FollowBase.TargetPlanet.gameObject != unit1.Trans.gameObject)
                            {
                                if (unit2.Mover.Separation.Enabled)
                                {
                                    unit2.Mover.Separation.AddSeparation(unit1.Trans.position, distance);
                                }
                            }
                        }
                    }
                }
            }
        }
        // if no mover then it's a base
        else if (unit2.IsStatic)
        {
            if (unit2.Owner.PlayerNumber == -1)
            {
                float radiuses = unit2.GetRadius();
                if (distance < radiuses * radiuses)
                {
                    if (unit1.IsCollidedWithBase == false)
                    {
                        unit1.CollidedBaseCircle = unit2;
                        unit1.IsCollidedWithBase = true;
                        unit2.CollidedCount++;
                    }
                }
                else
                {
                    if (unit1.CollidedBaseCircle == unit2)
                    {
                        unit1.CollidedBaseCircle = null;
                        unit1.IsCollidedWithBase = false;
                        unit2.CollidedCount--;
                    }
                }
            }
            else
            {
                float radiuses = unit2.GetRadius();
                if (distance < radiuses * radiuses)
                {
                    if (unit2.Owner.PlayerNumber == unit1.Owner.PlayerNumber)
                    {
                        if (!unit1.IsDead)
                        {
                            if (unit1.Mover.FollowBase.TargetPlanet.gameObject != unit2.Trans.gameObject)
                            {
                                if (unit1.Mover.Separation.Enabled)
                                {
                                    unit1.Mover.Separation.AddSeparation(unit2.Trans.position, distance);
                                }
                            }
                        }
                    }
                }
            }
        }
        else if (!unit1.IsStatic && !unit2.IsStatic)
        {
            if (distance > 0)
            {
                // check all dynamic bodies to apply separation
                if (distance < unit1.Mover.Separation.Desired * unit1.Mover.Separation.Desired)
                {
                    if (unit1.Mover.Separation.Enabled)
                    {
                        unit1.Mover.Separation.AddSeparation(unit2.Trans.position, distance);
                    }
                    if (unit2.Mover.Separation.Enabled)
                    {
                        unit2.Mover.Separation.AddSeparation(unit1.Trans.position, distance);
                    }
                }
                // check ally bodies only
                if (unit1.Owner.PlayerNumber == unit2.Owner.PlayerNumber)
                {
                    // check to apply cohesion
                    if (distance < unit1.Mover.Cohesion.Desired * unit1.Mover.Cohesion.Desired)
                    {
                        if (unit1.Mover.Cohesion.Enabled)
                        {
                            unit1.Mover.Cohesion.AddCohesion(unit2.Trans.position);
                        }
                        if (unit2.Mover.Cohesion.Enabled)
                        {
                            unit2.Mover.Cohesion.AddCohesion(unit1.Trans.position);
                        }
                    }
                }
            }
            else
            {
                unit2.Trans.Translate(-0.2f, 0, 0);
                unit1.Trans.Translate(0.2f, 0, 0);
            }
        }
    }
Esempio n. 29
0
    void CheckWeapon(CollisionCircle unit1, CollisionCircle unit2)
    {
        if (unit1.InstanceId == unit2.InstanceId)
        {
            return;
        }
        if (unit1.Owner.PlayerNumber == unit2.Owner.PlayerNumber)
        {
            return;
        }
        if (unit1.Owner.PlayerNumber == -1 || unit2.Owner.PlayerNumber == -1)
        {
            return;
        }
        if (unit1.IsDead || unit2.IsDead)
        {
            return;
        }
        if (unit1.IsWeapon && unit2.IsWeapon)
        {
            return;
        }
        float distance = (unit1.Trans.position - unit2.Trans.position).sqrMagnitude;

        if (distance > 0)
        {
            if (unit1.IsWeapon)
            {
                float radiuses = unit1.GetRadius() + unit2.GetRadius();
                if (distance < radiuses * radiuses)
                {
                    if (!unit1.Weapon.HasTarget)
                    {
                        unit1.Weapon.Target    = unit2.Trans.GetComponent <ITargetable>();
                        unit1.Weapon.HasTarget = true;
                        unit1.Weapon.AttackTarget();
                    }
                    else
                    {
                        unit1.Weapon.AttackTarget();
                    }
                }
                else
                {
                    if (unit1.Weapon.Target != null)
                    {
                        if (unit1.Weapon.Target.GameObj == unit2.Trans.gameObject)
                        {
                            unit1.Weapon.Target = null;
                        }
                    }
                }
            }
            else if (unit2.IsWeapon)
            {
                float radiuses = unit1.GetRadius() + unit2.GetRadius();
                if (distance < radiuses * radiuses)
                {
                    if (!unit2.Weapon.HasTarget)
                    {
                        unit2.Weapon.Target    = unit1.Trans.GetComponent <ITargetable>();
                        unit2.Weapon.HasTarget = true;
                        unit2.Weapon.AttackTarget();
                    }
                    else
                    {
                        unit2.Weapon.AttackTarget();
                    }
                }
                else
                {
                    if (unit2.Weapon.Target != null)
                    {
                        if (unit2.Weapon.Target.GameObj == unit1.Trans.gameObject)
                        {
                            unit2.Weapon.Target = null;
                        }
                    }
                }
            }
        }
    }
Esempio n. 30
0
 public bool Collided(CollisionCircle c)
 {
     return c.Circ.Intersects(Circ);
 }