Esempio n. 1
0
 public void RocketOnCollisionEnter(RocketComponent rocketComponent, Collision collision)
 {
     if (OsFps.Instance.Server != null)
     {
         RocketSystem.Instance.ServerRocketOnCollisionEnter(OsFps.Instance.Server, rocketComponent, collision);
     }
 }
Esempio n. 2
0
 protected void InitializeNextRocket()
 {
     if (!CanFire) return;
     if (nextRocket != null) return;
     nextRocket = GameLevel.instance.CreateRocket();
     nextRocket.transform.SetParent(rocketPoint, true);
     nextRocket.transform.SetLocalPosition2D(Vector2.zero);
     nextRocket.canLook = true;
 }
Esempio n. 3
0
        public void OnUpdate()
        {
            var rockets = CurrentEntityManager.Entities.Where(e => e.GetComponent <RocketComponent>()).ToArray();
            int len     = rockets.Length;

            for (int i = 0; i < len; i++)
            {
                RocketComponent rocketComponent = rockets[i].GetComponent <RocketComponent>();

                // If rocket's target have been destroyed somehow - destroy rocket too
                if (rocketComponent.ClosestTarget != null)
                {
                    Vector3 dir      = (rockets[i].GetComponent <RocketComponent>().ClosestTarget.transform.position - rockets[i].transform.position).normalized;
                    float   distance = rockets[i].GetComponent <RocketComponent>().Speed *Time.deltaTime;
                    Vector3 newPos   = rockets[i].transform.position + dir * distance;

                    // Rotate rocket in the direction to a target
                    Vector3 up          = rockets[i].transform.up;
                    float   rotateAngle = Vector3.SignedAngle(up, dir, new Vector3(0, 0, 1));

                    rockets[i].transform.Rotate(new Vector3(0, 0, 1), rotateAngle);

                    // Check if rocket collide with target
                    RaycastHit2D raycastHit = Physics2D.Raycast(rockets[i].transform.position, dir, distance);

                    if (raycastHit.collider == null || !raycastHit.collider.GetComponent <TargetComponent>())
                    {
                        rockets[i].transform.position = newPos;
                    }
                    else if (raycastHit.collider.GetComponent <TargetComponent>())
                    {
                        CurrentEntityManager.DestroyEntity(raycastHit.collider.gameObject);
                        CurrentEntityManager.DestroyEntity(rockets[i]);

                        var scoreEntity = CurrentEntityManager.CreateEntity("scoreEntity", typeof(ScoreComponent));
                        scoreEntity.GetComponent <ScoreComponent>().Score = 1;
                    }

                    // If rocket is not visible by main camera
                    if (!GeometryUtility.TestPlanesAABB(planes, rockets[i].GetComponent <SpriteRenderer>().bounds))
                    {
                        CurrentEntityManager.DestroyEntity(rockets[i]);
                    }
                }
                else
                {
                    CurrentEntityManager.DestroyEntity(rockets[i]);
                }
            }
        }
Esempio n. 4
0
    public void FireRocket(Vector3 position)
    {
        if (!CanFire) return;
        InitializeNextRocket();

        if (nextRocket == null) return;
        nextRocket.canFly = true;
        nextRocket.canLook = false;
        nextRocket.flyToPosition = position;
        nextRocket = null;

        ammo--;
        InitializeNextRocket();
    }
Esempio n. 5
0
 protected void InitializeNextRocket()
 {
     if (!CanFire)
     {
         return;
     }
     if (nextRocket != null)
     {
         return;
     }
     nextRocket = GameLevel.instance.CreateRocket();
     nextRocket.transform.SetParent(rocketPoint, true);
     nextRocket.transform.SetLocalPosition2D(Vector2.zero);
     nextRocket.canLook = true;
 }
Esempio n. 6
0
    public void SetComponent(RocketComponent comp)
    {
        component        = comp;
        partLabel.text   = component.name;
        measurementItems = new List <MeasurementItem>(component.measurementItems);

        rocketMat = comp.mat;

        graphicalListOfMeasurements = transform.Find("InfoStuffList");

        foreach (MeasurementItem item in measurementItems)
        {
            Debug.Log("Setting item with ID " + item.id);
            MeasurementItemGraphical bl = new GameObject().AddComponent <MeasurementItemGraphical>();
            bl.SetUpUI(item, graphicalListOfMeasurements);
        }
    }
Esempio n. 7
0
    public RocketLayout(Powder powder, Charge charge, params RocketComponent[] components)
    {
        this.powder = powder;
        this.charge = charge;

        for (int i = 0; i < components.Length; i++)
        {
            RocketComponent comp = components[i];

            if (typeof(Powder) == comp.GetType())
            {
                this.powder = (Powder)comp;
            }
            else
            {
                this.charge = (Charge)comp;
            }
        }
    }
Esempio n. 8
0
    public void FireRocket(Vector3 position)
    {
        if (!CanFire)
        {
            return;
        }
        InitializeNextRocket();

        if (nextRocket == null)
        {
            return;
        }
        nextRocket.canFly        = true;
        nextRocket.canLook       = false;
        nextRocket.flyToPosition = position;
        nextRocket = null;

        ammo--;
        InitializeNextRocket();
    }
Esempio n. 9
0
    private void ServerDetonateRocket(Server server, RocketComponent rocketComponent)
    {
        var rocketPosition = (float3)rocketComponent.transform.position;

        // apply damage & forces to players within range
        var rocketLauncherDefinition = WeaponSystem.Instance.GetWeaponDefinitionByType(WeaponType.RocketLauncher);

        WeaponSystem.Instance.ApplyExplosionDamageAndForces(
            server, rocketPosition, OsFps.RocketExplosionRadius, OsFps.RocketExplosionForce,
            rocketLauncherDefinition.DamagePerBullet, rocketComponent.State.ShooterPlayerId
            );

        // destroy rocket object
        Object.Destroy(rocketComponent.gameObject);

        // send message
        server.ServerPeer.CallRpcOnAllClients("ClientOnDetonateRocket", server.ServerPeer.reliableChannelId, new
        {
            id       = rocketComponent.State.Id,
            position = rocketPosition
        });
    }
Esempio n. 10
0
 public void ServerRocketOnCollisionEnter(Server server, RocketComponent rocketComponent, Collision collision)
 {
     ServerDetonateRocket(server, rocketComponent);
 }