//Fully optimized - No bugs! =)
//Creation/Delete function working
//obj_farmland_placement is the placeholder
//obj_farmland is the actual object to create
if (count < 0) //just in case
{
count = 0;
}
if (count > 1)
{
count = 1;
}
clickedXX = mouse_x;
clickedYY = mouse_y;
var spritex;
var spritey;
//mb_left create grid
if (mouse_check_button_pressed(mb_left)) //mb_left initial click
{
if (count == 0)
{
clickedY = mouse_y;
clickedX = mouse_x;
count += 1; //increment count by 1 (count could also equal 1)
if !layer_exists("Preview")
{
layer_create(49900,"Preview");
}
}
}
if (mouse_check_button(mb_left) && count == 1) //mb_left held down and count equals 1
{
canBuildFarm = true;
}
if (canBuildFarm == true)
{
if layer_exists("Preview") //continue to delete/create Preview layer (to update visual)
{
layer_destroy("Preview");
}
if !layer_exists("Preview")
{
layer_create(49900,"Preview");
}
var rows = (clickedYY - clickedY) div 32; //get y cell
var cols = (clickedXX - clickedX) div 32; //get x cell
var flagr = 0;
var flagc = 0;
if (rows < 0)
{
flagr = 1;
}
if (cols < 0)
{
flagc = 1;
}
rows = abs(rows); //rows/cols must be absolute values
cols = abs(cols);
var i;
for (i = 0; i <= rows; i++) //for loop to initialize rows
{
if (i > 16) //16 rows is the limit (can be changed)
{
break; //stop the for loop if above 16
}
spritey = 0;
if (flagr == 0)
{
spritey = (round(clickedY div 32)+i)*32; //create +y
}
if (flagr == 1)
{
spritey = (round(clickedY div 32)-i)*32; //create -y
}
var j;
for (j = 0; j <= cols; j++) //for loop to initialize columns
{
if (j > 16)// 16 columns is the limit
{
break;
}
spritex = 0;
if (flagc == 0)
{
spritex = (round(clickedX div 32)+j)*32; //create +x
}
if (flagc == 1)
{
spritex = (round(clickedX div 32)-j)*32; //create -x
}
if !position_meeting(spritex,spritey,obj_farmland_placement) //if the position is free
{
instance_create_layer(spritex,spritey,"Preview",obj_farmland_placement); //create the "Preview" layer objects
}
if (mouse_check_button_released(mb_left)) //mb_left released
{
if !position_meeting(spritex,spritey,obj_farmland) //once mb_left is released, if the position is free
{
instance_create_layer(spritex,spritey,"Construct",obj_farmland); //create the permanent "Construct" layer with new object
//the "Preview" layer object will be deleted the next time the mb_left is pressed
}
}
}
}
}
if (canBuildFarm == false && canDeleteFarm == false) //set placeholder to follow mouse when not clicking + dragging
{
x = mouse_x-16; //follow the mouse and set x and y to -16 since the origin is at the top left to center on mouse pos
y = mouse_y-16;
move_snap(32,32); //snap to 32,32 grid
if (layer_exists("Preview"))
{
layer_destroy("Preview"); //delete the Preview layer to refresh visual
}
}
//mb_right delete grid function
if (mouse_check_button_pressed(mb_right)) //mb_right initial click
{
if (count == 0)
{
clickedY = mouse_y;
clickedX = mouse_x;
count += 1;
if !layer_exists("Preview")
{
layer_create(49900,"Preview"); //delete the Preview layer to refresh visual
}
}
}
if (mouse_check_button(mb_right) && count == 1) //mb_right held down
{
canDeleteFarm = true;
}
if (canDeleteFarm == true)
{
if layer_exists("Preview")
{
layer_destroy("Preview");
}
if !layer_exists("Preview")
{
layer_create(49900,"Preview");
}
var rows = (clickedYY - clickedY) div 32;
var cols = (clickedXX - clickedX) div 32;
var flagr = 0;
var flagc = 0;
if (rows < 0)
{
flagr = 1;
}
if (cols < 0)
{
flagc = 1;
}
rows = abs(rows);
cols = abs(cols);
var i;
for (i = 0; i <= rows; i++)
{
if (i > 16)
{
break;
}
spritey = 0;
if (flagr == 0)
{
spritey = (floor(clickedY div 32)+i)*32;
}
if (flagr == 1)
{
spritey = (floor(clickedY div 32)-i)*32;
}
var j;
for (j = 0; j <= cols; j++)
{
if (j > 16)
{
break;
}
spritex = 0;
if (flagc == 0)
{
spritex = (floor(clickedX div 32)+j)*32;
}
if (flagc == 1)
{
spritex = (floor(clickedX div 32)-j)*32;
}
if !position_meeting(spritex,spritey,obj_farmland_placement)
{
instance_create_layer(spritex,spritey,"Preview",obj_farmland_placement);
}
if (mouse_check_button_released(mb_right))
{
if instance_exists(obj_farmland) //check if obj_farmland exists before deleting anything
{
with (obj_farmland) //send information to obj_farmland
{
if position_meeting(x,y,obj_farmland_placement) //if obj_farmland has the same position has obj_farmland_placement
{
instance_destroy(); //destroy obj_farmland
}
}
}
}
}
}
}
if (mouse_check_button_released(mb_right)) //if mb_right/left is released, set boolean conditions to false and execute false boolean functions
{
canDeleteFarm = false;
count = 0; //set count back to 0 to reset
}
if (mouse_check_button_released(mb_left))
{
canBuildFarm = false;
count = 0;
}