Ejemplo n.º 1
0
        private void spawnCop()
        {
            int randNum = Game1.random.Next(map.nodes.Count);
            Node randNode = map.nodes.ElementAt(randNum);
            while (Camera.X - Camera.Width / 2 < randNode.Position.X &&
                   Camera.X + Camera.Width / 2 > randNode.Position.X &&
                   Camera.Y - Camera.Height / 2 < randNode.Position.Y &&
                   Camera.Y + Camera.Height / 2 > randNode.Position.Y)
            {
                randNum = Game1.random.Next(map.nodes.Count);
                randNode = map.nodes.ElementAt(randNum);
            }
            double randFloat = Game1.random.NextDouble();
            randNum = Game1.random.Next(2);
            
            NPC newNpc;

            if (randFloat <= dumbCopThreshold)
            {
                Animation animation;
                DumbCopState dcState;
                if (randNum == 1)
                {
                    dcState = DumbCopState.STATIC;
                    animation = SpriteDatabase.GetAnimation("cop_static");

                }
                else
                {
                    dcState = DumbCopState.WANDER;
                    animation = SpriteDatabase.GetAnimation("cop_walk");
                }
                newNpc = new DumbCop(
                    new PhysicsComponent2D(new Vector2(randNode.Position.X, randNode.Position.Y), 0, new Vector2(20, 20), Speeds.DumbCop_Run, 750, Speeds.DumbCop_Walk, 1000, 8, 50, 0.25f, true),
                    new MovementAIComponent2D(),
                    new DrawComponent(animation, Color.White, Vector2.Zero, new Vector2(.4f, .4f), .5f), dcState);
            }
            else if (randFloat <= smartCopThreshold+dumbCopThreshold)
            {
                Animation animation;
                SmartCopState scState;
                if (randNum == 1)
                {
                    scState = SmartCopState.STATIC;
                    animation = SpriteDatabase.GetAnimation("smartCop_static");

                }
                else
                {
                    scState = SmartCopState.WANDER;
                    animation = SpriteDatabase.GetAnimation("smartCop_walk");
                }
                newNpc = new SmartCop(
                                new PhysicsComponent2D(new Vector2(randNode.Position.X, randNode.Position.Y), 0, new Vector2(20, 20),
                                    Speeds.SmartCop_Run, 750, Speeds.SmartCop_Walk, 1000, 8, 50, 0.25f, true),
                                new MovementAIComponent2D(3, 2, MathHelper.ToRadians(45), 0.5f, 50, 25, Vector2.Zero, Vector2.Zero, 0.1f),
                                new DrawComponent(animation, Color.White, Vector2.Zero,
                                    new Vector2(.4f, .4f), .5f), scState);
            }
            else
            {
                newNpc = new RoboCop(
                            new PhysicsComponent2D(new Vector2(randNode.Position.X, randNode.Position.Y), 0, new Vector2(20, 20), Speeds.RoboCop_Run, 750, 75, 1000, 8, 50, 0.25f, true),
                            new MovementAIComponent2D(),
                            new DrawComponent(SpriteDatabase.GetAnimation("roboCop_static"), Color.White,
                                              Vector2.Zero, new Vector2(.4f, .4f), .5f));
            }
            
            npcs.Add(newNpc);
            moveableObjectsX.Add(newNpc);
            moveableObjectsY.Add(newNpc);
            moveableObjectsX = moveableObjectsX.OrderBy(o => o.ComponentPhysics.Position.X).ToList();
            moveableObjectsY = moveableObjectsY.OrderBy(o => o.ComponentPhysics.Position.Y).ToList();
            if (newNpc is SmartCop)
            {
                smartFlock.Members.Add(newNpc);
                newNpc.flock = smartFlock;
            }
            if (newNpc is DumbCop)
            {
                dumbFlock.Members.Add(newNpc);
                newNpc.flock = dumbFlock;
            }
            spawnCount++;
            updateSpawnData();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Update
        /// </summary>
        public void Update(GameTime gameTime, World w)
        {
            pos = physics.Position;

            bool wallCollision = false;
            if (state != SmartCopState.FALL || state != SmartCopState.GET_UP || state != SmartCopState.HIT)
            {
                wallCollision = testWallCollide();
            }

            if (!wallCollision)
            {
                updateState(gameTime);
            }

            if (closest == this)
            {
                closestDistSq = (Game1.world.streaker.ComponentPhysics.Position - physics.Position).LengthSquared();
            }
            else
            {
                float distSq = (Game1.world.streaker.ComponentPhysics.Position - physics.Position).LengthSquared();
                if (distSq < closestDistSq)
                {
                    closest = this;
                    closestDistSq = distSq;
                }
            }

            movement.Look(ref physics);
            physics.UpdatePosition(gameTime.ElapsedGameTime.TotalSeconds, out pos, this);
            physics.UpdateOrientation(gameTime.ElapsedGameTime.TotalSeconds);

            if (state == SmartCopState.HIT)
            {
                if (pos.X < Game1.world.streaker.Position.X)
                {
                    draw.SpriteEffect = SpriteEffects.None;
                }
                else
                {
                    draw.SpriteEffect = SpriteEffects.FlipHorizontally;
                }
            }
            else if (physics.Orientation > 0)
            {
                draw.SpriteEffect = SpriteEffects.None;
            }
            else if (physics.Orientation < 0)
            {
                draw.SpriteEffect = SpriteEffects.FlipHorizontally;
            }

            draw.Update(gameTime);
            if (draw.animComplete && (state == SmartCopState.FALL || state == SmartCopState.GET_UP))
            {
                draw.GoToPrevFrame();
            }
            if (draw.animComplete && state == SmartCopState.HIT &&
                Math.Abs(Game1.world.streaker.Position.X - pos.X) <= HIT_DISTANCE_X &&
                Math.Abs(Game1.world.streaker.Position.Y - pos.Y) <= HIT_DISTANCE_Y)
            {
                Game1.world.streaker.GetHit();
                playSound("Hit");
            }
            base.Update(gameTime);

        }
Ejemplo n.º 3
0
        public void Load(string filename)
        {
            walls.Clear();
            nodes.Clear();
            startingNPCs.Clear();
            consumables.Clear();
            playerStart = new Vector2();

            StreamReader reader = new StreamReader(filename);
            try
            {
                string line = reader.ReadLine();
                if (line.StartsWith("RECTANGLES"))
                    line = reader.ReadLine();
                do
                {
                    int x, y, w, h;
                    bool seeThrough;
                    int spacei = line.IndexOf(' ');
                    x = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    y = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    w = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    h = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    seeThrough = bool.Parse(line);
                    if (w > 0 && h > 0)
                        walls.Add(new Wall(new Vector2(x,y), new BoundingRectangle(x, y, w, h), seeThrough));
                    line = reader.ReadLine();
                } while (reader.Peek() != -1
                    && !line.StartsWith("NODES")
                    && !line.StartsWith("EDGES")
                    && !line.StartsWith("NPCS")
                    && !line.StartsWith("TRIGGER")
                    && !line.StartsWith("PLAYER")
                    );

                if (line.StartsWith("NODES"))
                    line = reader.ReadLine();
                do
                {
                    int id, x, y;
                    bool key;
                    int spacei = line.IndexOf(' ');
                    id = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    x = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    y = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    key = bool.Parse(line);
                    nodes.Add(new Node(x, y, key, id));
                    line = reader.ReadLine();
                } while (reader.Peek() != -1
                    && !line.StartsWith("EDGES")
                    && !line.StartsWith("NPCS")
                    && !line.StartsWith("TRIGGER")
                    && !line.StartsWith("PLAYER")
                    );

                if (line.StartsWith("EDGES"))
                    line = reader.ReadLine();
                do
                {
                    int sid, eid;
                    int spacei = line.IndexOf(' ');
                    sid = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    eid = int.Parse(line);
                    Node n1 = nodes.Find(n => n.ID == sid);
                    Node n2 = nodes.Find(n => n.ID == eid);
                    n1.Edges.Add(new Edge(n1, n2));
                    n2.Edges.Add(new Edge(n2, n1));
                    line = reader.ReadLine();
                } while (reader.Peek() != -1
                    && !line.StartsWith("NPCS")
                    && !line.StartsWith("TRIGGER")
                    && !line.StartsWith("PLAYER")
                    );

                if (line.StartsWith("NPCS"))
                    line = reader.ReadLine();
                do
                {
                    int x, y, sid, eid;
                    string type, mode;
                    int spacei = line.IndexOf(' ');
                    x = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    y = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    type = line.Substring(0, spacei);
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    mode = line.Substring(0, spacei);
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    sid = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    eid = int.Parse(line);
                    Node pStart = null, pEnd = null;
                    if (sid > 0 && eid > 0)
                    {
                        pStart = nodes.Find(n => n.ID == sid);
                        pEnd = nodes.Find(n => n.ID == sid);
                    }
                    NPC npc = null;
                    Animation animation;
                    if (type.StartsWith("Civilian"))
                    {
                        int pnum = Game1.random.Next(1, 4);
                        string pedAnim = "student" + pnum + "_static";
                        //Animation a = SpriteDatabase.GetAnimation("cop_static");
                        PedestrianState pstate = PedestrianState.WANDER;
                        if (mode.StartsWith("Static"))
                        {
                            pstate = PedestrianState.STATIC;
                            animation = SpriteDatabase.GetAnimation("student" + pnum + "_static");
                        }
                        else
                        {
                            animation = SpriteDatabase.GetAnimation("student" + pnum + "_walk");
                        }
                        npc = new Pedestrian(
                            new PhysicsComponent2D(new Vector2(x, y), 0, new Vector2(20, 20), 115, 750, 75, 1000, 8, 40, 0.25f, true),
                            new MovementAIComponent2D(),
                            new DrawComponent(animation, Color.White, Vector2.Zero, new Vector2(.4f, .4f), .5f),
                            pstate
                            );
                    }
                    // The cops are not in, so they are ignored for now

                    if (type.StartsWith("DumbCop"))
                    {
                        DumbCopState dcState = DumbCopState.WANDER;
                        if (mode.StartsWith("Static"))
                        {
                            dcState = DumbCopState.STATIC;
                            animation = SpriteDatabase.GetAnimation("cop_static");
                            
                        }
                        else if (mode.StartsWith("Wander"))
                        {
                            dcState = DumbCopState.WANDER;
                            animation = SpriteDatabase.GetAnimation("cop_walk");
                        }
                        else
                        {
                            //TODO
                            dcState = DumbCopState.WANDER;
                            animation = SpriteDatabase.GetAnimation("cop_walk");
                        }
                        npc = new DumbCop(
                            new PhysicsComponent2D(new Vector2(x, y), 0, new Vector2(20, 20), World.Speeds.DumbCop_Run, 750, World.Speeds.DumbCop_Walk, 1000, 8, 50, 0.25f, true),
                            new MovementAIComponent2D(),
                            new DrawComponent(animation, Color.White, Vector2.Zero, new Vector2(.4f, .4f), .5f), dcState);

                    }
                    if (type.StartsWith("SmartCop"))
                    {
                        SmartCopState dcState = SmartCopState.WANDER;
                        if (mode.StartsWith("Static"))
                        {
                            dcState = SmartCopState.STATIC;
                            animation = SpriteDatabase.GetAnimation("smartCop_static");

                        }
                        else
                        {
                            dcState = SmartCopState.WANDER;
                            animation = SpriteDatabase.GetAnimation("smartCop_walk");
                        }

                        npc = new SmartCop(
                            new PhysicsComponent2D(new Vector2(x, y), 0, new Vector2(20, 20), World.Speeds.SmartCop_Run, 750, World.Speeds.SmartCop_Walk, 1000, 8, 50, 0.25f, true),
                            new MovementAIComponent2D(3, 2, MathHelper.ToRadians(45), 0.5f, 50, 25, Vector2.Zero, Vector2.Zero,0.1f),
                            new DrawComponent(animation, Color.White, Vector2.Zero, new Vector2(.4f, .4f), .5f), dcState);
                    }
                    if (type.StartsWith("RoboCop"))
                    {
                        npc = new RoboCop(
                            new PhysicsComponent2D(new Vector2(x, y), 0, new Vector2(20, 20), World.Speeds.RoboCop_Run, 750, 75, 1000, 8, 50, 0.25f, true),
                            new MovementAIComponent2D(),
                            new DrawComponent(SpriteDatabase.GetAnimation("roboCop_static"), Color.White, 
                                              Vector2.Zero, new Vector2(.4f, .4f), .5f));
                    }
                    if (npc != null)
                    {
                        if (pStart != null && pEnd != null)
                        {
                            npc.patrolStart = pStart;
                            npc.patrolEnd = pEnd;
                        }
                        startingNPCs.Add(npc);
                    }
                    line = reader.ReadLine();
                }
                while (reader.Peek() != -1
                    && !line.StartsWith("TRIGGER")
                    && !line.StartsWith("PLAYER")
                    );

                if (line.StartsWith("TRIGGER"))
                    line = reader.ReadLine();
                do
                {
                    int x, y, w, h, id;
                    int spacei = line.IndexOf(' ');
                    x = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    y = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    w = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    h = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    id = int.Parse(line);
                    triggers.Add(new Trigger(x, y, w, h, id));
                    line = reader.ReadLine();
                } while (reader.Peek() != -1
                    && !line.StartsWith("NODES")
                    && !line.StartsWith("EDGES")
                    && !line.StartsWith("NPCS")
                    && !line.StartsWith("PLAYER")
                    && !line.StartsWith("CONSUMABLE"));

                if (line.StartsWith("CONSUMABLE"))
                    line = reader.ReadLine();
                do
                {
                    int x, y;
                    ConsumableType t;
                    int spacei = line.IndexOf(' ');
                    x = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    y = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    t = (ConsumableType)Enum.Parse(typeof(ConsumableType), line);
                    consumables.Add(new ConsumableSpawnpoint(new Vector2(x, y), t));
                    line = reader.ReadLine();
                } while (reader.Peek() != -1
                    && !line.StartsWith("NODES")
                    && !line.StartsWith("EDGES")
                    && !line.StartsWith("NPCS")
                    && !line.StartsWith("TRIGGER")
                    && !line.StartsWith("PLAYER"));

                if (line.StartsWith("PLAYER"))
                    line = reader.ReadLine();
                do
                {
                    int x, y;
                    int spacei = line.IndexOf(' ');
                    x = int.Parse(line.Substring(0, spacei));
                    line = line.Substring(spacei + 1);
                    spacei = line.IndexOf(' ');
                    y = int.Parse(line);
                    playerStart = new Vector2(x, y);
                    line = reader.ReadLine();
                } while (reader.Peek() != -1);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }