示例#1
0
    private void die()
    {
        foreach (DeathCallback callback in this.OnDeathCallbacks)
            callback(this);

        if (this.GibsPoolKey != null && this.GibsPoolKey != "")
        {
            GameObject gibs = ObjectPools.GetPooledObject(this.GibsPoolKey);
            gibs.transform.position = this.transform.position;
            gibs.transform.rotation = this.transform.rotation;
            GibsBehavior gibsBehavior = gibs.GetComponent<GibsBehavior>();
            gibsBehavior.Knockback = _deathKnockback;
            gibsBehavior.ImpactVector = _deathImpactVector;
            AllegianceColorizer colorizer = this.GetComponent<AllegianceColorizer>();
            if (colorizer != null)
            {
                gibsBehavior.AllegianceInfo = colorizer.AllegianceInfo;
            }
        }

        if (this.ShakeMagnitudeOnDeath > 0.0f)
            Camera.main.GetComponent<ShakeHandler>().ApplyImpact(this.ShakeMagnitudeOnDeath);

        Destroy(this.gameObject);
    }
示例#2
0
    void Start()
    {
        _acceleration             = this.AccelerationDuration > 0 ? this.MaxSpeed / this.AccelerationDuration : this.MaxSpeed * 1000;
        _weapon                   = this.GetComponent <Weapon>();
        _weapon.ShotFiredCallback = shotFired;
        _aimAxis                  = Vector2.zero;

        this.ControllerAimerSpeed = PlayerPrefs.GetFloat(OptionsMenu.CONTROLLER_AIM_SPEED_KEY, OptionsMenu.DEFAULT_CONTROLLER_AIM_SPEED);
        if (PlayerPrefs.GetInt(OptionsMenu.CONTROLLER_AIM_LAST_DIR_KEY, OptionsMenu.DEFAULT_CONTROLLER_AIM_LAST_DIR) == 0)
        {
            this.ControllerMinAimAmt = 0.0f;
        }

        this.Reticle.PlayerIndex = this.PlayerIndex;
        _damagable = this.GetComponent <Damagable>();
        _damagable.OnDeathCallbacks.Add(died);
        this.localNotifier.Listen(CollisionEvent.NAME, this, this.OnCollide);
        updateSlots();

        if (this.PlayerIndex != 0)
        {
            AllegianceColorizer colorizer = this.GetComponent <AllegianceColorizer>();
            AllegianceInfo      info      = colorizer.AllegianceInfo;
            info.MemberId = this.PlayerIndex;
            colorizer.UpdateVisual(info);
            _weapon.AllegianceInfo = info;

            this.spriteRenderer.sprite = this.SpriteAtlas.GetSprites()["player_body_" + this.PlayerIndex];
        }

        if (_initialHealth > 0)
        {
            _damagable.DirectSetHealth(_initialHealth);
        }
    }
示例#3
0
    void Update()
    {
        if (!_setup)
        {
            for (int i = 0; i < DynamicData.MAX_PLAYERS; ++i)
            {
                SessionPlayer p = DynamicData.GetSessionPlayer(i);
                if (p.HasJoined)
                {
                    if (ReInput.players.GetPlayer(p.RewiredId).controllers.hasMouse)
                    {
                        _player = p;
                        AllegianceColorizer colorizer = this.GetComponent <AllegianceColorizer>();
                        AllegianceInfo      info      = colorizer.AllegianceInfo;
                        info.MemberId = i;
                        colorizer.UpdateVisual(info);
                        break;
                    }
                }
            }
            _setup = true;
        }

        if (_player != null)
        {
            if (PauseController.IsPaused())
            {
                _rectTransform.position = new Vector3(-99999, -99999, _rectTransform.position.z);
            }
            else
            {
                Player  rewiredP  = ReInput.players.GetPlayer(_player.RewiredId);
                Vector2 screenPos = rewiredP.controllers.Mouse.screenPosition;
                _rectTransform.position = new Vector3(screenPos.x, screenPos.y, _rectTransform.position.z);
            }
        }
    }
示例#4
0
    public void LaunchWithWeaponType(Vector2 direction, WeaponType weaponType, AllegianceInfo allegianceInfo, bool ignoreExplosion = false)
    {
        this.WeaponType  = weaponType;
        _ignoreExplosion = ignoreExplosion;
        this.Velocity    = weaponType.TravelType == WeaponType.TRAVEL_TYPE_LASER ? Vector2.zero :
                           new Vector2(direction.x * weaponType.ShotSpeed, direction.y * weaponType.ShotSpeed);

        _allegianceInfo = allegianceInfo;
        AllegianceColorizer allegianceColorizer = this.GetComponent <AllegianceColorizer>();

        if (allegianceColorizer != null)
        {
            allegianceColorizer.UpdateVisual(allegianceInfo);
        }

        _bouncesRemaining = weaponType.MaximumBounces;

        if (!_listeningToCollisions)
        {
            _listeningToCollisions = true;
            this.localNotifier.Listen(CollisionEvent.NAME, this, this.OnCollide);
        }

        string allegianceString = allegianceInfo.LayerString;
        int    ourLayer         = LayerMask.NameToLayer(allegianceString + " Missile");

        this.gameObject.layer = ourLayer;
        LayerMask alliedVulnerable  = (1 << LayerMask.NameToLayer(allegianceString + " Vulnerable"));
        LayerMask levelGeometryMask = (1 << LayerMask.NameToLayer("Level Geometry"));
        LayerMask nothing           = 0;

        if (_damager == null)
        {
            _damager = this.GetComponent <Damager>();
        }
        _damager.DamagableLayers          = (~alliedVulnerable) & GetVulnerableLayers();
        _damager.Damage                   = weaponType.Damage;
        _damager.Knockback                = weaponType.Knockback;
        _damager.HitInvincibilityDuration = weaponType.HitInvincibilityDuration;

        //TODO - Only do this in campaign mode!!
        if (_allegianceInfo.Allegiance == Allegiance.Player)
        {
            _damager.AddAttackLandedCallback(landedAttack);
        }

        this.BounceLayerMask  = weaponType.MaximumBounces > 0 ? levelGeometryMask : nothing;
        this.CollisionMask    = _damager.DamagableLayers | levelGeometryMask;
        this.HaltMovementMask = weaponType.TravelType == WeaponType.TRAVEL_TYPE_LASER ? levelGeometryMask : this.CollisionMask;

        _explosionRemaining = this.WeaponType.SpecialEffect == WeaponType.SPECIAL_EXPLOSION;
        _isLaser            = weaponType.TravelType == WeaponType.TRAVEL_TYPE_LASER;

        if (_collider == null)
        {
            _collider = this.GetComponent <IntegerCollider>();
        }
        else
        {
            _collider.AddToCollisionPool();
        }

        if (_isLaser)
        {
            handleLaserCast(direction);
        }
    }