<commit_before>﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;

namespace awsmSeeSharpGame.Classes
{
    /// <summary>
    /// Skrevet av <NAME> og <NAME>
    /// DrawShapes klassen tar seg av oppdatering, kollisjonstesting og opptegning av alle objektene.
    /// </summary>
    public class DrawShapes
    {
        //properties som bruker for å berenge FPS
        private int frameCount = 0;
        private double timeSinceLastUpdate = 0.0;
        private double fps = 0.0;
        private DateTime lastTime = DateTime.Now;
        private bool collision;
        public float elapsedTime;
        private Random random;
        private int nextEmit; //counter som bestemmer når neste moveableShape skal emites
        private int emitCounter; // counter som teller opp til neste emit;
        private System.Timers.Timer timer = new System.Timers.Timer();
        private List<Bullet> bulletList;
        private int emitRate; //Hvor ofte moveable shapes skal sendes ut på skjermen
        private const int ENERGY_LOSS = 2;

        private DrawShapes thisPanel;

        private awsm_SoundPlayer alienHeadSound, bulletHitSound;


        private List<Obstacle> obstacleList;
        private Rocket rocket;
        private Region collisionRegion;

        private List<MovableShape> movableShapeList; //STH
        private List<MovableShape> activeMovableShapeList;
        Emitter emitter;

        GamePanel parentGamePanel; // lenke til Gamepanelet, så vi kan akkssere FPS labelen

        /// <summary>
        /// Konstruktør som setter opp alle objektene som skal tegnes opp
        /// Skrevet av Silje og Dag
        /// </summary>
        /// <param name="_parentGamePanel">Referanse til GamePanelet </param>
        /// <param name="_obstacleList">Liste med Obstacles</param>
        /// <param name="_rocket">Romskipet vårt</param>
        public DrawShapes(GamePanel _parentGamePanel, int _emitRate, List<Obstacle> _obstacleList, List<MovableShape> _movableShapeList, Rocket _rocket)
        {
            parentGamePanel = _parentGamePanel;
            emitRate = _emitRate;
            obstacleList = _obstacleList;
            movableShapeList = _movableShapeList;
            activeMovableShapeList = new List<MovableShape>();
            rocket = _rocket;
            emitter = new Emitter(_parentGamePanel, _movableShapeList);
            collision = false;
            random = new Random();

            bulletList = new List<Bullet>();
            thisPanel = this;
            nextEmit = random.Next(300);
        }


        //Public get for Deltatiden. Brukt for å oppdatere spillobjektene uavhengig av FPS
        public float GetElapsedTime{
            get{
                return elapsedTime;
            }
        }

        public void AddBullet(Bullet bullet)
        {
            bulletList.Add(bullet);
        }

 /*       public void SetMovableObjectList(List<MovableShape> list)
        {
            movableShapeList = list;
        } */
        

        /// <summary>
        /// Flytter objektene ved å å gå igjennom alle flyttbare objekter og gå igjennom Move metodene deres.
        /// Skrevet av Silje
        /// </summary>
        public void Update(int _emitRate)
        {
            Emit(_emitRate);
            activeMovableShapeList = emitter.activeMovableShapeList;
            emitter.RemoveMovableShapesWhenGone();

            foreach (MovableShape shape in activeMovableShapeList)
            {
                
                if (shape is UFO)
                {
                    UFO ufo = shape as UFO;
                    ufo.Move(thisPanel, GetElapsedTime, random.Next(100,400));
                }
                shape.Move(GetElapsedTime);
            }

            foreach (Bullet bullet in bulletList)
            {
                bullet.Move(GetElapsedTime);
            }
            //rocket.Accelerate();
            rocket.Move(GetElapsedTime);
        }

        /// <summary>
        /// Sjekker for kollisjoner ved å gå igjennom alle flyttbare objekter og sjekke kollisjonsmetodene deres
        /// Skrevet av Dag og Silje
        /// </summary>
        public void CollisonCheck(PaintEventArgs e)
        {
            collision = false; //Resetter collisions testen

            if (rocket.X < 0 - rocket.WidthOfRocket || rocket.X > parentGamePanel.panelWidth)
            {
                parentGamePanel.LossOfLife();
            }
            if (rocket.Y < 0 || rocket.Y > parentGamePanel.panelHeight)
            {
                parentGamePanel.LossOfLife();
            }
           
            foreach (MovableShape shape in activeMovableShapeList)
            {
                RegionData regionData = shape.region.GetRegionData();

                collisionRegion = new Region(regionData);
                collisionRegion.Intersect(rocket.region);
                if (!collisionRegion.IsEmpty(e.Graphics))
                {

                    if (shape is AlienHead && shape.active == true)
                    {
                        shape.active = false;
                        parentGamePanel.score += 100;
                        alienHeadSound = new awsm_SoundPlayer("splat.wav");

                    }
                    else if(shape.active == true)<commit_msg>La til en bounce om romskipet går utenfor spillområdet<commit_after>﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;

namespace awsmSeeSharpGame.Classes
{
    /// <summary>
    /// Skrevet av <NAME> og <NAME>
    /// DrawShapes klassen tar seg av oppdatering, kollisjonstesting og opptegning av alle objektene.
    /// </summary>
    public class DrawShapes
    {
        //properties som bruker for å berenge FPS
        private int frameCount = 0;
        private double timeSinceLastUpdate = 0.0;
        private double fps = 0.0;
        private DateTime lastTime = DateTime.Now;
        private bool collision;
        public float elapsedTime;
        private Random random;
        private int nextEmit; //counter som bestemmer når neste moveableShape skal emites
        private int emitCounter; // counter som teller opp til neste emit;
        private System.Timers.Timer timer = new System.Timers.Timer();
        private List<Bullet> bulletList;
        private int emitRate; //Hvor ofte moveable shapes skal sendes ut på skjermen
        private const int ENERGY_LOSS = 2;

        private DrawShapes thisPanel;

        private awsm_SoundPlayer alienHeadSound, bulletHitSound;


        private List<Obstacle> obstacleList;
        private Rocket rocket;
        private Region collisionRegion;

        private List<MovableShape> movableShapeList; //STH
        private List<MovableShape> activeMovableShapeList;
        Emitter emitter;

        GamePanel parentGamePanel; // lenke til Gamepanelet, så vi kan akkssere FPS labelen

        /// <summary>
        /// Konstruktør som setter opp alle objektene som skal tegnes opp
        /// Skrevet av <NAME>
        /// </summary>
        /// <param name="_parentGamePanel">Referanse til GamePanelet </param>
        /// <param name="_obstacleList">Liste med Obstacles</param>
        /// <param name="_rocket">Romskipet vårt</param>
        public DrawShapes(GamePanel _parentGamePanel, int _emitRate, List<Obstacle> _obstacleList, List<MovableShape> _movableShapeList, Rocket _rocket)
        {
            parentGamePanel = _parentGamePanel;
            emitRate = _emitRate;
            obstacleList = _obstacleList;
            movableShapeList = _movableShapeList;
            activeMovableShapeList = new List<MovableShape>();
            rocket = _rocket;
            emitter = new Emitter(_parentGamePanel, _movableShapeList);
            collision = false;
            random = new Random();

            bulletList = new List<Bullet>();
            thisPanel = this;
            nextEmit = random.Next(300);
        }


        //Public get for Deltatiden. Brukt for å oppdatere spillobjektene uavhengig av FPS
        public float GetElapsedTime{
            get{
                return elapsedTime;
            }
        }

        public void AddBullet(Bullet bullet)
        {
            bulletList.Add(bullet);
        }

 /*       public void SetMovableObjectList(List<MovableShape> list)
        {
            movableShapeList = list;
        } */
        

        /// <summary>
        /// Flytter objektene ved å å gå igjennom alle flyttbare objekter og gå igjennom Move metodene deres.
        /// Skrevet av Silje
        /// </summary>
        public void Update(int _emitRate)
        {
            Emit(_emitRate);
            activeMovableShapeList = emitter.activeMovableShapeList;
            emitter.RemoveMovableShapesWhenGone();

            foreach (MovableShape shape in activeMovableShapeList)
            {
                
                if (shape is UFO)
                {
                    UFO ufo = shape as UFO;
                    ufo.Move(thisPanel, GetElapsedTime, random.Next(100,400));
                }
                shape.Move(GetElapsedTime);
            }

            foreach (Bullet bullet in bulletList)
            {
                bullet.Move(GetElapsedTime);
            }
            //rocket.Accelerate();
            rocket.Move(GetElapsedTime);
        }

        /// <summary>
        /// Sjekker for kollisjoner ved å gå igjennom alle flyttbare objekter og sjekke kollisjonsmetodene deres
        /// Skrevet av <NAME> Silje
        /// </summary>
        public void CollisonCheck(PaintEventArgs e)
        {
            collision = false; //Resetter collisions testen

            if (rocket.X < 0)
            {
                rocket.xThrust += 10;
            }
            else if (rocket.X + rocket.WidthOfRocket > parentGamePanel.panelWidth)
            {
                rocket.xThrust -= 10;
            }
            if (rocket.Y < 0 )
            {
                rocket.yThrust += 10;
            }
            else if (rocket.Y > parentGamePanel.panelHeight)
            {
                rocket.yThrust -= 10;
            }
           
            foreach (MovableShape shape in activeMovableShapeList)
            {
                RegionData regionData = shape.region.GetRegionData();

                collisionRegion = new Region(regionData);
                collisionRegion.Intersect(rocket.region);
                if (!collisionRegion.IsEmpty(e.Graphics))
                {

                    if (shape is AlienHead && shape.active == true)
                    {
                        shape.active = false;
                        parentGamePanel.score += 100;
                        alienHeadSound = new awsm_SoundPlayer("splat.wav");

                    }
                    else if(shape.active == true)
{'fraction_non_alphanumeric': 0.07808836789900811, 'fraction_numerical': 0.004508566275924256, 'mean_word_length': 1.7385185185185186, 'pattern_counts': {'":': 0, '<': 59, '<?xml version=': 0, '>': 59, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1371586', 'n_tokens_mistral': 3134, 'n_tokens_neox': 2949, 'n_words': 778}