C
Cheinberger
Guest
Hello all!
I watched Beyond Us Games' tutorial on an inventory system (
) and tried to implement GUI to it, so that it follows the camera and player. For the most part, it works; however, when I press "I" to open the inventory, it creates the object, but duplicates the sprite, to where when I move around the room, one oInventory follows me like I want, but a duplicate sprite is left behind and staying still in the position it was created. The same problem happens with the oButton I created, but instead of the object following the camera, only the sprite follows the camera, while the pressable button with coding is left behind at the position it was created. I have a lot of code here, so please bear with me.
--------------oInventory
///Create Event
globalvar playerInventory, playerInventoryWidth;
playerInventoryWidth = 5;
playerInventory = ds_grid_create(playerInventoryWidth, 1);
///Draw GUI
if keyboard_check_pressed(ord("I"))
{
if(!instance_exists(oInventoryGUI)) {
inventoryDisplay = instance_create_depth(GetViewX(), GetViewY(), depth - 1, oInventoryGUI);
with(inventoryDisplay) {
x = GetViewX();
y = GetViewY();
}
}
else {
instance_destroy(oInventoryGUI);
repeat(2)
instance_destroy(oButton);
}
}
---------------oInventoryGUI
///Create Event
textBorder = 15;
myItems = playerInventory;
myColor = c_black;
isEmpty = false;
emptyMessage = "Empty";
globalvar itemSelected, scrolledAmount, inventoryEndAt;
itemSelected = 0;
scrolledAmount = 0;
inventoryEndAt = min(ds_grid_height(myItems), floor((sprite_height - (textBorder * 3)) / 32));
inventoryOnScreen = 0;
if(ds_grid_get(myItems, 0, 0) == 0) {
inventoryEndAt = 0;
isEmpty = true;
}
alarm[0] = 1;
///Draw GUI
draw_self();
draw_set_colour(myColor);
draw_set_font(fontInventory);
draw_text(bbox_left + textBorder, bbox_top + textBorder, "Image");
draw_text(bbox_left + 82, bbox_top + textBorder, "Name");
draw_text(bbox_left + 204, bbox_top + textBorder, "Amount");
itemLeftStart = bbox_left + 84;
itemTopStart = bbox_top + 48;
for(i = 0; i < inventoryEndAt; ++i) {
for(j = 0; j < playerInventoryWidth; ++j) {
inventoryOnScreen = i;
if(j == 0)
draw_text(itemLeftStart, itemTopStart + (i * 18), ds_grid_get(myItems, 0, i + scrolledAmount));
if(j == 1)
draw_text(itemLeftStart + 140, itemTopStart + (i * 18), ds_grid_get(myItems, 1, i + scrolledAmount))
if(j == 3)
draw_sprite(ds_grid_get(myItems, j, i + scrolledAmount), 0, bbox_left + 25, itemTopStart + (i * 18) + 6);
}
}
if(!isEmpty)
draw_rectangle(bbox_left + textBorder, itemTopStart + ((itemSelected - scrolledAmount) * 18) - 4, bbox_right - textBorder, itemTopStart + ((itemSelected - scrolledAmount) * 18) + 14, true);
draw_sprite(sItemBox, 0, GetViewX(), GetViewY());
if(isEmpty)
draw_text_ext(GetViewX() + 80, GetViewY() + 160, emptyMessage, 32, sprite_get_width(sItemBox) - textBorder);
else
draw_text_ext(GetViewX() + 80, GetViewY() + 160, ds_grid_get(myItems, 2, itemSelected), 20, sprite_get_width(sItemBox) - textBorder);
if(ds_grid_height(myItems) > floor((sprite_height - (textBorder * 3)) / 32)) {
draw_sprite(sScrollBar, 0, bbox_right - 10, bbox_top + 50 + itemSelected * (sprite_height - 89) / ds_grid_height(myItems));
}
///Alarm 0
useButton = instance_create_depth(GetViewX(), GetViewY(), depth - 1, oButton);
useButton.myText = "Use";
trashButton = instance_create_depth(GetViewX() + 45, GetViewY(), depth - 1, oButton);
trashButton.myText = "Destroy"
///Step Event
if(ds_grid_get(myItems, 0, 0) != 0) {
isEmpty = false;
inventoryEndAt = ds_grid_height(myItems);
if(ds_grid_height(myItems) >= floor((sprite_height - (textBorder * 3)) / 32))
inventoryEndAt = floor((sprite_height - (textBorder * 3)) / 32);
}
if(ds_grid_get(myItems, 0, 0) == 0) {
isEmpty = true;
inventoryEndAt = 0;
}
-----------------oButton
///Create Event
image_speed = 0;
myText = undefined;
///Draw GUI
draw_self();
draw_text(x + 213, y + 227, myText);
----------Scripts for GUI following player
///GetViewX
return camera_get_view_x(camera_get_active());
///GetViewY
return camera_get_view_y(camera_get_active());
I watched Beyond Us Games' tutorial on an inventory system (
--------------oInventory
///Create Event
globalvar playerInventory, playerInventoryWidth;
playerInventoryWidth = 5;
playerInventory = ds_grid_create(playerInventoryWidth, 1);
///Draw GUI
if keyboard_check_pressed(ord("I"))
{
if(!instance_exists(oInventoryGUI)) {
inventoryDisplay = instance_create_depth(GetViewX(), GetViewY(), depth - 1, oInventoryGUI);
with(inventoryDisplay) {
x = GetViewX();
y = GetViewY();
}
}
else {
instance_destroy(oInventoryGUI);
repeat(2)
instance_destroy(oButton);
}
}
---------------oInventoryGUI
///Create Event
textBorder = 15;
myItems = playerInventory;
myColor = c_black;
isEmpty = false;
emptyMessage = "Empty";
globalvar itemSelected, scrolledAmount, inventoryEndAt;
itemSelected = 0;
scrolledAmount = 0;
inventoryEndAt = min(ds_grid_height(myItems), floor((sprite_height - (textBorder * 3)) / 32));
inventoryOnScreen = 0;
if(ds_grid_get(myItems, 0, 0) == 0) {
inventoryEndAt = 0;
isEmpty = true;
}
alarm[0] = 1;
///Draw GUI
draw_self();
draw_set_colour(myColor);
draw_set_font(fontInventory);
draw_text(bbox_left + textBorder, bbox_top + textBorder, "Image");
draw_text(bbox_left + 82, bbox_top + textBorder, "Name");
draw_text(bbox_left + 204, bbox_top + textBorder, "Amount");
itemLeftStart = bbox_left + 84;
itemTopStart = bbox_top + 48;
for(i = 0; i < inventoryEndAt; ++i) {
for(j = 0; j < playerInventoryWidth; ++j) {
inventoryOnScreen = i;
if(j == 0)
draw_text(itemLeftStart, itemTopStart + (i * 18), ds_grid_get(myItems, 0, i + scrolledAmount));
if(j == 1)
draw_text(itemLeftStart + 140, itemTopStart + (i * 18), ds_grid_get(myItems, 1, i + scrolledAmount))
if(j == 3)
draw_sprite(ds_grid_get(myItems, j, i + scrolledAmount), 0, bbox_left + 25, itemTopStart + (i * 18) + 6);
}
}
if(!isEmpty)
draw_rectangle(bbox_left + textBorder, itemTopStart + ((itemSelected - scrolledAmount) * 18) - 4, bbox_right - textBorder, itemTopStart + ((itemSelected - scrolledAmount) * 18) + 14, true);
draw_sprite(sItemBox, 0, GetViewX(), GetViewY());
if(isEmpty)
draw_text_ext(GetViewX() + 80, GetViewY() + 160, emptyMessage, 32, sprite_get_width(sItemBox) - textBorder);
else
draw_text_ext(GetViewX() + 80, GetViewY() + 160, ds_grid_get(myItems, 2, itemSelected), 20, sprite_get_width(sItemBox) - textBorder);
if(ds_grid_height(myItems) > floor((sprite_height - (textBorder * 3)) / 32)) {
draw_sprite(sScrollBar, 0, bbox_right - 10, bbox_top + 50 + itemSelected * (sprite_height - 89) / ds_grid_height(myItems));
}
///Alarm 0
useButton = instance_create_depth(GetViewX(), GetViewY(), depth - 1, oButton);
useButton.myText = "Use";
trashButton = instance_create_depth(GetViewX() + 45, GetViewY(), depth - 1, oButton);
trashButton.myText = "Destroy"
///Step Event
if(ds_grid_get(myItems, 0, 0) != 0) {
isEmpty = false;
inventoryEndAt = ds_grid_height(myItems);
if(ds_grid_height(myItems) >= floor((sprite_height - (textBorder * 3)) / 32))
inventoryEndAt = floor((sprite_height - (textBorder * 3)) / 32);
}
if(ds_grid_get(myItems, 0, 0) == 0) {
isEmpty = true;
inventoryEndAt = 0;
}
-----------------oButton
///Create Event
image_speed = 0;
myText = undefined;
///Draw GUI
draw_self();
draw_text(x + 213, y + 227, myText);
----------Scripts for GUI following player
///GetViewX
return camera_get_view_x(camera_get_active());
///GetViewY
return camera_get_view_y(camera_get_active());