Ejemplo n.º 1
0
        private void doorUpdate()
        {
            bool clickedThisFrame = false;

            foreach (Door item in doors)
            {
                if (Mousecontrol.clickedOnItem(item.getSprite().Position, item.getSprite().FrameSize, Mousecontrol.clicked()) && !Registry.inventoryInUse)
                {
                    if (!item.isLocked)
                    {
                        toChangeRoom     = true;
                        nextDoor         = item;
                        clickedThisFrame = true;
                    }
                }
                else if (Mousecontrol.clicked() && !clickedThisFrame)
                {
                    toChangeRoom = false;
                    //nextDoor = new Door();
                }
            }
            if (toChangeRoom)
            {
                if (Mousecontrol.inProximityToItem(nextDoor.position, new Point(nextDoor.getSprite().FrameSize.X + 2, nextDoor.getSprite().FrameSize.Y + 2)))
                {
                    toChangeRoom = false;
                    int     nextRoomId    = int.Parse(nextDoor.nextRoomID);
                    Vector2 door2Position = nextDoor.door2Position;
                    nextDoor = new Door();
                    changeRoom(nextRoomId, door2Position);
                }
            }
        }
Ejemplo n.º 2
0
        public bool giveDoorItem(Item itemClickedOn)
        {
            bool temp = false;

            foreach (Door door in doors)
            {
                if (door.isLocked && Mousecontrol.clickedOnItem(door.getSprite().Position, door.getSprite().FrameSize, true) && (itemClickedOn.name == door.getKey()))
                {
                    door.Unlock();
                    temp = true;
                }
            }
            return(temp);
        }
Ejemplo n.º 3
0
        public bool giveNPCItem(Item itemClickedOn)
        {
            bool temp = false;

            foreach (NPC npc in npcs)
            {
                if (Mousecontrol.clickedOnItem(npc.getPosition, npc.getFrameSize, true) && (itemClickedOn.name == npc.wantedItem))
                {
                    npc.givenItem();
                    temp = true;
                }
            }
            return(temp);
        }
Ejemplo n.º 4
0
        private void mousecontrolUpdate()
        {
            //Om man klickar med musen
            //Om man klickar på ett föremål i rummet
            bool clickedThisFrame = false;

            foreach (Item item in items)
            {
                if (Mousecontrol.clickedOnItem(item.getSprite().Position, item.getSprite().FrameSize, Mousecontrol.clicked()))
                {
                    if (item.isPickable)
                    {
                        isItemClicked    = true;
                        itemClicked      = item;
                        clickedThisFrame = true;
                    }
                }
                else if (Mousecontrol.clicked() && !clickedThisFrame)
                {
                    isItemClicked = false;
                }
            }
        }
Ejemplo n.º 5
0
        public void Update(GameTime gameTime, Rectangle clientBounds)
        {
            clickedOnNew  = false;
            clickedOnOpen = false;
            if (Mousecontrol.clickedOnItem(openSprite.Position, openSprite.FrameSize, Mousecontrol.clicked()))
            {
                clickedOnOpen = true;
            }

            if (Mousecontrol.clickedOnItem(newSprite.Position, newSprite.FrameSize, Mousecontrol.clicked()))
            {
                clickedOnNew = true;
            }

            if (clickedOnNew)
            {
                newSprite.Update(gameTime, clientBounds);
            }
            if (clickedOnOpen)
            {
                openSprite.Update(gameTime, clientBounds);
            }

            if (Mousecontrol.mouseOverItem(openSprite.Position, openSprite.FrameSize))
            {
                openNowSprite = openSprite2;
            }
            else if (Mousecontrol.mouseOverItem(newSprite.Position, newSprite.FrameSize))
            {
                newNowSprite = newSprite2;
            }
            else
            {
                newNowSprite  = newSprite;
                openNowSprite = openSprite;
            }
        }
Ejemplo n.º 6
0
        public void Update()
        {
            if (isInteractingWithItem && !inventoryInUse)
            {
                if (Mousecontrol.clicked())
                {
                    isInteractingWithItem = false;
                }
            }
            if (isInteractingWithItem)
            {
                itemClickedOn.setPosition(new Vector2(Mouse.GetState().X / 3 - itemClickedOn.getSprite().Texture.Width / 2,
                                                      Mouse.GetState().Y / 3 - itemClickedOn.getSprite().Texture.Height / 2));
            }

            //Uppdatering av muskontroll
            if (inventoryInUse)
            {
                if (isInteractingWithItem)
                {
                    //Om man klickar med vänstra musknappen...
                    if (Mousecontrol.clicked())
                    {
                        bool clickedOnItem = false;
                        Item tempItem      = new Item();
                        foreach (Item item in inventory)
                        {
                            //På ett föremål...
                            if (Mousecontrol.clickedOnItem(item.getSprite().Position, item.getSprite().FrameSize, true))
                            {
                                clickedOnItem = true;
                                tempItem      = item;
                            }
                        }
                        //...och om föremålet går att kombinera och man klickar på ett föremål som går att kombinera
                        if (itemClickedOn.isCombinable && clickedOnItem &&
                            itemClickedOn.isCombinable)
                        {
                            //...går det att kombinera föremålen så kombineras de och annars läggs det föremålet som man klickat på tillbaks i inventoryn
                            if (!combineItem(itemClickedOn, tempItem))
                            {
                                addItem(itemClickedOn);
                            }
                            isInteractingWithItem = false;
                        }
                        else
                        {
                            addItem(itemClickedOn);
                            isInteractingWithItem = false;
                        }
                    }
                }
                else
                {
                    //Om man klickar ner musen...
                    if (Mousecontrol.clicked())
                    {
                        bool clickedOnItem = false;
                        //... och om man klickar på ett föremål i sin inventory...
                        foreach (Item item in inventory)
                        {
                            if (Mousecontrol.clickedOnItem(item.getPosition(), item.getSprite().FrameSize, true))
                            {
                                itemClickedOn = item;
                                clickedOnItem = true;
                            }
                        }

                        if (clickedOnItem)
                        {
                            //Blir föremålet ett föremål som följer musen och den tas bort från själva inventoryn
                            isInteractingWithItem = true;
                            removeItem(itemClickedOn);
                        }
                    }
                }
            }
            Registry.itemsInInventory = inventory;
            Registry.inventoryInUse   = inventoryInUse;
        }
Ejemplo n.º 7
0
        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            //Klickar man ned i det har gått mer än 1 ruta sedan förra gången man gjorde det öppnas inventoryn
            wait++;
            if (Keyboard.GetState().IsKeyDown(Keys.I))
            {
                if (!inventoryInUse && wait > 1)
                {
                    inventoryInUse = true;
                }
                else if (wait > 1)
                {
                    inventoryInUse = false;
                }
                wait = 0;
            }

            if (isInteractingWithItem)
            {
                itemClickedOn.Draw(gameTime, spriteBatch, 0);
            }

            if (inventoryInUse)
            {
                backgroundSprite.Draw(gameTime, spriteBatch, 1f, 0.002f);

                foreach (Item item in inventory)
                {
                    item.Draw(gameTime, spriteBatch, 0f);
                }

                string textToDraw    = null;
                bool   drawText      = false;
                bool   clickedOnItem = false;
                //Om man håller inne musknappen över ett föremål...
                foreach (Item item in inventory)
                {
                    if (Mousecontrol.rightClickedOnItem(item))
                    {
                        clickedOnItem = true;
                    }
                }
                if ((Mouse.GetState().RightButton == ButtonState.Pressed && clickedOnItem))
                {
                    //...blir texten som ska skrivas ut beskrivningen för föremålet
                    textToDraw = Mousecontrol.getDescription();
                    drawText   = true;
                }
                //Om man håller musen över ett föremål...
                else if (clickedOnItem)
                {
                    //...blir texten som ska skrivas ut namnet på föremålet
                    textToDraw = Mousecontrol.getName();
                    drawText   = true;
                }
                //Om man ska skriva ut text
                if (drawText)
                {
                    //Texten placeras längst ned i inventoryn.
                    spriteBatch.DrawString(game.Content.Load <SpriteFont>(@"textfont"), textToDraw,
                                           new Vector2(game.Window.ClientBounds.Width / 6 - textToDraw.Count() * 4f,
                                                       0), Color.White);
                }
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Ritar ut allt som ska ritas ut i rummet
        /// </summary>
        public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            updateLayerPosition();

            // ritar ut alla objekt i rummet
            foreach (Item item in items)
            {
                item.Draw(gameTime, spriteBatch);
            }

            // dörrar
            foreach (Door item in doors)
            {
                item.Draw(gameTime, spriteBatch);
            }

            // bakgrunden
            animbackground.Draw(gameTime, spriteBatch, 1f, 0.3f);
            // förgrunden
            spriteBatch.Draw(foreground,
                             Vector2.Zero,
                             new Rectangle(0, 0,
                                           game.Window.ClientBounds.Width,
                                           game.Window.ClientBounds.Height),
                             Color.White,
                             0,
                             Vector2.Zero,
                             1,
                             SpriteEffects.None,
                             0.003f);

            if (!Registry.inventoryInUse)
            {
                string textToDraw    = null;
                bool   drawText      = false;
                bool   clickedOnItem = false;
                bool   clickedOnDoor = false;
                foreach (Item item in items)
                {
                    if (Mousecontrol.rightClickedOnItem(item))
                    {
                        clickedOnItem = true;
                    }
                }

                if ((Mouse.GetState().RightButton == ButtonState.Pressed && clickedOnItem))
                {
                    textToDraw = Mousecontrol.getDescription();
                    drawText   = true;
                }
                else if (clickedOnItem)
                {
                    textToDraw = Mousecontrol.getName();
                    drawText   = true;
                }
                if (!clickedOnItem)
                {
                    foreach (Door door in doors)
                    {
                        if (Mousecontrol.rightClickedOnItem(door) && Mouse.GetState().RightButton == ButtonState.Pressed)
                        {
                            clickedOnDoor = true;
                        }
                    }
                    if (clickedOnDoor)
                    {
                        textToDraw = Mousecontrol.getDescription();
                        drawText   = true;
                    }
                }

                if (drawText)
                {
                    spriteBatch.DrawString(game.Content.Load <SpriteFont>(@"textfont"), textToDraw,
                                           new Vector2(game.Window.ClientBounds.Width / 6 - 4f * (textToDraw.Count()),
                                                       0), Color.White);
                }
            }

            // npc:er
            foreach (NPC npc in npcs)
            {
                npc.Draw(gameTime, spriteBatch, Registry.playerPosition);
            }
            if (dialogIsActive)
            {
                if (soundhasplayed == false)
                {
                    dialogSound.Play();
                    soundhasplayed = true;
                }
                roomDialog.Speak(gameTime, spriteBatch, Vector2.Zero);
            }
        }
Ejemplo n.º 9
0
        public void Update(Game game, GameTime gameTime, Rectangle clientBounds)
        {
            if (Registry.playersClothes == Registry.WhichClothes.vanliga)
            {
                currentSprite = vanligSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.militar)
            {
                currentSprite = militarSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.babyjerry)
            {
                currentSprite = babyjerrySprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.jkea)
            {
                currentSprite = jkeaSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.kvinna)
            {
                currentSprite = kvinnaSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.vanligaKort)
            {
                currentSprite = vanligaKortSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.finkladd)
            {
                currentSprite = finkladdSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.fall)
            {
                currentSprite = fallSprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.finkladd2)
            {
                currentSprite = finkladd2Sprite;
            }
            else if (Registry.playersClothes == Registry.WhichClothes.vanliga2)
            {
                currentSprite = vanlig2Sprite;
            }

            //scaleToPosition(clientBounds);
            //Är inventoryn öppen ska spelaren inte röra på sig
            if (Registry.changingRoom)
            {
                position = Registry.nextRoomDoorPosition;
                target   = position;
            }
            if (!inventory.InventoryInUse || Registry.changingRoom)
            {
                //Rör spelaren på sig?
                isMoving = true;
                //styrning av spelare
                mouseState = Mouse.GetState();

                //mousePosition = mouseState/3 för att mouseState inte har något med upplösningen (som tredubblas) att göra
                mousePosition.X = (mouseState.X / 3);
                mousePosition.Y = (mouseState.Y / 3);
                if (Mousecontrol.clicked())
                {
                    target.X = mousePosition.X - 15;
                    target.Y = mousePosition.Y - 67;
                }
                if (Registry.pause)
                {
                    target = position;
                }
                direction = target - position;
                direction.Normalize();
                if (position.X != target.X && position.Y != target.Y)
                {
                    position.X += direction.X * speed;
                    position.Y += direction.Y * speed;
                }
                if (position.X < target.X + 1 && position.X > target.X - 1 && position.Y < target.Y + 1 && position.Y > target.Y - 1)
                {
                    speed = 0;
                    //Spelaren rör inte på sig
                    isMoving = false;
                }
                else
                {
                    speed = 1.5f;
                }

                oldState = mouseState;
            }
            //Rör spelaren på sig ska den animeras som vanilgt
            if (isMoving)
            {
                //Skillnad i X-led och skillnad i Y-led
                if (position.Y <= target.Y)
                {
                    deltaY = target.Y - position.Y;
                }
                else
                {
                    deltaY = position.Y - target.Y;
                }

                if (position.X < target.X)
                {
                    deltaX = target.X - position.X;
                }
                else
                {
                    deltaX = position.X - target.X;
                }

                //Bestämmning av vilken animation som ska användas av spelaren
                //Är man påväg åt höger, vänster, up eller ner?
                //Går man mest vertikalt eller horisontellt?
                if (position.X <= target.X && deltaX > deltaY)
                {
                    flip              = true;
                    yBounds           = 0;
                    rightCurrentFrame = new Point(0, 1);
                    downCurrentFrame  = new Point(0, 2);
                    upCurrentFrame    = new Point(0, 3);
                }
                else if (position.X >= target.X && deltaX > deltaY)
                {
                    flip              = false;
                    yBounds           = 0;
                    rightCurrentFrame = new Point(0, 1);
                    downCurrentFrame  = new Point(0, 2);
                    upCurrentFrame    = new Point(0, 3);
                }
                else if (position.Y >= target.Y && deltaX < deltaY)
                {
                    yBounds           = 2;
                    leftCurrentFrame  = new Point(0, 0);
                    downCurrentFrame  = new Point(0, 2);
                    rightCurrentFrame = new Point(0, 1);
                }
                else
                {
                    yBounds           = 1;
                    leftCurrentFrame  = new Point(0, 0);
                    rightCurrentFrame = new Point(0, 1);
                    upCurrentFrame    = new Point(0, 3);
                }
            }
            //Rör spelaren inte på sig så ska han ha en stillastående sprite
            else
            {
                yBounds           = 3;
                leftCurrentFrame  = new Point(0, 0);
                rightCurrentFrame = new Point(0, 1);
                downCurrentFrame  = new Point(0, 2);
                upCurrentFrame    = new Point(0, 3);
            }

            if (inventory.InteractingWithItem && !inventory.InventoryInUse)
            {
                if (Mousecontrol.clicked() && Registry.currentRoom.giveNPCItem(inventory.getItemClickedon))
                {
                    inventory.removeItem(inventory.getItemClickedon);
                }
                else if (Mousecontrol.clicked() && Registry.currentRoom.giveDoorItem(inventory.getItemClickedon))
                {
                    inventory.removeItem(inventory.getItemClickedon);
                }
                else if (Mousecontrol.clicked())
                {
                    addItem(inventory.getItemClickedon);
                }
            }

            inventory.Update();
            currentSprite.Position  = position;
            Registry.playerPosition = position;
            updateLayerDepth();
            if (!inventory.InventoryInUse)
            {
                currentSprite.Update(gameTime, clientBounds, yBounds);
            }
        }
Ejemplo n.º 10
0
        public void Update(GameTime gameTime, Rectangle clientBounds)
        {
            // När man klickar på NPC:n så börjar dialogen
            if (Mousecontrol.clickedOnItem(position, new Point(stillTexture.Width / 3, stillTexture.Height), Mousecontrol.clicked()) && !isTalking && !Registry.inventoryInUse)
            {
                Talk();
            }

            // -- Händelser baserade på dialoger -- //

            if (activeDialog.getActiveLine() == "give")                 // NPC:n ger bort sin item
            {
                giveItem = true;
                dialogNumber++;
            }

            if (activeDialog.getActiveLine() == "0" || Keyboard.GetState().IsKeyDown(Keys.S))                    // Avslutar dialogen
            {
                isTalking = false;
            }

            activeDialog.checkLines();

            // Spriteändringar beroende på om NPC:N pratar
            if (activeDialog.getSpeaker() == "NPC")
            {
                activeSprite = talkSprite;
            }
            else
            {
                activeSprite = stillSprite;
            }

            if (!isTalking)
            {
                activeSprite = stillSprite;
            }

            if (position.Y != 0)
            {
                layerPosition = (1 - (position.Y + activeSprite.Texture.Height) / 180) / 3; //3-D EFFEKTER!!!! NPC:n hamnar bakom och framför saker beroende på vart den står
            }
            else
            {
                layerPosition = 0.2f;
            }

            activeSprite.Update(gameTime, clientBounds);

            // Följ efterspelaren
            if (lookatplayer)
            {
                if (position.X < Registry.playerPosition.X)
                {
                    flip = false;
                }
                else
                {
                    flip = true;
                }
            }
        }