상속: PoolObject
예제 #1
0
 // Use this for initialization
 void Start()
 {
     anim = GetComponent<Animator>();
     anim.SetBool ("open", false);
     one = GameObject.Find ("Sphere").GetComponentInChildren<Laser> ();
     two = GameObject.Find ("Sphere 1").GetComponentInChildren<Laser2> ();
 }
예제 #2
0
파일: Sink.cs 프로젝트: foxor2/attell
 public void hitByLaser(Laser laser)
 {
     if (!hit) {
         MiniGameController.endMiniGame(edge);
         hit = true;
     }
 }
예제 #3
0
        public override IProjectile ProduceAttack()
        {
            var projectile = new Laser((this.Shields > 0 ? this.Shields / 2 : 0) + this.Damage);
            this.IncreaseProjectilesFired();

            return projectile;
        }
예제 #4
0
 public override void UpdateLaser(BoardForm board, Laser laser, Point point)
 {
     if (laser.CurrentDirection == InputDirection &&
         laser.CurrentColour == InputColour)
         Activated = true;
     laser.SetSegmentEnd(Center);
     laser.Kill();
 }
예제 #5
0
    public void CreateLaser(Robot robot, Robot robotCollided)
    {
        SoundLaser();

        Laser laser = new Laser();
        laser.StartTime = Time.time;
        laser.StartPosition = robot.transform.position;
        laser.EndPosition = robotCollided.transform.position;

        ListLaser.Add(laser);
    }
예제 #6
0
    void Awake()
    {
        Crosshairs = Instantiate(Resources.Load("Crosshair") as GameObject);
        Crosshairs.transform.SetParent(this.transform);
        Crosshairs.SetActive(this.enabled);

        laser = this.gameObject.AddComponent<Laser>();
        laser.enabled = this.enabled;
        hand = this.transform.parent.gameObject.GetComponent<Hand>();

        //TODO: I think it would be a good idea to be able to toggle between laser based 3d positioning and hand with thumb stick based positioning
    }
예제 #7
0
파일: Laser.cs 프로젝트: Orkad/SpaceContest
 public static Laser FireLaserOverNetwork(Transform from,Transform to,float spd,float dmg,Laser prefab = null)
 {
     //Charge le prefab par defaut
     if(prefab == null)
         prefab = Resources.Load<Laser>("Laser");
     Laser instance = Network.Instantiate(prefab,from.position,Quaternion.identity,0) as Laser;
     instance.origin = from;
     instance.target = to;
     instance.speed = spd;
     instance.damages = dmg;
     return instance;
 }
예제 #8
0
    public void hitByLaser(Laser laser)
    {
        rotateable = false;

        int quadrant = laser.direction.x > 0 ? (laser.direction.y > 0 ? 0 : 3) : (laser.direction.y > 0 ? 1 : 2);
        float firstQuadrantTan = Mathf.Atan(Mathf.Abs(laser.direction.y) / Mathf.Abs(laser.direction.x)) / Mathf.Deg2Rad;
        float laserAngle =
            quadrant == 0 ? firstQuadrantTan : (
            quadrant == 1 ? 180f - firstQuadrantTan : (
            quadrant == 2 ? 180f + firstQuadrantTan : (
            360f - firstQuadrantTan
        )));

        float clockTestAngle = (laserAngle + 45f) % 360f;
        bool rotClock = clockTestAngle < rotation + 0.001f && clockTestAngle > rotation - 0.001f;
        float antiClockTestAngle = (laserAngle + 315f) % 360f;
        bool rotAnti = antiClockTestAngle < rotation + 0.001f && antiClockTestAngle > rotation - 0.001f;

        Vector3 newDirection;

        if (rotClock) {
            newDirection = new Vector3(
                laser.direction.y,
                -laser.direction.x,
                laser.direction.z
            );
        }
        else if (rotAnti) {
            newDirection = new Vector3(
                -laser.direction.y,
                laser.direction.x,
                laser.direction.z
            );
        }
        else {
            gameObject.layer = 2; //won't get detected by the next raycast
            Destroy(gameObject);
            laser.project(laser.direction);
            laser.Ready = true;
            return;
        }

        Vector3 origin = transform.position + (newDirection.normalized * fireDistance);
        laser.Ready = false;
        GameObject go = Instantiate(laser.gameObject) as GameObject;
        go.transform.parent = laser.transform.parent;
        laser.Ready = true;
        Laser l = go.GetComponent<Laser>();
        l.origin = origin;
        l.project(newDirection);
        l.Ready = true;
    }
예제 #9
0
    public void Impact(Laser laser, RaycastHit hit)
    {
        GameObject impactObject = impactPool.Spawn();
        LaserImpact impact = impactObject.GetComponent<LaserImpact>();
        impact.Spawn(this, hit.point + hit.normal * 0.2f);
        weaponPool.Despawn(laser.gameObject);

        //apply damage
        GameObject target = hit.transform.gameObject;
        Entity entity = target.GetComponent<Entity>();
        if (entity == null) return;
        //        entity.ApplyDamage(laser.damage, hit);
    }
예제 #10
0
    protected override void Awake () {
        base.Awake();
        _go = GameObject.Find("Pod");
        m_pod = _go.GetComponent<Transform>();
        m_laser = GetComponent<Laser>();
        m_beam = GetComponentInChildren<LineRenderer>();

        m_laser.gameObject.SetActive(startActive);
        m_beam.gameObject.SetActive(false);

        m_beam_bc = m_laser.GetComponent<BoxCollider2D>();
        m_beam_bc.enabled = false;
    }
        public override void UpdateLaser(BoardForm board, Laser laser, Point point)
        {
            laser.SetSegmentEnd(Center);

            if (InUse || !ValidInputDir(laser))
            {
                laser.Kill();
                return;
            }

            InUse = true;
            laser.SetSegmentStart(Center);
            laser.SetDirection(OutputDirection);
        }
예제 #12
0
 public SpriteManager(Texture2D texture, Vector2 position, Vector2 screen, Game1 aGame, Asis anAsis, Laser aLaser, Enemy aEnemy, SoundEffect aLaserSoundEffect, SoundEffect aBackwardsLaserSoundEffect)
     : base(texture, position)
 {
     myPosition = position;
     myScreenSize = screen;
     myGame = aGame;
     Asis = anAsis;
     Laser = aLaser;
     redEnemy = aEnemy;
     LaserSoundEffect = aLaserSoundEffect;
     BackwardsLaserSoundEffect = aBackwardsLaserSoundEffect;
     myState = new IdleState(this);
     TimeStack = new Stack();
     SetUpInput();
 }
예제 #13
0
        public override Laser Attack(float seconds)
        {
            LastFired += seconds;

            if (LastFired >= FireRate)
            {
                LastFired -= FireRate;

                Vector2 direction = Target.Position - Position;
                Laser laser = new Laser(Tint, 0, Position, direction, 300f, LaserAlignment.Enemy);
                laser.Path.Move(30);
                return laser;
            }

            return null;
        }
예제 #14
0
    public void UpdateWeapon()
    {
        if (laser != null)
            laser.Release();

        if (spirit.heart == Spirit.Alignment.Dark)
        {
            laser = darkLaser;
        }
        else if (spirit.heart == Spirit.Alignment.Light)
        {
            laser = rainbowLaser;
        }
        else if (spirit.heart == Spirit.Alignment.Neutral)
        {
            laser = darkLaser;
        }
    }
예제 #15
0
        public override void Initialize()
        {
            //PrimaryWeapon
            PrimaryWeapon = new Laser(gamePlayScreen, this){LaserColour = Color.Red, LaserThickness = 3};
            isArmed = true;
            range = 350;
            visibleRange = 400f;

            //Hit points
            maxHP = 600;
            startingHP = maxHP;
            currentHP = startingHP;

            //Image
            texture = ImageManager.LaserTowerTexture;
            width = (int)(gamePlayScreen.VP.Width * 0.06);
            height = (int)(gamePlayScreen.VP.Height * 0.1);
            base.Initialize();
        }
예제 #16
0
        /// <summary>
        /// Tir 8 lasers avec un angle
        /// </summary>
        /// <param name="lstLasers">liste de moving object où ajouter les lasers tirés</param>
        protected override void Shoot(ref List<MovingObject> lstLasers)
        {
            Laser laser;

            ////Pour un kindof shotGun en fait
            for (int i = -4; i < 4; i++)
            {
                laser = new Laser(_parent, false, _ttl);

                laser.SpeedX = Laser.LASER_SPEED * (float)Math.Cos(_parent.RotationInRadians - (float)i / (float)12);
                laser.SpeedY = Laser.LASER_SPEED * (float)Math.Sin(_parent.RotationInRadians - (float)i / (float)12);

                laser.Speed += _parent.Speed;
                lstLasers.Add(laser);
            }

            if (_parent is EnnemyShip)
            {
                //SoundManager.Play(SoundManager.ShotGun, 0.2f);
            }
            else
                SoundManager.Play(SoundManager.ShotGun, 0.2f);
        }
예제 #17
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            Asis Asis = new Asis(Content.Load<Texture2D>("Asis"), new Vector2(0, 0),
                new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight));

            Laser Laser = new Laser(Content.Load<Texture2D>("Laser"), new Vector2(0, 0),
                new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight));

            Enemy redEnemy = new Enemy(Content.Load<Texture2D>("enemy-red"), new Vector2(0, 0),
                new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight));

            SpriteManager SpriteManager = new SpriteManager(Content.Load<Texture2D>("Laser"), new Vector2(-1000, -1000),
                new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight), this, Asis, Laser, redEnemy, Content.Load<SoundEffect>("LaserSoundEffect"), Content.Load<SoundEffect>("LaserSoundEffectBackwards"));

            mySprites.Add(Asis);
            mySprites.Add(Laser);
            mySprites.Add(redEnemy);
            mySprites.Add(SpriteManager);
        }
예제 #18
0
 public override int HandleState(List <GamePlayer> players, SpawnManager spawnManager, LaserManager laserManager, Spawn spawn, Laser laser)
 {
     if (laser.Strength >= spawn.Toughness)
     {
         players.ToList().FirstOrDefault(p => p.Name == laser.Player).LaserStrength -= spawn.Toughness;
         if (players.ToList().FirstOrDefault(p => p.Name == laser.Player).LaserStrength < 1)
         {
             players.ToList().FirstOrDefault(p => p.Name == laser.Player).LaserStrength = 1;
         }
         if (spawn.subordinates != null)
         {
             players.ToList().FirstOrDefault(p => p.Name == laser.Player).Score += spawn.subordinates.Count;
         }
         spawnManager.DestroySpawn(spawn.Id);
         laserManager.DestroyLaser(laser.Id);
         players.ToList().FirstOrDefault(p => p.Name == laser.Player).Score += spawn.Toughness;
     }
     else
     {
         players.ToList().FirstOrDefault(p => p.Name == laser.Player).LaserStrength = 1;
         spawn.Toughness -= 1;
         laserManager.DestroyLaser(laser.Id);
         players.ToList().FirstOrDefault(p => p.Name == laser.Player).Score += 1;
     }
     return(0);
 }
예제 #19
0
 public override int HandleState(List <GamePlayer> players, SpawnManager spawnManager, LaserManager laserManager, Spawn spawn, Laser laser)
 {
     players.ToList().FirstOrDefault(p => p.Name == laser.Player).LaserStrength += spawn.Toughness;
     players.ToList().FirstOrDefault(p => p.Name == laser.Player).Score         += spawn.Toughness;
     spawnManager.DestroySpawn(spawn.Id);
     laserManager.DestroyLaser(laser.Id);
     return(0);
 }
예제 #20
0
 private Direction getNewDirection(Laser laser, int face)
 {
     return(Reflect(laser.direction));
 }
예제 #21
0
 void EditButtonLaser(Laser laser)
 {
     this.editLaser = laser;
     this.openLaserPopUp();
 }
예제 #22
0
        private void Run()
        {
            string[] lines      = File.ReadAllLines(llLogFile.Text);
            int      startIndex = int.Parse(txtPrevLaserIndex.Text);

            mSeed      = new Pose2D();
            mPrevPose  = null;
            mCurrPose  = null;
            mEstimated = new Pose2D();

            //mSM = new MbIcpScanMatcher();
            mSM = new WeightedScanMatcher();

            bool Completed = false;

            while (mRun.ThreadState != ThreadState.AbortRequested)
            {
                if (startIndex >= lines.Length)
                {
                    break;
                }

                string l = lines[startIndex++];
                CarmenLogParser(l, ref Completed);
                //USARSimLogParser(l, ref Completed);

                if (Completed)
                {
                    Completed = false;

                    ScanObservation m1 = new ScanObservation(m3DScaleFactor, mPrevLaser);
                    ScanObservation m2 = new ScanObservation(m3DScaleFactor, mCurrLaser);

                    MatchResult mR = null;

                    if (chkSeed.Checked)
                    {
                        //mSeed.Position *= 0.003f;
                        //mSeed.Rotation *= 0.9f;
                        mR = mSM.Match(m1, m2, mSeed);
                    }
                    else
                    {
                        //Pose2D initQ = new Pose2D(0.1, 0.1, 0.1);
                        mR = mSM.Match(m1, m2, new Pose2D());
                    }

                    if (mR.Converged)
                    {
                        Pose2D es = mR.EstimatedOdometry;

                        mEstimated = compound(mEstimated, es);

                        mCurrLaser.posRobot = new Pose2D(mEstimated.Position, mEstimated.Rotation);

                        lock (mMapPoints)
                        {
                            ComputeMapPoints(mCurrLaser, 0);
                        }

                        rwDrawer.Invalidate();
                    }

                    //if (max(abs(mSeed)) > 0.01f)
                    {
                        mPrevLaser = mCurrLaser;
                        mSeed      = new Pose2D();
                    }
                }

                Thread.Sleep(10);
            }
        }
예제 #23
0
        public override IProjectile ProduceAttack()
        {
            var projectile = new Laser(this.Damage + (this.Shields / 2));

            return(projectile);
        }
예제 #24
0
 private void InitiateLasers()
 {
     laser = new Laser(gameObject, maxRange);
 }
예제 #25
0
 public void AddLaser(Laser laser)
 {
     lasers.Add(laser);
 }
예제 #26
0
 public StandardLaser(Laser reference)
 {
     laser = reference;
 }
예제 #27
0
    void FireLaser(bool _haveAmmo)
    {
        if (_haveAmmo == true)
        {
            _canFire = Time.time + _fireRate;

            if (_isTargetedShotActive == true)
            {
                //Debug.LogWarning("bool 1");

                Instantiate(_targetedShotPrefab, transform.position, Quaternion.identity);
                // need this false ? i think yes becasue i do not have coroutine and I want to have it all the time at my disposal ?!
                _isTargetedShotActive = false;
            }

            else if (_isCloseShotActive == true)
            {
                //Debug.LogWarning("!!! BOOL 2 !!! : _isCloseShotActive is " + _isCloseShotActive);

                GameObject _closeLaser = Instantiate(_laserPrefab, transform.position, Quaternion.identity);
                //Debug.LogWarning("_closeLaser Go name is >> " + _closeLaser.name);

                // need this false ? i have coroutine to stop it in 5s so i think not ?!
                //                 _isCloseShotActive = false;

                // either I MAKE A NEW PREFAB for this, either i get the info from current LASER !!

                //               Laser _laserClose = GameObject.FindGameObjectWithTag("Laser").GetComponent<Laser>(); /// no need becasue i know exactly my instantiated laser prefab as _closeLaser !!

                Laser _laserClose = _closeLaser.GetComponent <Laser>();

                if (_laserClose != null)
                {
                    //Debug.LogWarning("enter the good bracket !! _laserClose is NOT null !!! >> " + _laserClose.name);
                    _laserClose.AssignLaserBehaviours(true);
                    _isCloseShotActive = false;
                }
                else
                {
                    Debug.LogWarning("_laserClose is null !!! >> " + _laserClose.name);
                }
            }
            else if (_isFiveShotActive == true)
            {
                //Debug.LogWarning("bool 3");

                Instantiate(_FiveShotPrefab, transform.position, Quaternion.identity);
            }
            else if (_isTripleShotActive == true)
            {
                //Debug.LogWarning("bool 4");

                Instantiate(_tripleShotPrefab, transform.position, Quaternion.identity);
            }
            else
            {
                //Debug.LogWarning("bool 5");

                Instantiate(_laserPrefab, transform.position + new Vector3(0, 0.8f, 0), Quaternion.identity);
            }

            _audioSource.Play(0);
            _lasersShot++;
            _ammo = 15 - _lasersShot;
        }
        else
        {
            Debug.Log("CANNOT FIRE !!");
        }
    }
예제 #28
0
 // Start is called before the first frame update
 void Start()
 {
     laser = GameObject.Find("Laser").GetComponent <Laser>();
 }
예제 #29
0
 public override void UpdateLaser(BoardForm board, Laser laser, Point point)
 {
     laser.SetSegmentEnd(Center);
     laser.Kill();
 }
예제 #30
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            Player player = collision.transform.GetComponent <Player>();
            AudioSource.PlayClipAtPoint(_pickupSound, transform.position);
            if (player != null)
            {
                switch (_powerupID)
                {
                case 0:
                    player.TripleShotActive();
                    break;

                case 1:
                    player.SpeedActive();
                    break;

                case 2:
                    player.ShieldsActive();
                    break;

                case 3:
                    player.RefillAmmo();
                    break;

                case 4:
                    player.NegativeSpeed();
                    break;

                case 5:
                    player.HealthPickup();
                    break;

                case 6:
                    player.SplitShotActive();
                    break;

                case 7:
                    player.HomingActive();
                    break;

                case 8:
                    player.MagnetActive();
                    break;

                default:
                    Debug.LogError("Invalid Selection for Powerup");
                    break;
                }
                Destroy(this.gameObject);
            }
        }
        if (collision.tag == "Laser")
        {
            Laser lasers = collision.GetComponent <Laser>();
            if (lasers != null)
            {
                bool isEnemy = lasers.isEnemyLaser();
                if (isEnemy == true)
                {
                    Destroy(this.gameObject);
                }
            }
        }
    }
예제 #31
0
	void Awake() {
		laser = transform.parent.Find ("Gun").GetComponent<Laser> ();

		hitObject = new List<GameObject> ();
	}
예제 #32
0
 void InitLaser()
 {
     darkLaser = new Laser.DarkLaser(this);
     rainbowLaser = new Laser.RainbowLaser(this);
     laser = darkLaser;
 }
예제 #33
0
 void Start()
 {
     hand = GetComponent<Hand>();
     laser = transform.GetComponentInChildren<Laser>();
     selection.HoverMaterial = HoverMaterial;
     selection.ActiveMaterial = SelectedMaterial;
     anchorRestLocalPosition = AnchorObject.localPosition;
 }
예제 #34
0
 /// <summary>
 /// Processes the combined input lasers and updates output lasers (default: Updates front facing output laser to combined laser)
 /// </summary>
 /// <param name="combinedLaser"> Laser to be processed </param>
 public virtual void ProcessLaserInput(Laser combinedLaser)
 {
     UpdateLaser(new DirectionalLaser(combinedLaser, LaserUtil.GetDirection(transform.forward)));
 }
        public override void UpdateLaser(BoardForm board, Laser laser, Point point)
        {
            var dir = laser.CurrentDirection;
            if (PassThrough.Contains(dir))
            {
                return;
            }

            laser.SetSegmentEnd(Center);

            if (!InUse_Left && InputOutputMappingLeft.ContainsKey(dir))
            {
                laser.SetSegmentStart(Center);
                laser.SetDirection(InputOutputMappingLeft[dir]);
                InUse_Left = true;
            }
            else if (!InUse_Right && InputOutputMappingRight.ContainsKey(dir))
            {
                laser.SetSegmentStart(Center);
                laser.SetDirection(InputOutputMappingRight[dir]);
                InUse_Right = true;
            }
            else
            {
                laser.Kill();
            }
        }
예제 #36
0
 public bool CalcLaserHitPos(Laser hittedLaser, Vector3 hitPoint, Vector3 hitNormal, out Vector3 hitPointOut, out Vector3 hitNormalOut)
 {
     hitPointOut  = hitPoint;
     hitNormalOut = hitNormal;
     return(true);
 }
예제 #37
0
    // "Collider other" will be the object that collided with the Enemy object
    private void OnTriggerEnter2D(Collider2D other)
    {
        // if "other" is the player:
        // Damage the player FIRST (by removing 1 of their lives) and destroy this enemy object. If we destroy the enemy object before damaging the player, this script(attached to the enemy object) gets destroyed and then we can't damage the player b/c the code for that exists in this script.
        // We added a tag to the Player object in Unity called "Player" so now we can detect a collision with the player here (when it collides with the enemy)
        // We use CompareTag() to see if the tag on the collider is "Player" (the player object). This way is cleaner than saying other.tag == "Player" b/c CompareTag() does not allocate memory on the heap
        if (other.CompareTag("Player"))
        {
            // get the Player component. First we access the variable "other", which should be the Player object we collided into. Then we need the transform of the Player object so we put ".transform". Then we use GetComponent<>() and pass in the name of the component (that you can get in Unity) into the T brackets<>. Then after that you can see you have access to the Damage() method you made in the Player script (when you called it below) from here in the Enemy script. Accessing 1 script from another is called "script communication"
            // Within this script, the only component whose transform you have direct access to is the Enemy component. But we can indirectly access another component off of a variable like how we do with the Collider variable here with ".transform"
            // The Transform is the root of the object where you can access other components like MeshRenderer, but you must say ".transform" first. I'm only writing this comment b/c in Unity it doesn't look like the components like "MeshRenderer" are in the "Transform" dropdown
            // We stored the getting of the component in a variable so we can null check it right afterwards. Because, what if the Player component doesn't exist yet or was destroyed and doesn't exist anymore? You may get a null reference exception if you tried to run the Damage() method on the Player script (which also wouldn't exist if the Player was destroyed). Null checking is an important optimized way to avoid these errors
            Player player = other.transform.GetComponent <Player>();

            if (player != null)
            {
                player.setIsEnemyCollisionTrue();
                int randomPoints = UnityEngine.Random.Range(5, 13);

                player.AddScore(randomPoints);


                // remove 1 life from player
                player.Damage();
            }
            // trigger the explosion animation by passing in the name of the Trigger you created (OnEnemyDeath) before you destroy the enemy. We created that Trigger b/c we didn't want the enemy death animation to play until the enemy was destroyed. Just make sure to wait the amount of seconds the animation lasts before destroying or the animation will fail. You can do this by passing in a float for the number of seconds in the Destroy() method as a second argument
            _anim.SetTrigger("OnEnemyDeath");
            _speed = 0; // set enemy speed to 0 so the Enemy's Collider won't hit the player while the enemy is moving while being destroyed
            // Play the first AudioSource's clip by using an index of 0
            _audioSources[0].Play();
            // destroy the collider so that when bump into the enemy, only 1 explosion (the sound of the explosion)happens and to prevent player from losing more than 1 life
            Destroy(GetComponent <Collider2D>());

            // Since we delay the destruction of the enemy to let animation and sound effect play, set to null so enemy can't fire when it's destroyed. Can only set floats to null if it has a "?" in front of it's datatype
            _canFire = null;


            // deactivate the child when destroying this object
            thruster.SetActive(false);

            Destroy(gameObject, 2.5f); // destroy this enemy object 2.5 secs after being hit
        }

        // if "other" is the laser:
        // Destroy the laser FIRST and then destroy this enemy object. If we destroy the enemy object before the laser, this script(attached to the enemy object) gets destroyed and then we can't destroy the laser b/c the code for that exists in this script
        // We added a tag to the Laser object in Unity called "Laser" so now we can detect a collision with the laser here (when it collides with the enemy) and then destroy the laser, giving the illusion that the laser did damage to the enemy
        if (other.CompareTag("Laser"))
        {
            // Get the component we assume to be of type Laser (we assume a laser is colliding with this enemy and it should be b/c we used CompareTag() to look for the Laser). We need the type to be Laser so we can get access to the _isEnemyLaser boolean in Laser.cs
            Laser enemyLaser = other.gameObject.GetComponent <Laser>();

            if (enemyLaser == null)
            {
                Debug.Log("Laser is null ::Enemy.cs::OnTriggerEnter2D()");
            }

            // If it's an enemy laser (by anither enemy) hitting this enemy, let the laser pass through it by doing nothing
            if (enemyLaser.getIsEnemyLaser() == true)
            {
            }
            // Else, do everything you would to destroy this enemy object
            else
            {
                Destroy(other.gameObject);

                // Using this commented out code uses too much resources. GetComponent<>() is an expensive call, and what if we have 50 or more enemies? That means 50 GetComponent calls. So instead, we declare a global Player varaible, and the assign it the Player in void Start() so we'll only use 1 call to get the Player and we can use this reference as many times as we want
                // Player p = GameObject.Find("Player").GetComponent<Player>();

                // Checking if the player is null here is better than doing this i the Start() method b/c Start() only gets called once when the game starts, so if the Player became null after that (by dying) we would get an error here

                // 5-12 range we need to pass in 5 and 13 b/c ints don't include the max
                int randomPoints = UnityEngine.Random.Range(5, 13);

                try
                {
                    if (_player1 != null && _player2 == null)
                    {
                        // add to the player score
                        // We can't use other to find the Player object b/c "other" in this if statement is the Laser (as shown by other.CompareTag("Laser"))

                        // Only 1 of these AddScore() lines will execute depending on which player destroyed the enemy
                        _player1.AddScore(randomPoints);
                    }
                    else if (_player1 == null && _player2 != null)
                    {
                        _player2.AddScore(randomPoints);
                    }
                    else if (_player2 != null && _player1 == null)
                    {
                        _player2.AddScore(randomPoints);
                    }
                    else if (_player2 == null && _player1 != null)
                    {
                        _player1.AddScore(randomPoints);
                    }
                    else if (_player1 != null && _player2 != null)
                    {
                        _player1.AddScore(randomPoints);
                        _player2.AddScore(randomPoints);
                    }
                    else
                    {
                        if (_player2 == null)
                        {
                            _player1.AddScore(randomPoints);
                        }
                        else if (_player1 == null)
                        {
                            _player2.AddScore(randomPoints);
                        }
                        else
                        {
                            Debug.Log("Player is null cannot add score");
                        }
                    }
                }
                catch (NullReferenceException e)
                {
                    Debug.Log(e);
                }

                // trigger the explosion animation by passing in the name of the Trigger you created (OnEnemyDeath) before you destroy the enemy. Just make sure to wait the amount of seconds the animation lasts before destroying or the animation will fail. You can do this by passing in a float for the number of seconds in the Destroy() method as a second argument
                _anim.SetTrigger("OnEnemyDeath");
                _speed = 0;
                _audioSources[0].Play();

                // destroy the collider so that when you fire more than 1 laser at the enemy, only 1 exlposion (the sound of the explosion)happens
                Destroy(GetComponent <Collider2D>());

                // Since we delay the destruction of the enemy to let animation and sound effect play, set to null so enemy can't fire when it's destroyed. Can only set floats to null if it has a "?" in front of it's datatype
                _canFire = null;
                // needs a delay time or else animations and sounds won't play b/c object is instantly destroyed

                thruster.SetActive(false);
                Destroy(this.gameObject, 2.5f);
            }
        }
    }
예제 #38
0
 public void OnLaserHitted(Laser hitedLaser, Vector3 hitPoint, Vector3 hitNormal)
 {
 }
예제 #39
0
        /*public void makeNormalBullet(Player p){
         *  if (curCooldown == cooldown)
         *  {
         *      //Do weapon specific things
         *      Bullet b = new Bullet();
         *      b.pos = p.position + p.getDirectionVector() + new Vector3(0, 60, 0);
         *      b.dir = p.getDirectionVector();
         *      b.timeLeft = 600;
         *      p.core.renderEngine.bullets.Add(b);
         *  }
         *
         * }*/

        public static void makeLaser(Agent p, Ray r, float distance, int width, int height, String weaponClass)
        {
            Laser l = new Laser();

            l.horizVerts = new VertexPositionNormalTexture[4];
            l.vertVerts  = new VertexPositionNormalTexture[4];
            l.indices    = new int[6];
            l.revIndices = new int[6];

            // Set the index buffer for each vertex
            l.indices[0] = 0;
            l.indices[1] = 1;
            l.indices[2] = 2;
            l.indices[3] = 2;
            l.indices[4] = 1;
            l.indices[5] = 3;

            l.revIndices[0] = 2;
            l.revIndices[1] = 1;
            l.revIndices[2] = 0;
            l.revIndices[3] = 3;
            l.revIndices[4] = 1;
            l.revIndices[5] = 2;

            //texture coordinates
            Vector2 textureUpperLeft  = new Vector2(0.0f, 0.0f);
            Vector2 textureUpperRight = new Vector2(1.0f, 0.0f);
            Vector2 textureLowerLeft  = new Vector2(0.0f, 1.0f);
            Vector2 textureLowerRight = new Vector2(1.0f, 1.0f);

            Vector3 orig = r.Position + r.Direction * distance / 2;

            //normal for vertical quads
            Vector3 vertNorm = Vector3.Cross(Vector3.Up, r.Direction);

            vertNorm.Normalize();

            //normal for horizontal quads
            Vector3 horizNorm = Vector3.Cross(vertNorm, r.Direction);

            horizNorm.Normalize();

            // normals for vertices
            for (int i = 0; i < l.horizVerts.Length; i++)
            {
                l.horizVerts[i].Normal = horizNorm;
                l.vertVerts[i].Normal  = vertNorm;
            }

            //get horiz corners
            Vector3 uppercenter = (r.Direction * distance / 2) + orig;
            Vector3 UpperLeft   = uppercenter + (vertNorm * width / 2);
            Vector3 UpperRight  = uppercenter - (vertNorm * width / 2);
            Vector3 LowerLeft   = UpperLeft - (r.Direction * distance);
            Vector3 LowerRight  = UpperRight - (r.Direction * distance);

            // Set horiz position and texture coordinates
            l.horizVerts[0].Position          = LowerLeft;
            l.horizVerts[0].TextureCoordinate = textureLowerLeft;
            l.horizVerts[1].Position          = UpperLeft;
            l.horizVerts[1].TextureCoordinate = textureUpperLeft;
            l.horizVerts[2].Position          = LowerRight;
            l.horizVerts[2].TextureCoordinate = textureLowerRight;
            l.horizVerts[3].Position          = UpperRight;
            l.horizVerts[3].TextureCoordinate = textureUpperRight;

            //get vert corners
            uppercenter = (horizNorm * height / 2) + orig;
            UpperLeft   = uppercenter + (r.Direction * distance / 2);
            UpperRight  = uppercenter - (r.Direction * distance / 2);
            LowerLeft   = UpperLeft - (horizNorm * height);
            LowerRight  = UpperRight - (horizNorm * height);

            // Set vert position and texture coordinates
            l.vertVerts[0].Position          = LowerLeft;
            l.vertVerts[0].TextureCoordinate = textureLowerRight;
            l.vertVerts[1].Position          = UpperLeft;
            l.vertVerts[1].TextureCoordinate = textureLowerLeft;
            l.vertVerts[2].Position          = LowerRight;
            l.vertVerts[2].TextureCoordinate = textureUpperRight;
            l.vertVerts[3].Position          = UpperRight;
            l.vertVerts[3].TextureCoordinate = textureUpperLeft;

            l.timeLeft = 600;

            l.texture = p.core.weaponTrailTextures[weaponClass];

            p.core.renderEngine.lasers.Add(l);
        }
예제 #40
0
 /// <summary>
 /// Update the given laser. The given board is the BoardForm the laser was generated by,
 /// and the point is the position of this tile in the board's multidimensional array of
 /// LevelTiles.
 /// </summary>
 public abstract void UpdateLaser(BoardForm board, Laser laser, Point point);
예제 #41
0
    public void useCard(ref Game.info userInfo, int slotID, GameObject user)
    {
        userInfo.heat -= userInfo.inventory[slotID].heatDes * userInfo.inventory[slotID].heatAccel; //Decrease Heat capacity when shot
        userInfo.inventory[slotID].heatAccel += userInfo.inventory[slotID].heatAccelBase;           //Increase Heat Accel when shot
        userInfo.inventory[slotID].delay      = userInfo.inventory[slotID].delayMax;                //Reset delay to Max when shot

        AudioSource audiosource = user.GetComponent <AudioSource>();                                //Get AudioSource component from user
        UserAudioDB useraudiodb = GameObject.Find("GameMaster").GetComponent <UserAudioDB>();       //non-static void => get component required

        useraudiodb.playSFX(audiosource, userInfo.inventory[slotID].id);                            //Play sfx with determined Card ID

        int facedown      = (userInfo.type == 2)?1:0;                                               // Face downward if user is an enemy
        int unconcentrate = 0;                                                                      // Unconcentrating: Shots won't be accurate when stamina deplete

        System.Random rnd    = new System.Random();                                                 // Randomizing angel for Unconcentrating Shots
        Vector3       zDepth = new Vector3(0, 0, -1);                                               // In 3D space, projectile stay on top of player and enemies in order to reflect light

        if (userInfo.weakShot == 1)
        {
            unconcentrate = 1;
        }

        //PREFAB SELECT
        switch (userInfo.inventory[slotID].id)
        {
        case "cone-stick":
        case "enemy-cone-stick": {
            projectile = longBullet;
        }
        break;

        case "enemy-surround-ball":
        case "enemy-cone-ball-targetPlayer":
        case "enemy-burst-ball-targetPlayer": {
            projectile = smallBall;
        }
        break;

        case "laser-once": {
            projectile = laser;                                                 //TEMPORARY
        }
        break;
        }
        // CARD BEHAVIOUR (TODO: Card properties (sprite, etc.) separately)
        switch (userInfo.inventory[slotID].id)
        {
        case "cone-stick":
        case "enemy-cone-stick": {                                              // Stick-projectile shoot in cone shape
            int bulletAngel = 5;
            for (var i = 0; i <= (userInfo.inventory[slotID].projectile - 1) * 2; i++)
            {
                GameObject Bullet = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z - (userInfo.inventory[slotID].projectile - 1) * bulletAngel + bulletAngel * i + facedown * 180 + unconcentrate * rnd.Next(-5, 5));
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                //VARIABLE TRANSFER
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }

        case "laser-once": {                                            // Laser beam
            GameObject Beam = Instantiate(projectile, new Vector2(user.transform.position.x, user.transform.position.y + userInfo.barrelPos.y), Quaternion.identity) as GameObject;
            Beam.transform.rotation = Quaternion.Euler(0, 0, 0 + facedown * 180);
            //TODO: Laser size based on w.projectile
            Laser laserComponent = Beam.GetComponent <Laser>();
            laserComponent.laserWidth = userInfo.inventory[slotID].projectile;
            laserComponent.damage     = userInfo.inventory[slotID].power;                                               // Transfer damage/power data into Projectile.cs
            laserComponent.userType   = userInfo.type;                                                                  // Transfer user type into Projectile.cs
            break;
        }

        case "enemy-surround-ball": {                                           // Ball-projectile shoot in 180/x direction (surrounding)
            int bulletAngel = 180 / (userInfo.inventory[slotID].projectile);
            for (var i = 0; i < userInfo.inventory[slotID].projectile * 2; i++)
            {
                GameObject Bullet = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z + bulletAngel * i);
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }

        case "enemy-cone-ball-targetPlayer": {                                          // Ball-projectile shoot in cone shape - TARGET PLAYER (PLACEHOLDER)
            int bulletAngel = 5;
            for (var i = 0; i <= (userInfo.inventory[slotID].projectile - 1) * 2; i++)
            {
                GameObject Bullet            = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Player     playerComponent   = GameObject.Find("Player").GetComponent <Player>();
                float      targetPlayerAngle = Vector2.SignedAngle(transform.up, (playerComponent.transform.position - Bullet.transform.position).normalized);
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z + targetPlayerAngle - (userInfo.inventory[slotID].projectile - 1) * bulletAngel + bulletAngel * i);
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                //VARIABLE TRANSFER
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }

        case "enemy-burst-ball-targetPlayer": {                                         // Ball-projectile shoot in burst - TARGET PLAYER (PLACEHOLDER)
            int bulletAngel = 5;
            for (var i = 0; i <= (userInfo.inventory[slotID].projectile - 1) * 2; i++)
            {
                GameObject Bullet            = Instantiate(projectile, user.transform.position + userInfo.barrelPos + zDepth, Quaternion.identity) as GameObject;
                Player     playerComponent   = GameObject.Find("Player").GetComponent <Player>();
                float      targetPlayerAngle = Vector2.SignedAngle(transform.up, (playerComponent.transform.position - Bullet.transform.position).normalized);
                Bullet.transform.rotation = Quaternion.Euler(0, 0, user.transform.rotation.z + targetPlayerAngle - (userInfo.inventory[slotID].projectile - 1) * bulletAngel + bulletAngel * i + rnd.Next(-5, 5));
                Projectile bulletComponent = Bullet.GetComponent <Projectile>();                                        // Get Projectile.cs component
                //VARIABLE TRANSFER
                bulletComponent.damage      = userInfo.inventory[slotID].power;                                         // Transfer damage/power data into Projectile.cs
                bulletComponent.travelSpeed = userInfo.inventory[slotID].speed;                                         // Transfer speed into Projectile.cs
                bulletComponent.userType    = userInfo.type;                                                            // Transfer user type into Projectile.cs
            }
            break;
        }
        }
    }
예제 #42
0
        public virtual void ProcessHit(Laser laser)
        {
            int damage = laser.Damage;

                // Red effect: laser does 2x more damage
                if (laser.Tint.R > 200) damage = damage * 2;

                // Green effect: laser does 0.5x extra damage per second for MAX_POISON_TIME extra seconds
                if (laser.Tint.G > 200)
                {
                    CurrentPoisonTime = MAX_POISON_TIME;
                    IsPoisoned = true;
                    if (damage >= PoisonDamage * 2)
                    {
                        PoisonDamage = damage / 2;
                    }
                }

                // Blue effect: slows the entity down for MAX_SLOW_TIME seconds
                if (laser.Tint.B > 200)
                {
                    CurrentSlowTime = MAX_SLOW_TIME;
                    IsSlowed = true;
                }

                CurrentHealthPoints -= damage;
                if (CurrentHealthPoints < 0) CurrentHealthPoints = 0;
        }
예제 #43
0
 private void UtiliserLaser()
 {
     if (!Exiting)
     {
         Laser l = new Laser(Game, 2f * level_.laneSize, Rotation, Position + Vector3.Forward * 0.05f, this, LaneIndex);
         SonLaser.Play(0.4f, 0f, 0f);
         Game.Components.Add(l);
     }
 }
예제 #44
0
        public EnemyAttackProcesser(IEnumerable <EnemyAttackDataBase> data, Enemy enemy)
        {
            _ProcessList      = new IEnumerator[data.Count()];
            _ProcesserList    = new IAttackProcesser[data.Count()];
            _CompleteObserver = new Subject <Unit> ();
            IAttackProcesser processer;

            for (int i = 0; i < data.Count(); i++)
            {
                switch (data.ElementAt(i).AttackType)
                {
                case AttackType.nWayShot:
                    processer         = new nWayShot(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                case AttackType.nWayShotTargetPlayer:
                    processer         = new nWayShotTargetPlayer(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                case AttackType.nWayShotRotation:
                    processer         = new nWayShotRotation(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                case AttackType.Laser:
                    processer         = new Laser(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                case AttackType.LaserTargetPlayer:
                    processer         = new LaserTargetPlayer(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                case AttackType.LaserRotation:
                    processer         = new LaserRotation(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                case AttackType.EnemyPop:
                    processer         = new EnemyPop(data.ElementAt(i), enemy);
                    _ProcessList[i]   = processer.Process();
                    _ProcesserList[i] = processer;
                    break;

                default:
                    break;
                }
            }

            _CompleteStream = _ProcesserList[0].CompleteAsObservable();
            for (int i = 1; i < _ProcesserList.Length; i++)
            {
                _CompleteStream = _CompleteStream.Zip(_ProcesserList[i].CompleteAsObservable(), (r, l) => { return(l); });
            }
            _CompleteStream
            .First()
            .Subscribe(_ => _CompleteObserver.OnNext(Unit.Default));
        }
예제 #45
0
 // Use this for initialization
 void Start()
 {
     _laser     = GetComponentInChildren <Laser>();
     _character = GetComponent <CharacterController>();
 }
    } // void FireLaser()

    public void HitByLaser(Laser laser)
    {
        health -= laser.GetDamage();
        CheckHealth();
    } // public void HitByLaser(Laser laser)
예제 #47
0
    public Turret(Ship ownShip, Target ownTarget, AudioSource audio, Transform turret, Laser prefab, float fireChance, Weapons weaponSpecs)
    {
        this.ownShip    = ownShip;
        this.ownTarget  = ownTarget;
        this.turret     = turret;
        laserPrefab     = prefab;
        this.fireChance = fireChance;
        specs           = weaponSpecs;
        this.audio      = audio;

        seed = Random.Range(0f, 1000f);
    }
예제 #48
0
 /// <summary>
 /// Reanables the obstruction.
 ///
 /// Called when the laser stops hitting this collider.
 /// </summary>
 /// <param name="laser">Laser that stopped hitting the collider.</param>
 public override void LaserRemoved(Laser laser)
 {
     obstacle.SetActive(true);
 }
예제 #49
0
            public Game()
            {
                Graphics = new GraphicsDeviceManager(this);
                Viewport = new Viewport();

                Primitives = new PrimitiveEngine();
                Gamestate = GameState.SPLASH;
                gametime = 0;
                level = Difficulty.EASY;

                cancel = new Label();
                replay = new Label();
                winner = new Label();
                score = new Label();

                box = new Box();
                laser = new Laser();
                hud = new HUD();

                Content.RootDirectory = "Content";
            }
예제 #50
0
        public override Actor createActor(int id, Vector2 position, Microsoft.Xna.Framework.Vector2?velocity = null, double color = -1)
        {
            Actor a = null;

            if ((position.X >= 0 && position.X < world.width * Tile.size && position.Y >= 0 && position.Y < world.height * Tile.size))
            {
                switch (id)
                {
                case 0:
                    a = new Player(world, position);
                    return(a);

                case 1:
                    a = new Octo(world, position);
                    break;

                case 2:
                    a = new Blob(world, position, velocity ?? Vector2.Zero, color);
                    break;

                case 3:
                    a = new Sentinel(world, position);
                    break;

                case 4:
                    a = new Spikon(world, position);
                    break;

                case 5:
                    a = new Arrow(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 6:
                    a = new OctoBall(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 7:
                    a = new HealthOrb(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 8:
                    a = new FireShuriken(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 9:
                    a = new IceSpike(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 10:
                    a = new Numbers(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 11:
                    a = new FirstBoss(world, position);
                    return(a);

                case 12:
                    a = new LevelUp(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 13:
                    a = new Laser(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 14:
                    a = new FirePillar(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 15:
                    a = new ManaOrb(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 16:
                    a = new Zazzle(world, position);
                    return(a);

                case 17:
                    a = new ZazzleShot(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 18:
                    a = new Basilisk(world, position);
                    return(a);

                case 19:
                    a = new BlobSpawner(world, position);
                    return(a);

                case 20:
                    a = new Charger(world, position);
                    return(a);

                case 21:
                    a = new Grapple(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 22:
                    a = new Generator(world, position);
                    return(a);

                case 23:
                    a = new Explosion(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 24:
                    a = new Torch(world, position);
                    return(a);

                case 25:
                    a = new MagicPrimary(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 26:
                    a = new WizBlob(world, position);
                    return(a);

                case 27:
                    a = new LaserArrow(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 28:
                    a = new DiscoBlob(world, position, velocity ?? Vector2.Zero, color, checkpointCount++);
                    break;

                case 29:
                    a = new FireBlob(world, position, velocity ?? Vector2.Zero);
                    break;

                case 30:
                    a = new MrHammer(world, position, velocity ?? Vector2.Zero);
                    break;

                case 31:
                    a = new GigaBlob(world, position, velocity ?? Vector2.Zero);
                    break;

                case 32:
                    a = new MagicPrimary(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 33:
                    a = new DarkLucyPortrait(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 34:
                    a = new BloodyArrow(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 35:
                    a = new LucyFirePillar(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 36:
                    a = new WeddingPhoto(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 37:
                    a = new FancyPortrait(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 38:
                    a = new CoatOfArms(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 39:
                    a = new TandemBike(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 40:
                    a = new KnightStatue(world, position, velocity ?? Vector2.Zero);
                    return(a);

                case 41:
                    a = new SwordSlash(world, position, velocity ?? Vector2.Zero);
                    return(a);
                }
            }

            return(a);
        }
 private bool ValidInputDir(Laser l)
 {
     return ValidInputDirections.Contains(l.CurrentDirection);
 }
예제 #52
0
 /// <summary>
 /// Raycasts from 'start' position in the given 'direction' and sends 'laser' information to
 /// the hit object if it's a module.
 /// </summary>
 /// <param name="laser"></param>
 /// <param name="start"></param>
 /// <param name="direction"></param>
 public static void SendLaser(Module from, Laser laser, Direction direction, Vector3?start = null)
 {
     SendLaser(from, laser, GetDirectionVector(direction), start);
 }
 public void HitByLaser(Laser laser)
 {
     Global.playerHealth -= laser.GetDamage();
     hpBar.fillAmount -= laser.GetDamage() / Global.PlayerMaxHealth;
     CheckHealth();
 }
예제 #54
0
    /// <summary>
    /// Raycasts from module position in the given 'direction' and sends 'laser' information to
    /// the hit object if it's a module.
    /// </summary>
    /// <param name="module"> The module that sent the laser </param>
    /// <param name="laser"></param>
    /// <param name="start"></param>
    /// <param name="direction"></param>
    public static void SendLaser(Module from, Laser laser, Vector3 direction, Vector3?start = null)
    {
        if (laser.IsNullLaser)
        {
            return;
        }

        from.SetColliderEnabled(false);

        var startPosition = start.HasValue ? start.Value : from.transform.position;

        RaycastHit hit;

        if (Physics.Raycast(startPosition, direction, out hit))
        {
            LaserRepresentation(startPosition, hit.point, Laser.VisualColor(laser.Color));

            var objectHittable = hit.collider.GetComponentInParent <ILaserHittable>();
            if (objectHittable != null)
            {
                objectHittable.OnLaserHit(new DirectionalLaser(laser, GetDirection(direction)), hit.point);
            }
        }
        else
        {
            LaserRepresentation(startPosition, startPosition + direction.normalized * 50, Laser.VisualColor(laser.Color));
        }

        from.SetColliderEnabled();
    }
예제 #55
0
파일: Map.cs 프로젝트: Gupocca/AdMapperIO
        public void Open(string file)
        {
            objects = new List<MapObject>();
            BufferReader reader = new BufferReader(file);

            if (Path.GetExtension(file) != ".adm")
            {
                throw new ArgumentException("File does not have *.adm extension.");
            }
            if (reader.ReadString() != "ADmapv2")
            {
                throw new ArgumentException("Not a valid Adrenaline map file.");
            }

            // general map info
            this.version = reader.ReadByte();
            this.gridSize = reader.ReadByte();

            // spare slots
            reader.Skip(15);

            this.Name = reader.ReadString();
            this.Author = reader.ReadString();
            this.floorType = reader.ReadByte();

            // objects
            while (reader.HasMore())
            {
                string objectType = reader.ReadString();
                int instances = (int)reader.ReadUShort();

                for (int i = 0; i < instances; i++)
                {
                    ushort x = reader.ReadUShort();
                    ushort y = reader.ReadUShort();
                    MapObject obj = null;

                    #region Object Creation
                    switch (objectType)
                    {
                        // pickups
                        case "objAbArmor":
                            obj = new BulletArmorPickup();
                            break;
                        case "objAbIncendary":
                            obj = new BulletIncendiaryPickup();
                            break;
                        case "objAbDefault":
                            obj = new BulletNormalPickup();
                            break;
                        case "objAbVelocity":
                            obj = new BulletVelocityPickup();
                            break;
                        case "objAnades":
                            obj = new GrenadePickup();
                            break;
                        case "objMedkit":
                            obj = new HealthPickup();
                            break;
                        case "objAeNormal":
                            obj = new LaserPickup();
                            break;
                        case "objAmines":
                            obj = new MinePickup();
                            break;
                        case "objApDisc":
                            obj = new PlasmaDiscPickup();
                            break;
                        case "objApFragma":
                            obj = new PlasmaFragmaPickup();
                            break;
                        case "objApHigh":
                            obj = new PlasmaHighPickup();
                            break;
                        case "objApNormal":
                            obj = new PlasmaNormalPickup();
                            break;
                        case "objAmNormal":
                            obj = new RocketDualPickup();
                            break;
                        case "objAmNade":
                            obj = new RocketNukePickup();
                            break;
                        case "objAcSniper":
                            obj = new SniperPickup();
                            break;
                        case "objAeSuper":
                            obj = new SuperLaserPickup();
                            break;

                        // static
                        case "objSpawn":
                            obj = new AllSpawn();
                            break;
                        case "objFlagBlue":
                            obj = new BlueFlag();
                            break;
                        case "objFlagRed":
                            obj = new RedFlag();
                            break;
                        case "objTBlueSpawn":
                            obj = new BlueSpawn();
                            break;
                        case "objTRedSpawn":
                            obj = new RedSpawn();
                            break;
                        case "objLevelMine":
                            obj = new LevelMine();
                            break;
                        case "objTeleportDest":
                            obj = new TeleportDestination();
                            break;
                        case "objTeleportSrc":
                            obj = new TeleportSource();
                            break;
                        case "objStaticLight":
                            obj = new Light(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
                            break;

                        // Walls
                        case "objBlockWallBlocks":
                            obj = new BlocksWall();
                            break;
                        case "objBlockBrick":
                            obj = new BrickWall();
                            break;
                        case "objCube":
                            obj = new CompanionCube();
                            break;
                        case "objCompanion":
                            obj = new Crate();
                            break;
                        case "objBlockWall":
                            obj = new GreyWall();
                            break;
                        case "objBlockIceWall":
                            obj = new IceWall();
                            break;
                        case "objBlockLight":
                            obj = new LightWall();
                            break;
                        case "objBlockLightWall":
                            obj = new LightWall2();
                            break;
                        case "objBlockOld":
                            obj = new OldWall();
                            break;
                        case "objBlockRusty":
                            obj = new RustyWall();
                            break;
                        case "objBlockStripeWall":
                            obj = new StripeWall();
                            break;
                        case "objBlockWallpaper":
                            obj = new WallpaperWall();
                            break;
                        case "objBlockCrate":
                            obj = new WoodWall();
                            break;

                        // weapons
                        case "objAssault":
                            obj = new Assault();
                            break;
                        case "objSawnOff":
                            obj = new Curveshot();
                            break;
                        case "objLaserRifle":
                            obj = new Laser();
                            break;
                        case "objLauncher":
                            obj = new Launcher();
                            break;
                        case "objMinigun":
                            obj = new Minigun();
                            break;
                        case "objPistol":
                            obj = new IceWall();
                            break;
                        case "Pistol":
                            obj = new LightWall();
                            break;
                        case "objPlasma":
                            obj = new Plasma();
                            break;
                        case "objShotgun":
                            obj = new Shotgun();
                            break;
                        case "objSMG":
                            obj = new SMG();
                            break;
                        case "objSniper":
                            obj = new Sniper();
                            break;

                        default:
                            // no known object... better read bytes anyway
                            reader.ReadUShort();
                            reader.ReadUShort();
                            break;
                    }
                    #endregion Object Creation

                    if (obj != null)
                    {
                        obj.X = x;
                        obj.Y = y;
                        objects.Add(obj);
                    }
                }
            }
        }
예제 #56
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.tag == "Player")
        {
            Player player = other.transform.GetComponent <Player>();

            if (_enemyShieldActive)
            {
                if (player != null)
                {
                    other.transform.GetComponent <Player>().Damage();
                }

                _enemyShieldActive = false;
                _enemyShieldVisualizer.SetActive(false);
                return;
            }

            if (player != null)
            {
                other.transform.GetComponent <Player>().Damage();
            }
            _anim.SetTrigger("OnEnemyDeath");
            _enemy_Movement._moveSpeed = 0;
            _audioSource.Play();
            _isDead = true;
            Destroy(transform.parent.gameObject, 2.8f);
        }

        if (other.tag == "Laser")
        {
            Laser lasers = other.transform.GetComponentInChildren <Laser>();

            if (!lasers._isEnemyLaser)
            {
                if (_enemyShieldActive)
                {
                    Destroy(other.gameObject);
                    _enemyShieldActive = false;
                    _enemyShieldVisualizer.SetActive(false);
                    return;
                }
            }

            if (!lasers._isEnemyLaser)
            {
                if (_player != null)
                {
                    _player.AddScore(_pointValue);
                }

                _anim.SetTrigger("OnEnemyDeath");
                Destroy(other.gameObject);
                _enemy_Movement._moveSpeed = 0;
                _audioSource.Play();
                Destroy(GetComponent <Collider2D>());
                _isDead = true;
                Destroy(transform.parent.gameObject, 2.8f);
            }
        }

        if (other.tag == "SuperBeam")
        {
            if (_player != null)
            {
                _player.AddScore(_pointValue);
            }

            _anim.SetTrigger("OnEnemyDeath");
            _enemy_Movement._moveSpeed = 0;
            _audioSource.Play();

            Destroy(GetComponent <Collider2D>());
            _isDead = true;
            Destroy(transform.parent.gameObject, 2.8f);
        }

        if (other.tag == "SuperMissile")
        {
            if (_enemyShieldActive)
            {
                Destroy(other.gameObject);
                _enemyShieldActive = false;
                _enemyShieldVisualizer.SetActive(false);
                return;
            }

            if (_player != null)
            {
                _player.AddScore(_pointValue);
            }

            _anim.SetTrigger("OnEnemyDeath");
            _enemy_Movement._moveSpeed = 0;
            _audioSource.Play();
            Destroy(other.gameObject);
            Destroy(GetComponent <Collider2D>());
            _isDead = true;
            Destroy(transform.parent.gameObject, 2.8f);
        }
    }
예제 #57
0
        public void Update(GameTime gameTime)
        {
            MouseState    state    = Mouse.GetState();
            KeyboardState keyState = Keyboard.GetState();

            Camera.Pos     = player.Position;
            fireballTimer += gameTime.ElapsedGameTime.TotalSeconds;
            laserTimer    += gameTime.ElapsedGameTime.TotalSeconds;

            if (Camera.Pos.X < graphics.Viewport.Width / 2)
            {
                Camera.Pos.X = graphics.Viewport.Width / 2;
            }
            else if (Camera.Pos.X > Map.Width * Map.TileSize - graphics.Viewport.Width / 2)
            {
                Camera.Pos.X = Map.Width * Map.TileSize - graphics.Viewport.Width / 2;
            }

            if (Camera.Pos.Y < graphics.Viewport.Height / 2)
            {
                Camera.Pos.Y = graphics.Viewport.Height / 2;
            }
            else if (Camera.Pos.Y > Map.Height * Map.TileSize - graphics.Viewport.Height / 2)
            {
                Camera.Pos.Y = Map.Height * Map.TileSize - graphics.Viewport.Height / 2;
            }

            if (keyState.IsKeyDown(Keys.Space))
            {
                if (canPress)
                {
                    Map.ChangeTileset();
                }
                canPress = false;
            }
            if (keyState.IsKeyUp(Keys.Space))
            {
                canPress = true;
            }

            if (state.ScrollWheelValue < prevScroll)
            {
                MediaPlayer.Volume -= .05f;
            }
            else if (state.ScrollWheelValue > prevScroll)
            {
                MediaPlayer.Volume += .05f;
            }

            prevScroll = state.ScrollWheelValue;

            if (MediaPlayer.Volume < 0)
            {
                MediaPlayer.Volume = 0;
            }
            else if (MediaPlayer.Volume > 1)
            {
                MediaPlayer.Volume = 1;
            }

            if (MediaPlayer.Volume == 0 && MediaPlayer.State == MediaState.Playing)
            {
                MediaPlayer.Pause();
            }
            else if (MediaPlayer.Volume != 0 && MediaPlayer.State == MediaState.Paused)
            {
                MediaPlayer.Resume();
            }

            if (singleplayer)
            {
                //generating fireballs every 0.2 seconds
                if (fireballTimer >= 0.2f)
                {
                    fireballTimer = 0;

                    for (int i = 0; i < 2; i++)
                    {
                        int      dir = random.Next(0, 2);
                        Fireball fb  = null;

                        if (dir == 0)
                        {
                            fb = new Fireball(this, FireballDirection.HORIZONTAL);
                        }
                        else if (dir == 1)
                        {
                            fb = new Fireball(this, FireballDirection.VERTICAL);
                        }

                        fb.LoadContent();
                        entities.Insert(0, fb);
                    }
                    //Console.WriteLine(entities.Count);
                }

                if (laserTimer >= laserTreshold)
                {
                    for (int i = 0; i < 2; i++)
                    {
                        int   dir = random.Next(0, 2);
                        Laser l   = null;

                        if (dir == 0)
                        {
                            l = new Laser(this, LaserDirection.HORIZONTAL);
                        }
                        else if (dir == 1)
                        {
                            l = new Laser(this, LaserDirection.VERTICAL);
                        }

                        l.LoadContent();
                        entities.Add(l);

                        laserTreshold = random.NextDouble() * (1.5d - 0.8d) + 0.8d;
                        laserTimer    = 0;
                    }
                }
            }

            foreach (Entity e in entities.ToArray())
            {
                e.Update(gameTime);

                if (e.entityType == EntityType.FIREBALL)
                {
                    if (((Fireball)e).isHit)
                    {
                        entities.Remove(e);
                    }
                }
                else if (e.entityType == EntityType.LASER)
                {
                    if ((e as Laser).IsFinished)
                    {
                        entities.Remove(e);
                    }
                }
            }

            Map.Update(gameTime);
            Shaker.Update(gameTime, Camera);
            Camera.Update();
        }
예제 #58
0
 public override Laser[] OnLaserHit(Laser laser)
 {
     return(new Laser[0]);
 }
예제 #59
0
파일: Game1.cs 프로젝트: Nastya11/Games
        private void ParseKeys()
        {
            var state = Keyboard.GetState();
            if (state.IsKeyDown(Keys.Left))
                player.placeHolder.X -= 1;

            if (state.IsKeyDown(Keys.Right))
                player.placeHolder.X += 1;

            if (state.IsKeyDown(Keys.Up))
                player.placeHolder.Y -= 1;

            if (state.IsKeyDown(Keys.Down))
                player.placeHolder.Y += 1;

            if (state.IsKeyDown(Keys.Space))
            {
                if (a == 0)
                {
                    a = 300;
                    var newLaser = new Laser();
                    newLaser.picture = lazerPic;
                    newLaser.placeHolder = newLaser.picture.Bounds;
                    newLaser.placeHolder.X = player.placeHolder.Right;
                    newLaser.placeHolder.Y = player.placeHolder.Y + player.placeHolder.Height / 2;
                    lasers.Add(newLaser);
                }

            }
        }
예제 #60
0
 void Start()
 {
     laser    = GetComponent <Laser>();
     line     = GetComponent <LineRenderer>();
     predists = new Dictionary <Laser, float>();
 }