Ejemplo n.º 1
0
        public static void Initialize(SolarBodiesContext context)
        {
            context.Database.EnsureCreated();

            if (!context.Planets.Any())
            {
                var MoonEarth = new Moon()
                {
                    name     = "Moon",
                    Diameter = 1737,
                };
                var Earth = new Planet()
                {
                    name            = "Earth",
                    DistanceFromSun = 1,
                    Surface         = "Rocky",
                    Diameter        = 6371,
                    Moon            = MoonEarth
                };
                context.Planets.Add(Earth);
                context.Moons.Add(MoonEarth);

                var Deimos = new Moon()
                {
                    name     = "Phobos",
                    Diameter = 11,
                };

                var Mars = new Planet()
                {
                    name            = "Mars",
                    DistanceFromSun = 1.52,
                    Surface         = "Rocky",
                    Diameter        = 3390,
                    Moon            = Deimos
                };
                context.Planets.Add(Mars);
                context.Moons.Add(Deimos);

                context.SaveChanges();
            }

            if (!context.Asteroids.Any())
            {
                var _52Europa = new Asteroid()
                {
                    name     = "52 Europa",
                    Diameter = 315,
                    Origin   = "Asteroid belt",
                    Shape    = "triaxial ellipsoid"
                };
                context.Asteroids.Add(_52Europa);
                context.SaveChanges();
            }

            if (!context.SBodies.Any())
            {
                var SBodies = new SBodies()
                {
                    Planets   = "http://localhost:5000/api/v1/planets/",
                    Asteroids = "http://localhost:5000/api/v1/Asteroids"
                };

                context.SBodies.Add(SBodies);
                context.SaveChanges();
            }
        }
Ejemplo n.º 2
0
        public abstract string Serialize(); //Returns string code of all necessary save data

        //Static method for deserializing string code formed by all Entities' Serialize methods.
        public static Entity Deserialize(string code, string type, GameController game)
        {
            string[] des    = code.Split(',');
            Entity   result = null;

            if (type == "enemy")
            {
                if (des[0] == "bullet")
                {
                    if (des[1] == "normal")
                    {
                        result = new Bullet(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]));
                        (result as Bullet).direction = -1;
                        return(result);
                    }
                    if (des[1] == "slanted")
                    {
                        result = new Slanted_Bullet(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]), Convert.ToDouble(des[4]));
                        (result as Slanted_Bullet).id = ID.Hostile;

                        return(result);
                    }
                }
                else if (des[0] == "asteroid")
                {
                    result = new Asteroid(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]));
                    (result as Asteroid).health = Convert.ToInt32(des[1]);
                    return(result);
                }
                else if (des[0] == "formation")
                {
                    pattern flight = pattern.Straight;
                    foreach (pattern val in Enum.GetValues(typeof(pattern)))
                    {
                        if (des[3] == val.ToString())
                        {
                            flight = val;
                            break;
                        }
                    }
                    return(new Formation(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), flight));
                }
                else if (des[0] == "ai")
                {
                    result = new AI(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), pattern.Straight);
                    return(result);
                }
                else if (des[0] == "mine")
                {
                    result = new Mine(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), pattern.Straight);
                    return(result);
                }
                else if (des[0] == "tracker")
                {
                    result = new Tracker(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), pattern.Straight);
                    return(result);
                }
                else if (des[0] == "powerup")
                {
                    PowerUp p = PowerUp.Empty;
                    foreach (PowerUp val in Enum.GetValues(typeof(PowerUp)))
                    {
                        if (des[3] == val.ToString())
                        {
                            p = val;
                            break;
                        }
                    }
                    result = new Powerup(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), p);
                    return(result);
                }
                else if (des[0] == "boss")
                {
                    if (des[1] == "easy")
                    {
                        result = new Boss_Easy(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]), Convert.ToInt32(des[4]), game.winWidth, game.winHeight);
                        foreach (MState val in Enum.GetValues(typeof(MState)))
                        {
                            if (des[5] == val.ToString())
                            {
                                (result as Boss_Easy).currentState = val;
                                break;
                            }
                        }

                        (result as Boss_Easy).isEntering     = Convert.ToBoolean(des[6]);
                        (result as Boss_Easy).goingBackwards = Convert.ToBoolean(des[7]);
                        (result as Boss_Easy).dir            = Convert.ToInt32(des[8]);

                        return(result);
                    }
                    else if (des[1] == "medium")
                    {
                        result = new Boss_Medium(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]), Convert.ToInt32(des[4]), game.winWidth, game.winHeight);
                        foreach (State val in Enum.GetValues(typeof(State)))
                        {
                            if (des[5] == val.ToString())
                            {
                                (result as Boss_Medium).state = val;
                                break;
                            }
                        }

                        return(result);
                    }
                    else if (des[1] == "hard")
                    {
                        result = new Boss_Hard(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]), Convert.ToInt32(des[4]), game.winWidth, game.winHeight);
                        foreach (State val in Enum.GetValues(typeof(State)))
                        {
                            if (des[5] == val.ToString())
                            {
                                (result as Boss_Hard).state = val;
                                break;
                            }
                        }

                        foreach (Direction val in Enum.GetValues(typeof(Direction)))
                        {
                            if (des[6] == val.ToString())
                            {
                                (result as Boss_Hard).dir = val;
                                break;
                            }
                        }


                        (result as Boss_Hard).x_axis = Convert.ToDouble(des[7]);
                        return(result);
                    }
                }
                else
                {
                    throw new Exception("Enemy type Unknown.");
                }
            }
            else if (type == "player")
            {
                result = new Player(Convert.ToDouble(des[0]), Convert.ToDouble(des[1]), Convert.ToInt32(des[3]), Convert.ToInt32(des[4]), game, "SHIP_IMAGE");

                foreach (PowerUp val in Enum.GetValues(typeof(PowerUp)))
                {
                    if (des[2] == val.ToString())
                    {
                        (result as Player).powerup = val;
                        break;
                    }
                }

                (result as Player).isPoweredUp      = Convert.ToBoolean(des[5]);
                (result as Player).cheating         = Convert.ToBoolean(des[7]);
                (result as Player).powerUpCounter   = Convert.ToDouble(des[6]);
                (result as Player).image            = des[8];
                (result as Player).triple           = Convert.ToBoolean(des[9]);
                (result as Player).wanderingbullets = Convert.ToBoolean(des[10]);
                (result as Player).extraSpeed       = Convert.ToBoolean(des[11]);
                (result as Player).rapid_fire       = Convert.ToBoolean(des[12]);
                (result as Player).isInvincible     = Convert.ToBoolean(des[13]);
                (result as Player).LoadPowerups();

                return(result);
            }
            else if (type == "playerBullet")
            {
                if (des[1] == "normal")
                {
                    result = new Bullet(Convert.ToInt32(des[2]), Convert.ToInt32(des[3]));
                    (result as Bullet).direction = 1;
                    return(result);
                }
                else if (des[1] == "slanted")
                {
                    result = new Slanted_Bullet(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]), Convert.ToDouble(des[4]));
                    (result as Slanted_Bullet).id = ID.Friendly;

                    return(result);
                }
                else if (des[1] == "wandering")
                {
                    pattern p = pattern.Straight;
                    foreach (pattern val in Enum.GetValues(typeof(pattern)))
                    {
                        if (des[6] == val.ToString())
                        {
                            p = val;
                            break;
                        }
                    }
                    result = new Wandering_Bullet(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]), p);
                    (result as Wandering_Bullet).id         = ID.Friendly;
                    (result as Wandering_Bullet).original_X = Convert.ToDouble(des[4]);
                    (result as Wandering_Bullet).original_Y = Convert.ToDouble(des[5]);
                    (result as Wandering_Bullet).x_axis     = Convert.ToDouble(des[7]);

                    return(result);
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        public static Entity Deserialize(string code, string type, GameController game)
        {
            string[] des    = code.Split(',');
            Entity   result = null;

            if (type == "enemy")
            {
                if (des[0] == "bullet")
                {
                    result = new Bullet(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]));
                    (result as Bullet).direction = -1;
                    return(result);
                }
                else if (des[0] == "asteroid")
                {
                    result = new Asteroid(Convert.ToDouble(des[2]), Convert.ToDouble(des[3]));
                    (result as Asteroid).health = Convert.ToInt32(des[1]);
                    return(result);
                }
                else if (des[0] == "formation")
                {
                    pattern flight = pattern.Straight;
                    foreach (pattern val in Enum.GetValues(typeof(pattern)))
                    {
                        if (des[3] == val.ToString())
                        {
                            flight = val;
                            break;
                        }
                    }

                    return(new Formation(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), flight));
                }
                else if (des[0] == "ai")
                {
                    result = new AI(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), pattern.Straight);
                    return(result);
                }
                else if (des[0] == "mine")
                {
                    result = new Mine(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), pattern.Straight);
                    return(result);
                }
                else if (des[0] == "tracker")
                {
                    result = new Tracker(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), pattern.Straight);
                    return(result);
                }
                else if (des[0] == "powerup")
                {
                    PowerUp p = PowerUp.Empty;
                    foreach (PowerUp val in Enum.GetValues(typeof(PowerUp)))
                    {
                        if (des[3] == val.ToString())
                        {
                            p = val;
                            break;
                        }
                    }
                    result = new Powerup(Convert.ToDouble(des[1]), Convert.ToDouble(des[2]), p);
                }
                else if (des[0] == "boss")
                {
                }
                else
                {
                    throw new Exception("Enemy type Unknown.");
                }
            }
            else if (type == "player")
            {
                result = new Player(Convert.ToDouble(des[0]), Convert.ToDouble(des[1]), Convert.ToInt32(des[3]), Convert.ToInt32(des[4]), game, "SHIP_IMAGE");



                foreach (PowerUp val in Enum.GetValues(typeof(PowerUp)))
                {
                    if (des[2] == val.ToString())
                    {
                        (result as Player).powerup = val;
                        break;
                    }
                }

                if (des[5] == "True")
                {
                    (result as Player).isPoweredUp = true;
                }
                else
                {
                    (result as Player).isPoweredUp = false;
                }

                if (des[7] == "True")
                {
                    (result as Player).cheating = true;
                }
                else
                {
                    (result as Player).cheating = false;
                }

                (result as Player).powerUpCounter = Convert.ToDouble(des[6]);
            }
            else if (type == "playerBullet")
            {
                result = new Bullet(Convert.ToInt32(des[1]), Convert.ToInt32(des[2]));
                (result as Bullet).direction = 1;
                return(result);
            }
            return(result);
        }
    void Update()
    {
        if (model.gameOver)
        {
            view.restartText.gUIText.text = "Press 'R' for Restart";
        }

        //Hazard control
        for (int i = 0; i < model.hazards.Count; i++)
        {
            if (model.hazards[i].GetCollider() != null)
            {
                if (model.hazards[i].GetType() == typeof(Model.EnemySpaceship))
                {
                    Model.EnemySpaceship enemySpaceship = (Model.EnemySpaceship)model.hazards[i];

                    //Player/Enemy Spaceship bolts collision
                    for (int j = 0; j < enemySpaceship.GetCannon().bolts.Count; j++)
                    {
                        if (model.player.spaceship.CollisionDetection(enemySpaceship.GetCannon().bolts[j].collider, NO_OPERATOR))
                        {
                            Transform modelTransform = model.player.spaceship.gameObject.transform;
                            view.playerSpaceship.explosion.Explode(modelTransform.position, modelTransform.rotation);
                            GameOver();
                            break;
                        }

                        //Enemy Spaceship bolts/Boundary collision
                        if (enemySpaceship.GetCannon().bolts[j].CollisionDetection(model.boundary.collider, NOT_OPERATOR))
                            enemySpaceship.GetCannon().DestroyBolt(j);
                    }

                    //Enemy spaceship control
                  /*  if (Time.time > enemySpaceship.nextMove.x)
                    {
                        enemySpaceship.nextMove.x = Time.time + enemySpaceship.moveRate.x;
                        enemySpaceship.targetManeuver = (enemySpaceship.kind == 0 ? UnityEngine.Random.Range(7, 10) : UnityEngine.Random.Range(4, 6)) * -Mathf.Sign(gameObject.transform.position.x);
                        enemySpaceship.moveRate.x = UnityEngine.Random.Range(enemySpaceship.moveRateMin, enemySpaceship.moveRateMax);
                    }
					*//*
                    if (Time.time > enemySpaceship.nextMove.y)
                    {
                        enemySpaceship.nextMove.y = Time.time + enemySpaceship.moveRate.y;
                        enemySpaceship.targetManeuver = (enemySpaceship.kind == 0 ? UnityEngine.Random.Range(5, 8) : UnityEngine.Random.Range(0, 3)) * -Mathf.Sign(gameObject.transform.position.x);
                        enemySpaceship.moveRate.y = UnityEngine.Random.Range(enemySpaceship.moveRateMin, enemySpaceship.moveRateMax);
                    }*/
					/*
                    float newManeuver = Mathf.MoveTowards(enemySpaceship.rigidbody.velocity.x, enemySpaceship.targetManeuver, 7.5f * Time.deltaTime);
                    enemySpaceship.rigidbody.velocity = new Vector3(newManeuver, 0.0f, enemySpaceship.rigidbody.velocity.z);
					*/

                    if (enemySpaceship.rigidbody != null)
                        enemySpaceship.rigidbody.rotation = Quaternion.Euler(0.0f, 0.0f, enemySpaceship.rigidbody.velocity.x * -7f);

                    if (Time.time > enemySpaceship.cannon.nextFire)
                    {
                        enemySpaceship.cannon.nextFire = Time.time + enemySpaceship.cannon.fireRate;
                        enemySpaceship.cannon.Fire();
                        View.EnemySpaceship enemySpaceshipView = (View.EnemySpaceship)view.hazards[i];
                        enemySpaceshipView.NewBolt(enemySpaceship.cannon.bolts[enemySpaceship.cannon.bolts.Count - 1].gameObject.transform);
                    }
                }
                else
                {
                    //Asteroid control
                    Model.Asteroid asteroid = (Model.Asteroid)model.hazards[i];

                    asteroid.eulerAngles.x += Time.deltaTime * asteroid.rotationSpeed.x;
                    asteroid.eulerAngles.y += Time.deltaTime * asteroid.rotationSpeed.y;
                    asteroid.eulerAngles.z += Time.deltaTime * asteroid.rotationSpeed.z;

                    if (asteroid.gameObject != null)
                        asteroid.gameObject.transform.eulerAngles = asteroid.eulerAngles;
                }

                //Flag hazard for deletion by exit of boundary
           
				if (model.hazards[i].CollisionDetection(model.boundary.collider, NOT_OPERATOR))
                {
                    removeHazards.Add(i);
                }

                //Player/Hazard collision
                if (model.player.spaceship.CollisionDetection(model.hazards[i].GetCollider(), NO_OPERATOR))
                {
                    Transform modelTransform = model.player.spaceship.gameObject.transform;
                    view.playerSpaceship.explosion.Explode(modelTransform.position, modelTransform.rotation);

                    modelTransform = model.hazards[i].GetGameObject().transform;
                    if (view.hazards[i].GetType() == typeof(View.EnemySpaceship))
                    {
                        View.EnemySpaceship enemySpaceship = (View.EnemySpaceship)view.hazards[i];
                        enemySpaceship.explosion.Explode(modelTransform.position, modelTransform.rotation);
                    }
                    else if (view.hazards[i].GetType() == typeof(View.Asteroid))
                    {
                        View.Asteroid asteroid = (View.Asteroid)view.hazards[i];
                        asteroid.explosion.Explode(modelTransform.position, modelTransform.rotation);
                    }

                    model.hazards[i].Destroy();
                    removeHazards.Add(i);

                    GameOver();
                    break;
                }

                //Hazards/Player bolts collision 
                for (int j = 0; j < model.player.spaceship.cannon.bolts.Count; j++)
                {
                    model.player.spaceship.cannon.bolts[j].CollisionDetection(model.hazards[i].GetCollider(), NO_OPERATOR);

                    if (model.hazards[i].CollisionDetection(model.player.spaceship.cannon.bolts[j].GetCollider(), NO_OPERATOR))
                    {
                        Transform modelTransform = model.hazards[i].GetGameObject().transform;
                        if (view.hazards[i].GetType() == typeof(View.EnemySpaceship))
                        {
                            View.EnemySpaceship enemySpaceship = (View.EnemySpaceship)view.hazards[i];
                            enemySpaceship.explosion.Explode(modelTransform.position, modelTransform.rotation);
                        }
                        else if (view.hazards[i].GetType() == typeof(View.Asteroid))
                        {
                            View.Asteroid asteroid = (View.Asteroid)view.hazards[i];
                            asteroid.explosion.Explode(modelTransform.position, modelTransform.rotation);
                        }

                        AddScore(model.hazards[i].GetPoints());
                        model.player.spaceship.cannon.DestroyBolt(j);
                    }
                }
            }
        }

        //Player control
        //Destroy bolts that exits the boundary
        for (int j = 0; j < model.player.spaceship.cannon.bolts.Count; j++)
        {
            if (model.player.spaceship.cannon.bolts[j].CollisionDetection(model.boundary.collider, NOT_OPERATOR))
                model.player.spaceship.cannon.DestroyBolt(j);
        }

        if (!model.gameOver)
        {
            //Clamp player within the screen
            model.player.spaceship.rigidbody.position = new Vector3(
                Mathf.Clamp(model.player.spaceship.rigidbody.position.x, model.player.spaceship.boundary.x, model.player.spaceship.boundary.y),
                0.0f,
                Mathf.Clamp(model.player.spaceship.rigidbody.position.z, model.player.spaceship.boundary.z, model.player.spaceship.boundary.w)
            );

            //Roll player spaceship by sideways velocity
          //  model.player.spaceship.rigidbody.rotation = Quaternion.Euler(0.0f, 0.0f, model.player.spaceship.rigidbody.velocity.x * -7f);
        }

        //Subscribe the ShootEvent ones when possible to fire
        if (!view.ShootEventSubscribed() && Time.time > model.player.spaceship.cannon.nextFire)
        {
            view.OnShoot += ShootEvent;
        }

        //UpdateView(model.player.spaceship.gameObject, view.playerSpaceship.gameObject);

        //Destroy hazards flagged for destroy
        foreach (int i in removeHazards)
        {
            model.hazards[i].Destroy();
        }

        //Reset destroy flag list
        removeHazards = new List<int>();
    }