Pārlūkot izejas kodu

Enmy lifebars and state machines upgrade

volt 1 gadu atpakaļ
vecāks
revīzija
5115b95e19

+ 17 - 7
objects/obj_card/Create_0.gml

@@ -1,13 +1,22 @@
 /// @description init
 
-colselec1 = $FF9944
-colselec2 = $FF3310
-colunselec1 = $4488FF
-colunselec2 = $2244FF
+enum CARDSTATE
+{
+    INIT,
+	WAIT,
+    ACTIVATED,
+    TEST
+}
+
+state = STATE.INIT;
+
+colselec1 = $FF9944; // Orange
+colselec2 = $FF3310; // Red
+colunselec1 = $4488FF; // Pale blue
+colunselec2 = $2244FF; // Blue
 
 width = 140;
 width_mid = width/2;
-
 height = 200;
 
 selected = false;
@@ -15,5 +24,6 @@ selected = false;
 name = "noname";
 desc = "none";
 
-dmg_min = 1
-dmg_max = 3
+dmg_min = 1;
+dmg_max = 3;
+dmg = 0;

+ 1 - 1
objects/obj_card/Draw_64.gml

@@ -1,4 +1,4 @@
-/// @description Draw UI Card
+/// @description UI
 
 
 draw_set_alpha(0.4)

+ 23 - 0
objects/obj_card/Step_0.gml

@@ -0,0 +1,23 @@
+/// @description step
+
+switch(state)
+{
+    case CARDSTATE.INIT:
+		// init things
+        state = CARDSTATE.WAIT;
+    break;
+	
+	case CARDSTATE.WAIT:
+		// waiting
+	break;
+	
+	case CARDSTATE.ACTIVATED:
+		dmg = irandom_range(dmg_min, dmg_max);
+		
+		state = CARDSTATE.WAIT;
+	break;
+	
+	default:
+		//
+	break;
+}

+ 1 - 0
objects/obj_card/obj_card.yy

@@ -4,6 +4,7 @@
   "eventList":[
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
   ],
   "managed":true,
   "name":"obj_card",

+ 13 - 2
objects/obj_enemy/Create_0.gml

@@ -1,11 +1,22 @@
 /// @description init
 
+state = 0
+
 // Set Position x and y
 x = get_win_midx(sprite_width)
 y = 200
 
 // Stats
-hp = 10
+lifemax = 10
+life = 10
+
 atk_min = 0
 atk_max = 2
-def = 0
+def = 0
+
+// Bars Position
+_bar_x = x
+_bar_y = y
+_bar_w = 100
+_bar_h = 20
+_bar_inset = 3

+ 8 - 0
objects/obj_enemy/Draw_64.gml

@@ -0,0 +1,8 @@
+/// @description UI
+
+draw_set_alpha(1);
+draw_set_color(c_white);
+draw_rect(_bar_x, _bar_y, _bar_w, _bar_h, true);
+draw_set_color(c_lime);
+var _lifebar = progressbar(life, lifemax, _bar_w);
+draw_rect_inset(_bar_x, _bar_y, _lifebar, _bar_h, _bar_inset);

+ 21 - 0
objects/obj_enemy/Step_0.gml

@@ -1,2 +1,23 @@
 /// @description go on
 
+switch (state)
+{
+	// Init lifebar position at instance creation
+    case 0:
+        _bar_x = center_2width(x, sprite_width, _bar_w);
+		_bar_y = y - 40;
+		state = 1;
+    break;
+
+    case 1:
+        //
+    break;
+
+    case 2:
+        //
+    break;
+
+    default:
+        //
+    break;
+}

+ 1 - 0
objects/obj_enemy/obj_enemy.yy

@@ -4,6 +4,7 @@
   "eventList":[
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
     {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
+    {"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
   ],
   "managed":true,
   "name":"obj_enemy",

+ 14 - 2
objects/obj_fight_scn/Create_0.gml

@@ -1,5 +1,17 @@
 /// @description init menu
 
+enum STATE
+{
+    INIT,
+	SELECT,
+	ACTIVATE,
+	WAIT,
+	ATTACK,
+    TEST
+}
+
+state = STATE.INIT;
+
 win_width = window_get_width();
 win_height = window_get_height();
 
@@ -31,9 +43,9 @@ mobs_nb = irandom_range(1, 4);
 
 for (mob_i=0; mob_i<mobs_nb; mob_i++;)
 {
-	mob_inst = instance_create_depth(0, 0, -500, obj_enemy);
+	var _mob_inst = instance_create_depth(0, 0, -500, obj_enemy)
 	
-	with(mob_inst)
+	with(_mob_inst)
 	{
 		// centering the mobs onscreen
 		var _all_mobs_width = sprite_width * other.mobs_nb + 20;

+ 54 - 23
objects/obj_fight_scn/Step_0.gml

@@ -1,31 +1,62 @@
 /// @description step
 
 
-// CARD SELECTION =================================
-// ================================================
-if (keyboard_check_pressed(vk_left))
+switch (state)
 {
-	card_change = -1;
-}
-
-if (keyboard_check_pressed(vk_right))
-{
-	card_change = 1;
-}
-
-if (card_change != 0)
-{
-	card_hand[card_selected].selected = false;
+	// Init
+    case STATE.INIT:
+		// Init things
+        state = STATE.WAIT;
+    break;
 	
-	card_selected = array_loop(card_hand, card_selected, card_change);
-	card_hand[card_selected].selected = true;
+	case STATE.WAIT:
+		state = STATE.SELECT;
+	break;
 	
-	card_change = 0;
-}
+	case STATE.SELECT:
+		if (keyboard_check_pressed(vk_left))
+		{
+			card_change = -1;
+		}
+		
+		if (keyboard_check_pressed(vk_right))
+		{
+			card_change = 1;
+		}
+		
+		if (card_change != 0)
+		{
+			// Find, unselect the current card then select the new one
+			var _selcard = get_selec_card(card_hand);
+			card_hand[_selcard].selected = false;
+			
+			_selcard = array_loop(card_hand, _selcard, card_change);
+			card_hand[_selcard].selected = true;
+			
+			card_change = 0;
+		}
+		
+		if (keyboard_check_pressed(vk_space))
+		{
+			state = STATE.ACTIVATE;
+		}
+	break;
 
-// CARD ACTIVATION ================================
-// ================================================
-if (keyboard_check_pressed(vk_space))
-{
-	
+    case STATE.ACTIVATE:
+		for(i=0; i<=array_length(card_hand); i+=1;)
+		{
+			if (card_hand[i].selected == true)
+			{
+				card_hand[i].state = CARDSTATE.ACTIVATED;
+			}
+		}
+    break;
+
+    case 2:
+        //
+    break;
+
+    default:
+        //
+    break;
 }

+ 11 - 0
scripts/scr_positions/scr_positions.gml

@@ -6,4 +6,15 @@
 /// @description					Return window middle or how much back to put it with the object width
 function get_win_midx(_spr_width = 0){
 	return ((window_get_width()/2) - (_spr_width/2));
+}
+
+
+// @function						center_2width();
+/// @param {real}	_x1				x pos of largest width
+/// @param {real}	_large_w		Width of largest
+/// @param {real}	_small_w		Width of smallest
+/// @description					Return how much to push smallest width to center to the largest
+function center_2width(_x1, _large_w, _small_w){
+	var _diff = _large_w - _small_w
+	return _x1 + (_diff / 2)
 }

+ 24 - 3
scripts/scr_toolset/scr_toolset.gml

@@ -3,9 +3,9 @@
 
 // @function							array_loop();
 /// @param {Array}		_arr			The array to move into
-/// @param {real}		_curr			The current variable
-/// @param {real}		_add			Moving how many
-/// @description						Move and loop into the different variables of an array
+/// @param {real}		_curr			Where to start from
+/// @param {real}		_add			Moving in the table by how many (pos. or neg.)
+/// @description						Return the new integer table position
 function array_loop(_arr, _curr, _add){
 	_curr += _add
 	
@@ -22,6 +22,27 @@ function array_loop(_arr, _curr, _add){
 	return _curr
 }
 
+// @function							get_selec_card();
+/// @param {Array}		_hand			The array to search for
+/// @description						Return the array position of the selected card
+function get_selec_card(_hand){
+	for(i=0; i<=array_length(_hand); i+=1;)
+	{
+		if (variable_instance_exists(_hand[i], "selected"))
+		{
+			if (_hand[i].selected == true)
+			{
+				return i
+			}
+			
+		}	
+		else
+		{
+			return -1
+		}
+	}
+}
+
 
 // @function							progressbar();
 /// @param {real}		_curr			Current value