Inheritance: MonoBehaviour
コード例 #1
0
    public void TakeDamage(IEnemy enemy, int amount, Vector3 damageForce, IEffect effect = null)
    {
        if (IsDead)
        {
            return;
        }
        if (effect != null)
        {
            Effects.Add(effect);
        }
        AudioManager.Instance.PlaySfxClip(TakeDamageSound, 1);
        DoFlash(2, 0.3f);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.DeathFlashParticles, transform_.position, 2);
        FloatingTextSpawner.Instance.Spawn(transform_.position + Vector3.up, $"-{amount.ToString()}", Color.red, speed: 1.0f, timeToLive: 1.0f);

        AddPlayerHealthEvent(-amount, enemy.Name);

        Life = Mathf.Max(0, Life - amount);
        GameEvents.RaisePlayerDamaged(enemy);

        UpdateHealth();
        if (Life == 0)
        {
            KilledBy      = enemy.Name;
            KilledByEnemy = enemy;
            Die();
            GameEvents.RaisePlayerKilled(enemy);
        }
    }
コード例 #2
0
ファイル: PlainBulletGun.cs プロジェクト: zimpzon/GFun
    IEnumerator <float> FireCo()
    {
        isFiring_ = true;

        while (true)
        {
            for (int i = 0; i < GunSettings.BurstCount; ++i)
            {
                var direction = latestFiringDirection_;
                var position  = transform_.position + direction * 0.5f;

                var angleOffsets = GetFiringAngleOffsets(GunSettings.FiringSpread, 1.0f);
                int bulletCount  = angleOffsets.Length;
                if (!ammoProvider_.TryUseAmmo(AmmoType, bulletCount))
                {
                    yield break;
                }

                for (int j = 0; j < bulletCount; ++j)
                {
                    float precisionPenalty = Mathf.Min(0.75f, Mathf.Max(0, -0.5f + penalty_ * 0.8f));
                    float precision        = GunSettings.Precision - precisionPenalty;

                    float       angleOffset = angleOffsets[j];
                    const float MaxDegreesOffsetAtLowestPrecision = 30.0f;
                    angleOffset += (Random.value - 0.5f) * (1.0f - precision) * MaxDegreesOffsetAtLowestPrecision;
                    var offsetDirection = Quaternion.AngleAxis(angleOffset, Vector3.forward) * direction;
                    Fire(position, offsetDirection);
                }

                latestFiringTime_ = Time.unscaledTime;

                audioManager_.PlaySfxClip(FireSound, 1, FireSoundPitchVariation, FireSoundPitch);
                cameraShake_.SetMinimumShake(0.75f);

                forceReceiver_.SetMinimumForce(-direction * Recoil);

                var particleCenter = position + direction * 0.3f;
                ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleFlashParticles, particleCenter, 1);
                ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleSmokeParticles, particleCenter, 5);

                float timePenalty = Mathf.Min(0.2f, Mathf.Max(0, -0.5f + penalty_ * 0.4f));
                float waitEndTime = Time.realtimeSinceStartup + GunSettings.TimeBetweenShots + timePenalty;
                while (Time.realtimeSinceStartup < waitEndTime)
                {
                    yield return(0);
                }

                penalty_ = Mathf.Min(2.0f, penalty_ + 0.1f);
            }

            bool continueFiring = GunSettings.FiringMode == FiringMode.Auto && triggerIsDown_;
            if (!continueFiring)
            {
                break;
            }
        }

        isFiring_ = false;
    }
コード例 #3
0
ファイル: EnemyScript.cs プロジェクト: zimpzon/GFun
    IEnumerator <float> DieCo(Vector3 damageForce)
    {
        DoFlash(-0.25f, 100.0f);
        IsDead                      = true;
        gameObject.layer            = SceneGlobals.Instance.DeadEnemyLayer;
        SpriteRenderer.sortingOrder = SceneGlobals.Instance.OnTheFloorSortingValue;
        body_.freezeRotation        = false;
        body_.velocity              = Vector3.zero;
        body_.AddForce(damageForce * 10, ForceMode2D.Impulse);
        float angularVelocityVariation = 1.4f - Random.value * 0.8f;

        body_.angularVelocity  = (damageForce.x > 0 ? -300 : 300) * damageForce.magnitude * angularVelocityVariation;
        BlipRenderer.enabled   = false;
        LightRenderer.enabled  = false;
        ShadowRenderer.enabled = false;

        ParticleScript.EmitAtPosition(ParticleScript.Instance.DeathFlashParticles, transform_.position, 2);
        AudioManager.Instance.PlaySfxClip(DeathSound, maxInstances: 8, DeathSoundPitchVariation, DeathSoundPitch);
        SceneGlobals.Instance.CameraShake.SetMinimumShake(0.6f);

        float endTime = Time.unscaledTime + 2.0f;

        while (Time.unscaledTime < endTime)
        {
            float velocity = body_.velocity.sqrMagnitude;
            if (velocity > 0.02f & Random.value < 0.1f)
            {
                ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleSmokeParticles, transform_.position, 2);
            }

            yield return(0);
        }
    }
コード例 #4
0
    public void OnPoke()
    {
        if (scythesEnabled_)
        {
            return;
        }

        GameEvents.RaiseQuestEvent(QuestEvent.ReaperAnnoyed);

        CurrentRunData.Instance.ShopKeeperPokeCount++;
        int scytheCount = CurrentRunData.Instance.ShopKeeperPokeCount + 1;

        if (scytheCount > Scythes.Length)
        {
            scytheCount = Scythes.Length;
        }

        for (int i = 0; i < scytheCount; ++i)
        {
            if (i != 0 && Random.value < 0.1f)
            {
                continue;
            }

            var     scythe = Scythes[i];
            Vector3 offset = Random.insideUnitCircle * 1.0f;
            scythe.transform.position += offset;
            scythe.SetActive(true);
            ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, scythe.transform.position, 5);
        }

        AudioManager.Instance.PlaySfxClip(ShopKeeperAggroSound, 1);

        scythesEnabled_ = true;
    }
コード例 #5
0
 void Die()
 {
     ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.BulletFizzleParticles, position_, 10);
     ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleFlashParticles, position_, 1);
     ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleSmokeParticles, position_, 10);
     SceneGlobals.Instance.EnemyBullet1Pool.ReturnToPool(this.gameObject);
 }
コード例 #6
0
        public void OnCreate(CEffect owner, string id)
        {
            this.owner = owner;
            this.OnCreate(this.owner.battle, id);
            ParticleSystem[] pss       = this.root.GetComponentsInChildren <ParticleSystem>();
            float            maxLength = 0f;
            ParticleSystem   maxPs     = null;
            int count = pss.Length;

            for (int i = 0; i < count; i++)
            {
                ParticleSystem             ps       = pss[i];
                ParticleSystem.MinMaxCurve lifetime = ps.main.startLifetime;
                float len = Mathf.Max(ps.main.duration, lifetime.constantMax, lifetime.constant, lifetime.curveMax?.length ?? 0, lifetime.curve?.length ?? 0);
                if (len <= maxLength)
                {
                    continue;
                }
                maxLength = len;
                maxPs     = ps;
            }
            if (maxPs != null)
            {
                this.particleScript = maxPs.gameObject.AddComponent <ParticleScript>();
            }
        }
コード例 #7
0
    void Update()
    {
        if (Input.GetAxis("Horizontal") != 0)
        {
            transform.RotateAround(rotateAround.position, Vector3.up, -Input.GetAxis("Horizontal") * rotationSpeed);
        }

        float avgO2   = 0;
        float avgTemp = 0;

        foreach (var p in particlesList)
        {
            ParticleScript ps = p.GetComponent <ParticleScript>();

            if (isVentilated)
            {
                ps.SetO2(ps.o2Con + (ventilationIntence * Time.deltaTime));
            }

            avgO2   += p.GetComponent <ParticleScript>().o2Con;
            avgTemp += p.GetComponent <Rigidbody>().velocity.magnitude;
        }

        avgO2   /= (float)particlesList.Count;
        avgTemp /= (float)particlesList.Count;

        o2ConText.text = (avgO2 * 100f).ToString("0.00") + " %";
        tempText.text  = (avgTemp * 10f).ToString("0.00") + " C°";

        o2Chart.chartLines[Color.blue].Add(new Vector2(Time.timeSinceLevelLoad, avgO2));
        o2Chart.chartLines[Color.red].Add(new Vector2(Time.timeSinceLevelLoad, 1 - avgO2));

        temperatureChart.chartLines[Color.red].Add(new Vector2(Time.timeSinceLevelLoad, avgTemp));
        prevMousePos = Input.mousePosition;
    }
コード例 #8
0
ファイル: RocketLauncher.cs プロジェクト: zimpzon/GFun
    public void OnTriggerDown(Vector3 firingDirection)
    {
        if (Time.unscaledTime < cd_ || awaitingRelease_)
        {
            return;
        }

        if (!ammoProvider_.TryUseAmmo(AmmoType, 1))
        {
            return;
        }

        cd_ = Time.unscaledTime + Cooldown;
        awaitingRelease_ = true;

        LatestFiringDirection    = firingDirection;
        LatestFiringTimeUnscaled = Time.unscaledTime;

        var position = transform_.position + firingDirection * 0.5f;

        Fire(position, firingDirection);
        forceReceiver_.SetMinimumForce(-firingDirection * 3);

        var particleCenter = transform_.position + firingDirection * 0.5f;

        ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleFlashParticles, particleCenter, 1);
        ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleSmokeParticles, particleCenter, 10);
        audioManager_.PlaySfxClip(FireSound, 2, FireSoundPitchVariation, FireSoundPitch);
        cameraShake_.SetMinimumShake(1.0f);
    }
コード例 #9
0
ファイル: SwarmScript.cs プロジェクト: DrRewelka/CSharp
    void SpawnSwarm(out List <ParticleScript> _swarm, ParticleScript _swarmUnityObject, int _amount)
    {
        _swarm = new List <ParticleScript>();
        for (int i = 0; i < _amount; i++)
        {
            // for each particle in swarm it is trying to spawn it somewhere in specified area.
            // the number of tries is hardcoded to 50 and it could be changed later.
            var tries = 50;
            while (tries-- > 0)
            {
                // randomize spawn position for current particle
                var pos = transform.position + new Vector3(Random.Range(-1f, 1f), 0, Random.Range(-1f, 1f)).normalized *Random.Range(0f, transform.localScale.x);

                // if there is any particle in the distance of one meter(hardcoded), loop is continued to try again.
                if (swarm.Any(p => Vector3.Distance(p.transform.position, pos) < 1f))
                {
                    continue;
                }

                // spawn particle in randomized position and break the while loop
                var unit = Instantiate(_swarmUnityObject, pos, Quaternion.identity);
                unit.SetupParticle(this);
                _swarm.Add(unit);
                break;
            }
        }
    }
コード例 #10
0
 public void Die()
 {
     DoFlash(0, 0);
     ParticleScript.EmitAtPosition(ParticleScript.Instance.DeathFlashParticles, transform_.position, 4);
     IsDead = true;
     SetIsHumanControlled(false);
     CameraShake.Instance.SetMinimumShake(0.8f);
 }
コード例 #11
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetAxis("Fire1") != 0)
        {
            RaycastHit hit;
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Clickable")))
            {
                foreach (Transform obj in textHolder.transform)
                {
                    Destroy(obj.gameObject);
                }

                objToFollow = hit.collider.gameObject;

                selectedObj.transform.parent        = objToFollow.transform;
                selectedObj.transform.localPosition = Vector3.zero;
                selectedObj.SetActive(true);
                myCameraObj.transform.parent        = objToFollow.transform;
                myCameraObj.transform.localPosition = Vector3.zero;
                followerType = hit.collider.gameObject.tag;

                valuesToDisplay.Clear();
                if (followerType == "Head")
                {
                    valuesToDisplay["Temperature"] = CreateNewText(new Vector2(0, 0), new Vector2(300, 30));
                    valuesToDisplay["Cycle"]       = CreateNewText(new Vector2(0, -50), new Vector2(300, 30));
                    //valuesToDisplay["Breath Efficiency"] = CreateNewText(new Vector2(0, -100), new Vector2(300, 30));
                }
                else if (followerType == "Particle")
                {
                    valuesToDisplay["Temperature"] = CreateNewText(new Vector2(0, 0), new Vector2(300, 30));
                    valuesToDisplay["Oxygencon"]   = CreateNewText(new Vector2(0, -50), new Vector2(300, 30));
                    valuesToDisplay["CO2con"]      = CreateNewText(new Vector2(0, -100), new Vector2(300, 30));
                }
            }
        }

        if (objToFollow)
        {
            if (followerType == "Head")
            {
                myCameraObj.transform.LookAt(objToFollow.transform.GetChild(0).transform.position);
                BreathScript tmps = objToFollow.GetComponent <BreathScript>();
                valuesToDisplay["Temperature"].text = "Body Temperature: " + tmps.bodyTemp * 10.0f + " C°";
                valuesToDisplay["Cycle"].text       = "Breath Cycle: " + tmps.cycleName;
                //valuesToDisplay["Breath Efficiency"].text = (tmps.breathEfficenty * 100.0f).ToString("0.00") + " %";
            }
            else if (followerType == "Particle")
            {
                myCameraObj.transform.LookAt(objToFollow.GetComponent <Rigidbody>().velocity + myCameraObj.transform.position);
                ParticleScript tmps = objToFollow.GetComponent <ParticleScript>();
                valuesToDisplay["Temperature"].text = "Particle Temperature: " + objToFollow.GetComponent <Rigidbody>().velocity.magnitude * 10.0f + " C°";
                valuesToDisplay["Oxygencon"].text   = "Oxygen level: " + tmps.o2Con * 100f + "%";
                valuesToDisplay["CO2con"].text      = "CO2 level: " + (1 - tmps.o2Con) * 100f + "%";
            }
        }
    }
コード例 #12
0
ファイル: EnemyBullet1Script.cs プロジェクト: zimpzon/GFun
 void Die()
 {
     ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.BulletFizzleParticles, position_, 4);
     SceneGlobals.Instance.EnemyBullet1Pool.ReturnToPool(this.gameObject);
     if (CollisionAction != null)
     {
         CollisionAction(transform_.position);
     }
 }
コード例 #13
0
    // Background
    void BackgroundActivated()
    {
        Background.SetActive(true);
        GameObject     BackgroundParticles = GameObject.Find("BackgroundParticles");
        ParticleScript particleScript      = BackgroundParticles.GetComponent <ParticleScript>();

        particleScript.ToggleActive();
        Background.GetComponent <AudioSource>().Play();
    }
コード例 #14
0
    private IEffect FireArrowEffect(Vector3 pos)
    {
        MapScript.Instance.TriggerExplosion(pos, worldRadius: 1.9f, damageWallsOnly: false, me_);

        ParticleScript.EmitAtPosition(ParticleScript.Instance.WallDestructionParticles, pos, 10);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, pos, 1);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, pos, 10);
        return(new NoEffect());
    }
コード例 #15
0
 public void OnDestroy()
 {
     if (this.particleScript != null)
     {
         Object.Destroy(this.particleScript);
         this.particleScript = null;
     }
     this.OnDestroy(this.owner.battle);
     this.owner = null;
 }
コード例 #16
0
    private void OnCollisionExit(Collision collision)
    {
        if (ButtonFunctions.windowRunning)
        {
            Rigidbody      tmpr        = collision.gameObject.GetComponent <Rigidbody>();
            ParticleScript tmpp        = collision.gameObject.GetComponent <ParticleScript>();
            float          tempDelta   = outsideTemp - tmpr.velocity.magnitude;
            float          oxygendelta = outsideOxygen - tmpp.o2Con;

            tmpr.velocity += tmpr.velocity.normalized * (tempDelta * heatExchange);
            tmpp.SetO2(tmpp.o2Con + oxygendelta * oxygenExchange);
        }
    }
コード例 #17
0
    IEnumerator AI()
    {
        float baseSpeed = movable_.GetSpeed();

        while (true)
        {
            var pos       = movable_.GetPosition();
            var direction = CollisionUtil.GetRandomFreeDirection(pos) * (Random.value * 0.8f + 0.1f);
            movable_.MoveTo(pos + direction);

            float endTime = Time.time + 4 + Random.value;
            while (true)
            {
                if (me_.IsDead)
                {
                    float explosionDelay = Time.time + 2.0f + Random.value * 0.25f;
                    while (Time.time < explosionDelay)
                    {
                        bool flashOn = ((int)(Time.time * 10) & 1) == 0;
                        me_.DoFlash(flashOn ? 0.0f : 10.0f, 1000);

                        yield return(null);
                    }

                    me_.DoFlash(-0.25f, 0);

                    var deathPos = movable_.GetCenter();
                    MapScript.Instance.TriggerExplosion(deathPos, worldRadius: 1.9f, damageWallsOnly: false, me_);

                    ParticleScript.EmitAtPosition(ParticleScript.Instance.WallDestructionParticles, deathPos, 10);
                    ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, deathPos, 1);
                    ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, deathPos, 10);
                    yield break;
                }

                float time = Time.time;
                CheckFire(time);

                if (movable_.MoveTargetReached() || time > endTime)
                {
                    break;
                }

                yield return(null);
            }

            yield return(null);
        }
    }
コード例 #18
0
    public void AttackMelee()
    {
        if (Time.time > _nextAttack)
        {
            animator.SetTrigger("MeleeAttack");
            //  animator.renderer.transform.position += new Vector3()
            //  renderer.enabled = false;
            _nextAttack = Time.time + attackRate;

            GameObject     meleeInstance = Instantiate(particleEffect, aimPoint.transform.position, aimPoint.transform.rotation * Quaternion.Euler(0, 0, 90));
            ParticleScript script        = meleeInstance.GetComponent <ParticleScript>();
            script.setDamage(damage);
            Destroy(meleeInstance, Time.fixedDeltaTime);
        }
    }
コード例 #19
0
    public void ActivateQuest(QuestId id)
    {
        QuestGiverScript.Instance.Close();
        activatedQuest_ = id;

        var pos = QuestPortal.transform.position;

        mapAccess_.TriggerExplosion(QuestPortal.transform.position, 2.9f);
        var portalCenter = pos + Vector3.up * 1.5f;

        ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, portalCenter, 25);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, portalCenter, 1);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.WallDestructionParticles, portalCenter, 10);
        QuestPortal.SetActive(true);
    }
コード例 #20
0
 void Start()
 {
     soundEffects = GameObject.FindGameObjectWithTag("AudioManager").GetComponent <SoundEffectsManager>();
     // Since there will only be 1 inventory at any point of time
     if (playerInventory == null)
     {
         playerInventory = FindObjectOfType <PlayerInventoryScript>();
     }
     if (theItemStuff == null)
     {
         theItemStuff = GetComponent <ItemScript>();
     }
     if (itemInteractParticles == null)
     {
         itemInteractParticles = GameObject.Find(m_ParticleSystemName).GetComponent <ParticleScript>();
     }
 }
コード例 #21
0
    IEnumerator <float> AICo()
    {
        Activate(true);
        collider_.enabled = false;

        transform_.position = Vector3.right * 1000;
        while (!run_)
        {
            yield return(0);
        }

        yield return(Timing.WaitForSeconds(spawnDelay_ + Random.value * 0.5f));

        var basePos     = AiBlackboard.Instance.PlayerPosition;
        var startOffset = new Vector3(0, 0, -12);

        SceneGlobals.Instance.AudioManager.PlaySfxClip(SceneGlobals.Instance.AudioManager.AudioClips.PlayerLand, 3, 0.1f, 1.8f);

        float t = 1;

        while (t >= 0)
        {
            CameraShake.Instance.SetMinimumShake(0.3f);

            var pos = basePos + startOffset * t;
            transform_.SetPositionAndRotation(pos, Quaternion.Euler(0, 0, t * 500));

            t -= Time.unscaledDeltaTime * 2f;
            yield return(0);
        }

        transform_.SetPositionAndRotation(basePos, Quaternion.identity);
        MapScript.Instance.TriggerExplosion(transform_.position, 2.5f);
        ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.WallDestructionParticles, basePos, 10);
//        SceneGlobals.Instance.AudioManager.PlaySfxClip(SceneGlobals.Instance.AudioManager.AudioClips.LargeExplosion1, 3, 0.1f, 1.2f);
//      SceneGlobals.Instance.CameraShake.SetMinimumShake(1.0f);

        collider_.enabled = true;

        while (true)
        {
            bool recentlySeenPlayer = mySenses_.GetPlayerLatestKnownPositionAge() < 2.0f;
            myMovement_.MoveTo(AiBlackboard.Instance.PlayerPosition);
            yield return(Timing.WaitForSeconds(0.05f));
        }
    }
コード例 #22
0
    // Start is called before the first frame update
    void Awake()
    {
        instance = this;
        ParticleSystem ps  = GetComponent <ParticleSystem>();
        var            col = ps.colorOverLifetime;

        col.enabled = false;
        //var bol = ps.startColor;
        var main = ps.main;

        myEmissionModule = ps.emission;
        //main.startSize = particleStartSize;
        //particleStartSize = main.startSize;
        MyMainModule             = ps.main;
        particleStartSizeOnStart = MyMainModule.startSize.constant;
        EmissionsRateOnStart     = myEmissionModule.rateOverDistance.constant;
    }
コード例 #23
0
    IEnumerator <float> WanderCo(float startDelay)
    {
        if (!path_.HasPath)
        {
            yield break;
        }

        yield return(Timing.WaitForSeconds(startDelay));

        float t    = 0;
        float endT = path_.EndT;

        while (true)
        {
            var oldPos = transform_.position;
            var newPos = path_.GetPosAtTime(t);
            transform_.position = newPos;

            var  movement  = newPos - oldPos;
            bool flipX     = movement.x < 0;
            bool isRunning = movement.sqrMagnitude > 0.01f * 0.01f;
            renderer_.sprite = SimpleSpriteAnimator.GetAnimationSprite(isRunning ? Anim.Run : Anim.Idle, Anim.DefaultAnimationFramesPerSecond);
            renderer_.flipX  = flipX;

            if (t == 0)
            {
                ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, newPos, 5);
                ParticleScript.EmitAtPosition(ParticleScript.Instance.WallDestructionParticles, newPos, 5);
                ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, newPos, 1);
            }

            t += Time.unscaledDeltaTime;
            if (t >= endT)
            {
                ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, newPos, 5);
                ParticleScript.EmitAtPosition(ParticleScript.Instance.WallDestructionParticles, newPos, 5);
                ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, newPos, 1);

                gameObject.SetActive(false);
                yield break;
            }

            yield return(0);
        }
    }
コード例 #24
0
ファイル: ChestScript.cs プロジェクト: zimpzon/GFun
    public void TakeDamage(int amount, Vector3 damageForce)
    {
        gameObject.SetActive(false);

        var pos = transform_.position;

        LootDropScript.Instance.SpawnCoins(20, pos);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, pos, 5);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.GoldParticles, pos, 10);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.WallDestructionParticles, pos, 5);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, pos, 1);
        MapScript.Instance.TriggerExplosion(pos, 1.9f, damageWallsOnly: false);

        bool spawnEnemy = Random.value < 0.5f;

        enemy.transform.SetPositionAndRotation(transform_.position, Quaternion.identity);
        enemy.SetActive(spawnEnemy);
    }
コード例 #25
0
	// Update is called once per frame
	void Update () {
        if (targetScript.saturationPoints == targetScript.maxSaturationPoints) {
            GameObject[] ColorNodeList = GameObject.FindGameObjectsWithTag("ColorNode");
            float shortestDist = 99999;
            GameObject closestNode = null;
            foreach (GameObject obj in ColorNodeList) {
                float dist = Vector2.Distance(transform.position, obj.transform.position);
                if (dist < shortestDist) {
                    ParticleScript tempObjScript = obj.GetComponent<ParticleScript>();
                    if (tempObjScript.saturationPoints != tempObjScript.maxSaturationPoints) { 
                        shortestDist = dist;
                        closestNode = obj;
                    }
                }
            }
            target = closestNode.transform;
            targetScript = target.GetComponent<ParticleScript>();
            targetAbsorbtionRadius = target.GetComponent<CircleCollider2D>().radius;
        }
        ParticleSystem.Particle[] particleList = new ParticleSystem.Particle[particleSystem.particleCount];
        particleSystem.GetParticles(particleList);
        for (int i = 0; i < particleList.Length; i++) {
            particleList[i].velocity = Vector3.Lerp(particleList[i].velocity, new Vector3(target.position.x - particleList[i].position.x, target.position.y - particleList[i].position.y, -1), Time.deltaTime * particleAttractionSpeed);
        }
        List<ParticleSystem.Particle> tempList = new List<ParticleSystem.Particle>(particleList);
        for (int i = 0; i < tempList.Count; i++) {
            // Check every particle if it is in absorption radius.
            if (Vector2.Distance(tempList[i].position, target.position) < targetAbsorbtionRadius) {
                // Remove the particle.
                tempList.RemoveAt(i);
                i--;
                // Add saturation to the flower.
                targetScript.saturationPoints += 1;
            }
        }
        // Convert the list back into an array.
        particleList = tempList.ToArray();
        // Apply the particle changes.
        particleSystem.SetParticles(particleList, particleList.Length);
        if (particleSystem.particleCount == 0) {
            Destroy(gameObject);
        }
	}
コード例 #26
0
    public void SetIsHumanControlled(bool isHumanControlled, RigidbodyConstraints2D constraints = RigidbodyConstraints2D.FreezeRotation, bool showChangeEffect = false)
    {
        bool noChange = isHumanControlled == isHumanControlled_;

        if (noChange)
        {
            return;
        }

        isHumanControlled_             = isHumanControlled;
        humanPlayerController_.enabled = isHumanControlled_;
        body_.constraints = constraints;
        if (showChangeEffect && isHumanControlled)
        {
            ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.CharacterSelectedParticles, transform_.position + Vector3.up * 0.5f, 30);
        }

        RefreshInteracting();
    }
コード例 #27
0
		public void ApplicateOn(PSParticleSystem ps)
		{
			if (update != null && update != "")
				updateScript = ParticleScript.GetScript(update);
			else
				updateScript = null;

			if (fixedUpdate != null && fixedUpdate != "")
				fixedUpdateScript = ParticleScript.GetScript(fixedUpdate);
			else
				fixedUpdateScript = null;

			if (lateUpdate != null && lateUpdate != "")
				lateUpdateScript = ParticleScript.GetScript(lateUpdate);
			else
				lateUpdateScript = null;

			ps.scriptModule = this;
		}
コード例 #28
0
ファイル: Shotgun.cs プロジェクト: zimpzon/GFun
    public void OnTriggerDown(Vector3 firingDirection)
    {
        if (Time.unscaledTime < cd_ || awaitingRelease_)
        {
            return;
        }

        if (!ammoProvider_.TryUseAmmo(AmmoType, BulletCount))
        {
            return;
        }

        cd_ = Time.unscaledTime + Cooldown;
        awaitingRelease_ = true;

        LatestFiringDirection    = firingDirection;
        LatestFiringTimeUnscaled = Time.unscaledTime;

        float angle             = -AngleSpread * 0.5f;
        float angleStep         = AngleSpread / (BulletCount - 1);
        float angleMaxVariation = 10;

        for (int j = 0; j < BulletCount; ++j)
        {
            float positionRandomOffset = Random.value * 0.35f;
            var   position             = transform_.position + firingDirection * (0.375f + positionRandomOffset);

            float angleOffset = angle + Random.value * angleMaxVariation;
            angle += angleStep;
            var offsetDirection = Quaternion.AngleAxis(angleOffset, Vector3.forward) * firingDirection;
            Fire(position, offsetDirection);

            forceReceiver_.SetMinimumForce(-firingDirection * 3);
        }

        var particleCenter = transform_.position + firingDirection * 0.5f;

        ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleFlashParticles, particleCenter, 1);
        ParticleScript.EmitAtPosition(SceneGlobals.Instance.ParticleScript.MuzzleSmokeParticles, particleCenter, 5);
        audioManager_.PlaySfxClip(FireSound, 1, 0.1f);
        cameraShake_.SetMinimumShake(0.75f);
    }
コード例 #29
0
    void OnTriggerEnter(Collider col)
    {
        /*
         * if (col.GetComponent<ParticleScript>().particleType.Type2)
         * {
         *  Debug.Log("Collision");
         * }
         */

        ParticleScript pScript = col.GetComponent <ParticleScript>();

        if (pScript != null)
        {
            particleColType = pScript.pType;

            if (particleColType == ParticleScript.ParticleType.TYPE_2)
            {
                Debug.Log("Collision");
            }
        }
    }
コード例 #30
0
    void ExecuteBuy(ShopItemId id, int displayIdx)
    {
        var item = allItems_.Where(i => i.Id == id).Single();

        if (!AcceptBuy(item.Price))
        {
            return;
        }

        var player = PlayableCharacters.GetPlayerInScene();

        switch (id)
        {
        case ShopItemId.Item1Health:
            bool isOverheal = player.Life == player.MaxLife;
            if (isOverheal)
            {
                FloatingTextSpawner.Instance.Spawn(transform.position + Vector3.up * 0.5f, "Hah!", Color.white);
            }
            player.AddHealth(1, "Shop Item");
            break;

        case ShopItemId.IncreaseMaxHp1:
            player.AddMaxHealth(1);
            break;

        default:
            print("Not implemented: " + id);
            break;
        }

        CurrentRunData.Instance.ItemsBought++;

        var display = Displays[displayIdx];

        ParticleScript.EmitAtPosition(ParticleScript.Instance.PlayerLandParticles, display.transform.position, 5);
        ParticleScript.EmitAtPosition(ParticleScript.Instance.MuzzleFlashParticles, display.transform.position, 1);
        display.SetActive(false);
        GameSceneLogic.Instance.UpdateCoinWidget();
    }
コード例 #31
0
    void Awake()
    {
        MapLayer               = LayerMask.NameToLayer("Map");
        PlayerLayer            = LayerMask.NameToLayer("Player");
        PlayerDamageLayer      = LayerMask.NameToLayer("PlayerDamage");
        PlayerInteractionLayer = LayerMask.NameToLayer("PlayerInteraction");
        EnemyLayer             = LayerMask.NameToLayer("Enemy");
        EnemyNoWallsLayer      = LayerMask.NameToLayer("EnemyNoWalls");
        EnemyDamageLayer       = LayerMask.NameToLayer("EnemyDamage");
        DeadEnemyLayer         = LayerMask.NameToLayer("DeadEnemy");
        EnemyDeadOrAliveMask   = (1 << EnemyLayer) + (1 << EnemyNoWallsLayer) + (1 << DeadEnemyLayer);
        EnemyAliveMask         = (1 << EnemyLayer) + (1 << EnemyNoWallsLayer);

        CameraPositioner    = FindObjectOfType <CameraPositioner>();
        CameraShake         = FindObjectOfType <CameraShake>();
        AudioManager        = FindObjectOfType <AudioManager>();
        MapScript           = FindObjectOfType <MapScript>();
        MapAccess           = (IMapAccess)MapScript;
        ParticleScript      = FindObjectOfType <ParticleScript>();
        DebugLinesScript    = FindObjectOfType <DebugLinesScript>();
        LightingImageEffect = FindObjectOfType <LightingImageEffect>();
        LightingCamera      = FindObjectOfType <LightingCamera>();
        MapCamera           = FindObjectOfType <MiniMapCamera>();
        PlayableCharacters  = FindObjectOfType <PlayableCharacters>();
        GraveStoneManager   = FindObjectOfType <GraveStoneManager>();

        NullCheck(MapLayer);
        NullCheck(PlayerLayer);
        NullCheck(PlayerDamageLayer);
        NullCheck(PlayerInteractionLayer);
        NullCheck(EnemyLayer);
        NullCheck(EnemyDamageLayer);
        NullCheck(DeadEnemyLayer);

        Instance = this;
    }
コード例 #32
0
	// Use this for initialization
	void Start () {
        particleSystem = GetComponent<ParticleSystem>();
        targetScript = target.GetComponent<ParticleScript>();
        targetAbsorbtionRadius = target.GetComponent<CircleCollider2D>().radius;
	}