Beispiel #1
0
    public void TryLaserShot()
    {
        float LaserLen = 10f;

        if (LasersCharges.x > 0)
        {
            LasersCharges.x--;
            AsteroidsGame.current.UpdateLaserCounter();
            var up = logicobj.up;
            foreach (var item in Engine.FindObjectsOfType <FastPhysics>())
            {
                if (!FastPhysics.CrossArray(item.logicobj.tags, tagsblacklist))
                {
                    //Расстояние до лазера от объекта это длина его перпендикуляра если корабль смотрит в сторону объекта
                    var ip = item.position;
                    if (Vector2.Distance(up + position, ip) < Vector2.Distance(position, ip))//Если корабль смотрит в сторону объекта
                    {
                        Vector2 cross = PerpPoint(ip - position, up);
                        if (cross.magnitude < item.Radius && Vector2.Distance(ip - cross, position) < LaserLen)//Длина перепендикуляра
                        {
                            AsteroidsGenerator.Crush(item.logicobj, true);
                        }
                    }
                }
            }
            var laser = LogicalObject.Create()
                        .AddPart(new PolyRenderer(new Vector2[] {
                new Vector2(0, 0.5f),
                new Vector2(0, LaserLen)
            }, Color.red));
            laser.position = position;
            laser.angle    = angle;
            Destroy(laser, 0.1f);
        }
    }
Beispiel #2
0
 public override void Update()
 {
     ShotCooldown.Update(Time.deltaTime * FastPhysics.TimeScale);
     LaserCooldown.Update(Time.deltaTime * FastPhysics.TimeScale);
     FastPhysics.CheckCollisions(FastPhysics, tagsblacklist, (item) =>
     {
         //TODO audio
         AsteroidsGenerator.Crush(item.logicobj);
         OnDamage();
     });
 }
Beispiel #3
0
 public override void Update()
 {
     FastPhysics.CheckCollisions(FastPhysics, tagsblacklist, (item) => {
         //TODO audio
         AsteroidsGenerator.Crush(item.logicobj);
         Destroy();
     });
     lifetime -= Time.deltaTime * FastPhysics.TimeScale;
     if (lifetime <= 0)
     {
         Destroy();
     }
 }
Beispiel #4
0
 public override void KeyInput(KeyCode key)
 {
     if (Input.anyKey && FastPhysics.TimeScale != 0)
     {
         if (key == KeyCode.W)
         {
             FastPhysics.AddForce(logicobj.up * Time.deltaTime * Speed);
         }
         if (Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.Mouse0))//Shot
         {
             sl.Shot();
         }
         if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.Mouse1))//Laser
         {
             sl.TryLaserShot();
         }
     }
 }
Beispiel #5
0
    //Collisions
    public static bool CheckCollisions(FastPhysics who, IEnumerable <string> tagsblacklist, UnityAction <FastPhysics> onCollision)
    {
        Vector2 pos   = who.position;
        float   r     = who.Radius;
        bool    faced = false;

        foreach (var item in Engine.FindObjectsOfType <FastPhysics>())
        {
            if (!CrossArray(tagsblacklist, item.logicobj.tags))
            {
                if (Vector2.Distance(item.position, pos) < item.Radius + r)
                {
                    onCollision(item);
                    faced = true;
                }
            }
        }
        return(faced);
    }