From f8f5f7952a864802a35fdb401531d67b1e7fef2c Mon Sep 17 00:00:00 2001
From: rick <rick@gnous.eu>
Date: Sun, 6 Dec 2020 12:38:35 +0100
Subject: [PATCH] Ajout recul sur monstre lors attaque joueur

---
 objects/oMonster/Create_0.gml      |  1 +
 objects/oMonster/Step_0.gml        | 76 ++++++++++++++++--------------
 objects/oMonsterMelee/Create_0.gml |  1 +
 objects/oPlayer/Create_0.gml       |  4 +-
 objects/oPlayer/KeyPress_74.gml    | 54 ++++++++++++++-------
 scripts/Script1/Script1.gml        |  2 +-
 6 files changed, 83 insertions(+), 55 deletions(-)

diff --git a/objects/oMonster/Create_0.gml b/objects/oMonster/Create_0.gml
index 16ccb34..4e3204d 100644
--- a/objects/oMonster/Create_0.gml
+++ b/objects/oMonster/Create_0.gml
@@ -8,6 +8,7 @@ dir = 3;
 pv = 5;
 
 attack = 1;
+touche = 0; // s'ils sont touchés
 
 enum typeMelee {
 	squelette,
diff --git a/objects/oMonster/Step_0.gml b/objects/oMonster/Step_0.gml
index b559fff..aefbbc6 100644
--- a/objects/oMonster/Step_0.gml
+++ b/objects/oMonster/Step_0.gml
@@ -1,36 +1,40 @@
-// deplacement monstre
-
-if dureeDeplacement != 0 {
-	x += deplaceHorizontal;
-	y += deplaceVertical;
-	dureeDeplacement --;
-}
-else {
-	deplaceHorizontal = 0;
-	deplaceVertical = 0;
-	dir = irandom(3);
-switch(dir) {
-	case 0 : deplaceVertical = 1; break;
-	case 1 : deplaceHorizontal = 1; break;
-	case 2 : deplaceVertical = -1; break;
-	case 3 : deplaceHorizontal = -1; break;
- }		
-	
-	dureeDeplacement = 120;
-}
-
-// collision avec un mur
-
-if place_meeting(x,y,oWall) {
-	if (dir > 1) dir -= 2;
-	else dir += 2;	
-	
-	switch(dir) {
-	case 0 : deplaceVertical = 1; break;
-	case 1 : deplaceHorizontal = 1; break;
-	case 2 : deplaceVertical = -1; break;
-	case 3 : deplaceHorizontal = -1; break;
-	}		
-	
-	dureeDeplacement = 120;
-}	
\ No newline at end of file
+// deplacement monstre
+
+if (touche == 0) {
+	if dureeDeplacement != 0 {
+		x += deplaceHorizontal;
+		y += deplaceVertical;
+		dureeDeplacement --;
+	}
+	else {
+		deplaceHorizontal = 0;
+		deplaceVertical = 0;
+		dir = irandom(3);
+	switch(dir) {
+		case 0 : deplaceVertical = 1; break;
+		case 1 : deplaceHorizontal = 1; break;
+		case 2 : deplaceVertical = -1; break;
+		case 3 : deplaceHorizontal = -1; break;
+	}		
+	
+		dureeDeplacement = 120;
+	}
+
+	// collision avec un mur
+
+	if place_meeting(x,y,oWall) {
+		if (dir > 1) dir -= 2;
+		else dir += 2;	
+		
+		switch(dir) {
+		case 0 : deplaceVertical = 1; break;
+		case 1 : deplaceHorizontal = 1; break;
+		case 2 : deplaceVertical = -1; break;
+		case 3 : deplaceHorizontal = -1; break;
+		}		
+	
+		dureeDeplacement = 120;
+	}
+} else {
+	touche--;
+}
\ No newline at end of file
diff --git a/objects/oMonsterMelee/Create_0.gml b/objects/oMonsterMelee/Create_0.gml
index f966d8f..7c8a073 100644
--- a/objects/oMonsterMelee/Create_0.gml
+++ b/objects/oMonsterMelee/Create_0.gml
@@ -7,6 +7,7 @@ image_speed = 1;
 switch (monType) {
 	case typeMelee.squelette:
 		attack = 10;
+		pv = 20;
 		sprite_index = sSkeletonR;
 		break;
 	case typeMelee.blob:
diff --git a/objects/oPlayer/Create_0.gml b/objects/oPlayer/Create_0.gml
index f3eec78..1c94493 100644
--- a/objects/oPlayer/Create_0.gml
+++ b/objects/oPlayer/Create_0.gml
@@ -3,4 +3,6 @@ pv = 100;
 inv = 0; //timer invinsiblité
 
 indexImageInfo = 0;
-compteurFrames = 0;
\ No newline at end of file
+compteurFrames = 0;
+
+attack = 10;
\ No newline at end of file
diff --git a/objects/oPlayer/KeyPress_74.gml b/objects/oPlayer/KeyPress_74.gml
index 2094ffa..f77a3e7 100644
--- a/objects/oPlayer/KeyPress_74.gml
+++ b/objects/oPlayer/KeyPress_74.gml
@@ -2,32 +2,52 @@
  
  //jouer l'animation
  
- tailleEpee = 20; // à définir
+ tailleEpee = 30; // à définir
+ checkCote = image_index / 8; // récupère où regarde le personnage
+ inst = noone;
  
- switch (image_index) {
-	 case 0:
-		inst = collision_rectangle(x+5, y+tailleEpee, x-5, y+tailleEpee, oMonster, true, oPlayer);
+if (sprite_index == sPlayerRun) {
+	if (checkCote <= 1) {
+		inst = collision_rectangle(x+5, y+tailleEpee, x-5, y+tailleEpee, oMonster, false, oPlayer);
 		//inst = getCollisionArea(x-5, y+tailleEpee, x+5, y+tailleEpee, oMonster);
-		break;
-	case 1:
-		inst = collision_rectangle(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster, true, oPlayer);
+	} else if (checkCote <= 2) {
+		inst = collision_rectangle(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster, false, oPlayer);
 		//inst = getCollisionArea(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster)
-		break;
-	case 2:
-		inst = collision_rectangle(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster, true, oPlayer);
+	} else if (checkCote <= 3) {
+		inst = collision_rectangle(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster, false, oPlayer);
 		//inst = getCollisionArea(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster)
-		break;
-	case 3:
-		inst = collision_rectangle(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster, true, oPlayer);
+	} else if (checkCote <= 4) {
+		inst = collision_rectangle(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster, false, oPlayer);
 		//inst = getCollisionArea(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster);
-		break;
-	default:
-		inst = noone;
- }
+	}
+} else {
+	switch (image_index) {
+		case 0:
+			inst = collision_rectangle(x+5, y+tailleEpee, x-5, y+tailleEpee, oMonster, false, oPlayer);
+			//inst = getCollisionArea(x-5, y+tailleEpee, x+5, y+tailleEpee, oMonster);
+			break;
+		case 1:
+			inst = collision_rectangle(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster, false, oPlayer);
+			//inst = getCollisionArea(x+tailleEpee, y+5, x+tailleEpee, y-5, oMonster)
+			break;
+		case 2:
+			inst = collision_rectangle(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster, false, oPlayer);
+			//inst = getCollisionArea(x+5, y-tailleEpee, x-5, y-tailleEpee, oMonster)
+			break;
+		case 3:
+			inst = collision_rectangle(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster, false, oPlayer);
+			//inst = getCollisionArea(x-tailleEpee, y+5, x-tailleEpee, y-5, oMonster);
+			break;
+		default:
+			inst = noone;
+	}
+}
  
  if (inst != noone) {
 	show_debug_message("objet trouvé !");
 	// attaque
+	hit(self, inst, attack);
+	inst.touche = 30;
  } else {
 	 //a supp
 	 show_debug_message("pas d'objet...");
diff --git a/scripts/Script1/Script1.gml b/scripts/Script1/Script1.gml
index 8471916..3049958 100644
--- a/scripts/Script1/Script1.gml
+++ b/scripts/Script1/Script1.gml
@@ -7,7 +7,7 @@
 @param {objRepousse} objet qui sera repoussé
 */
 function knockBack(obj, objRepousse) {
-	knockback = 10;
+	knockback = 20;
 	oY = objRepousse.y;
 	oX = objRepousse.x;
 	if (obj.x > oX && !place_meeting(oX-knockback-1, oY, oWall)) {