revert b3eabeff83
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
revert Boucle de jeuajoutsStub
parent
b3eabeff83
commit
6dcb6d334d
@ -0,0 +1,16 @@
|
|||||||
|
package uca.iutinfo.studentbros.model
|
||||||
|
|
||||||
|
interface CollisionManager {
|
||||||
|
fun detectCollision(element: Element, level: Level): Boolean
|
||||||
|
|
||||||
|
fun distanceToCollision(element: Element, level: Level): Pair<Float, Float>
|
||||||
|
|
||||||
|
fun collisionAction(element: Element, elementHitted: Element, collisionSide: Side)
|
||||||
|
|
||||||
|
fun getCollisionSide(element: Element, elementHitted: Element): Side
|
||||||
|
|
||||||
|
fun Element.intersects(element: Element): Boolean = left <= element.right && right >= element.left && top >= element.bottom && bottom <= element.top
|
||||||
|
|
||||||
|
fun Element.intersectsWithVelocity(element: Element): Boolean = left + velX < element.right && right + velX > element.left && top + velY > element.bottom && bottom + velY < element.top
|
||||||
|
fun getCollisionDistances(element: Element, elementHitted: Element, pair: Pair<Float, Float>): Pair<Float, Float>
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package uca.iutinfo.studentbros.model
|
||||||
|
|
||||||
|
class CollisionMouvementManager : MouvementManager {
|
||||||
|
|
||||||
|
val collisionManager: CollisionManager = ConcreteCollisionManager()
|
||||||
|
|
||||||
|
override fun moveAllElements(level: Level) {
|
||||||
|
level.elements.filterNot { it is Player || !it.isVisible }.forEach {
|
||||||
|
val pair = collisionManager.distanceToCollision(it, level)
|
||||||
|
moveElement(it, level, pair.first, pair.second)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun moveElement(element: Element, level: Level, x: Float, y: Float) {
|
||||||
|
element.top += y
|
||||||
|
element.bottom += y
|
||||||
|
element.right += x
|
||||||
|
element.left += x
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun moveElementAccordingToPlayer(level: Level, player: Player, screenCenter: Float) {
|
||||||
|
val pair = collisionManager.distanceToCollision(player, level)
|
||||||
|
if (player.right<screenCenter){
|
||||||
|
var x = pair.first
|
||||||
|
if (player.right + x > screenCenter){
|
||||||
|
x = screenCenter - player.right
|
||||||
|
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ moveElement(it, level, -x, 0F)}
|
||||||
|
}
|
||||||
|
else if (player.left + pair.first < 0){
|
||||||
|
x = -player.left
|
||||||
|
}
|
||||||
|
moveElement(player, level, x, pair.second)
|
||||||
|
}
|
||||||
|
else if (pair.first>0){
|
||||||
|
moveElement(player, level, 0F, pair.second)
|
||||||
|
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ moveElement(it, level, -pair.first, 0F)}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
moveElement(player, level, pair.first, pair.second)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,25 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model
|
|
||||||
|
|
||||||
import android.database.Observable
|
|
||||||
import uca.iutinfo.studentbros.model.gameManagers.CollisionMouvementManager
|
|
||||||
import uca.iutinfo.studentbros.model.gameManagers.GameManager
|
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
class GameLoop(val level: Level, val player: Player) : Observable<GameManager>() {
|
|
||||||
|
|
||||||
var running : Boolean = true
|
|
||||||
|
|
||||||
fun gameThread(){
|
|
||||||
thread(start=true) {
|
|
||||||
while (running){
|
|
||||||
Thread.sleep(30L)
|
|
||||||
registerAll()
|
|
||||||
if (!player.isVisible) running=false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun registerAll(){
|
|
||||||
mObservers.forEach { registerObserver(it) }
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,10 @@
|
|||||||
|
package uca.iutinfo.studentbros.model
|
||||||
|
|
||||||
|
interface MouvementManager {
|
||||||
|
|
||||||
|
fun moveAllElements(level: Level)
|
||||||
|
|
||||||
|
fun moveElement(element: Element, level: Level, x: Float, y: Float)
|
||||||
|
|
||||||
|
fun moveElementAccordingToPlayer(level: Level, player: Player, screenCenter: Float)
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package uca.iutinfo.studentbros.model
|
||||||
|
|
||||||
|
class SimpleMouvementManager : MouvementManager{
|
||||||
|
|
||||||
|
override fun moveAllElements(level: Level) {
|
||||||
|
level.elements.filterNot { it is Player || !it.isVisible }.forEach { moveElement(it, level, it.velX, it.velY) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun moveElement(element: Element, level: Level, x: Float, y: Float) {
|
||||||
|
element.top += y
|
||||||
|
element.bottom += y
|
||||||
|
element.right += x
|
||||||
|
element.left += x
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun moveElementAccordingToPlayer(level: Level, player: Player, screenCenter: Float) {
|
||||||
|
if (player.right<screenCenter){
|
||||||
|
var x = player.velX
|
||||||
|
if (player.right + player.velX > screenCenter){
|
||||||
|
x = screenCenter - player.right
|
||||||
|
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ moveElement(it, level, -x, 0F)}
|
||||||
|
}
|
||||||
|
else if (player.left + player.velX < 0){
|
||||||
|
x = -player.left
|
||||||
|
}
|
||||||
|
moveElement(player, level, x, player.velY)
|
||||||
|
}
|
||||||
|
else if (player.velX>0){
|
||||||
|
moveElement(player, level, 0F, player.velY)
|
||||||
|
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ moveElement(it, level, -player.velX, 0F)}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
moveElement(player, level, player.velX, player.velY)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,21 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Element
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
import uca.iutinfo.studentbros.model.Side
|
|
||||||
|
|
||||||
interface CollisionManager {
|
|
||||||
fun detectCollision(element: Element, level: Level, x:Float, y: Float): Boolean
|
|
||||||
|
|
||||||
fun distanceToCollision(element: Element, level: Level, x:Float, y: Float): Pair<Float, Float>
|
|
||||||
|
|
||||||
fun collisionAction(element: Element, elementHitted: Element, collisionSide: Side)
|
|
||||||
|
|
||||||
fun getCollisionSide(element: Element, elementHitted: Element): Side
|
|
||||||
|
|
||||||
fun Element.intersects(element: Element): Boolean = left <= element.right && right >= element.left && top >= element.bottom && bottom <= element.top
|
|
||||||
fun Element.intersectsWithVelocity(element: Element, x: Float, y: Float): Boolean = left + x < element.right && right + x > element.left && top + y > element.bottom && bottom + y < element.top
|
|
||||||
fun getCollisionDistances(element: Element, elementHitted: Element, pair: Pair<Float, Float>): Pair<Float, Float>
|
|
||||||
|
|
||||||
fun touchingGrass(element: Element, level: Level): Boolean
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.*
|
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
class CollisionMouvementManager(val screenCenter: Float) : MouvementManager {
|
|
||||||
|
|
||||||
private val collisionManager: CollisionManager = ConcreteCollisionManager()
|
|
||||||
|
|
||||||
override fun moveAllElements(level: Level) {
|
|
||||||
level.elements.filterNot { it is Player || !it.isVisible }.forEach { move(it, level, it.velX, it.velY) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(element: Element, level: Level, x: Float, y: Float): Boolean {
|
|
||||||
val pair = collisionManager.distanceToCollision(element, level, x, y)
|
|
||||||
element.top += pair.second
|
|
||||||
element.bottom += pair.second
|
|
||||||
element.right += pair.first
|
|
||||||
element.left += pair.first
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(player: Player, level: Level, x: Float, y: Float): Boolean {
|
|
||||||
val pair = collisionManager.distanceToCollision(player, level, x, y)
|
|
||||||
if (player.right<screenCenter){
|
|
||||||
var x = pair.first
|
|
||||||
if (player.right + pair.first > screenCenter){
|
|
||||||
x = screenCenter - player.right
|
|
||||||
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ move(it, level, -x, 0F)}
|
|
||||||
}
|
|
||||||
else if (player.left + pair.first < 0){
|
|
||||||
x = -player.left
|
|
||||||
}
|
|
||||||
player.top += pair.second
|
|
||||||
player.bottom += pair.second
|
|
||||||
player.right += pair.first
|
|
||||||
player.left += pair.first
|
|
||||||
}
|
|
||||||
else if (player.velX>0){
|
|
||||||
player.top += pair.second
|
|
||||||
player.bottom += pair.second
|
|
||||||
player.right += pair.first
|
|
||||||
player.left += pair.first
|
|
||||||
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ move(it, level, -pair.first, 0F)}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
player.top += pair.second
|
|
||||||
player.bottom += pair.second
|
|
||||||
player.right += pair.first
|
|
||||||
player.left += pair.first
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun movePlayer(player: Player, level: Level, side: Side) {
|
|
||||||
when(side){
|
|
||||||
Side.LEFT -> move(player, level, -40F, 0F)
|
|
||||||
Side.RIGHT -> move(player, level, 40F, 0F)
|
|
||||||
Side.UP -> move(player, level, 0F, 40F)
|
|
||||||
Side.DOWN -> move(player, level, 0F, -40F)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Element
|
|
||||||
import uca.iutinfo.studentbros.model.GameLoop
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
class ConcreteGravityManager(val collisionManager: CollisionManager, ) : GravityManager {
|
|
||||||
|
|
||||||
override fun gravityFalls(level: Level) {
|
|
||||||
|
|
||||||
val t = Thread()
|
|
||||||
t.suspend()
|
|
||||||
level.elements.forEach {
|
|
||||||
if (!collisionManager.touchingGrass(it, level)){
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun jumpingBoy(element: Element, level: Level, x: Float, y: Float) {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onChanged(t: GameLoop?) {
|
|
||||||
t?.level?.let { gravityFalls(it) }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import androidx.lifecycle.Observer
|
|
||||||
import uca.iutinfo.studentbros.model.GameLoop
|
|
||||||
|
|
||||||
interface GameManager : Observer<GameLoop>{
|
|
||||||
|
|
||||||
override fun onChanged(t: GameLoop?)
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Element
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
|
|
||||||
interface GravityManager : GameManager {
|
|
||||||
|
|
||||||
fun gravityFalls(level: Level)
|
|
||||||
|
|
||||||
fun jumpingBoy(element: Element, level: Level, x: Float, y: Float)
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Element
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
import uca.iutinfo.studentbros.model.Player
|
|
||||||
import uca.iutinfo.studentbros.model.Side
|
|
||||||
import uca.iutinfo.studentbros.model.mouvementManagers.ConcreteInertieManager
|
|
||||||
|
|
||||||
class InertieMouvementManager(val screenCenter: Float) : MouvementManager {
|
|
||||||
|
|
||||||
val inertieManager = ConcreteInertieManager(this)
|
|
||||||
|
|
||||||
override fun moveAllElements(level: Level) {
|
|
||||||
level.elements.forEach {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(element: Element, level: Level, x: Float, y: Float): Boolean {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(player: Player, level: Level, x: Float, y: Float): Boolean {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun movePlayer(player: Player, level: Level, side: Side) {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Element
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
import uca.iutinfo.studentbros.model.Player
|
|
||||||
import uca.iutinfo.studentbros.model.Side
|
|
||||||
|
|
||||||
interface MouvementManager {
|
|
||||||
|
|
||||||
fun moveAllElements(level: Level)
|
|
||||||
|
|
||||||
fun move(element: Element, level: Level, x: Float, y: Float): Boolean
|
|
||||||
|
|
||||||
fun move(player: Player, level: Level, x: Float, y: Float): Boolean
|
|
||||||
|
|
||||||
fun movePlayer(player: Player, level: Level, side: Side)
|
|
||||||
}
|
|
@ -1,60 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.gameManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.*
|
|
||||||
|
|
||||||
class SimpleMouvementManager(val screenCenter: Float) : MouvementManager {
|
|
||||||
|
|
||||||
override fun moveAllElements(level: Level) {
|
|
||||||
level.elements.filterNot { it is Player || !it.isVisible }.forEach { move(it, level, it.velX, it.velY) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(element: Element, level: Level, x: Float, y: Float): Boolean {
|
|
||||||
element.top += y
|
|
||||||
element.bottom += y
|
|
||||||
element.right += x
|
|
||||||
element.left += x
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(player: Player, level: Level, x: Float, y: Float): Boolean {
|
|
||||||
if (player.right<screenCenter){
|
|
||||||
var x = player.velX
|
|
||||||
if (player.right + player.velX > screenCenter){
|
|
||||||
x = screenCenter - player.right
|
|
||||||
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ move(it, level, -x, 0F)}
|
|
||||||
}
|
|
||||||
else if (player.left + player.velX < 0){
|
|
||||||
x = -player.left
|
|
||||||
}
|
|
||||||
player.top += y
|
|
||||||
player.bottom += y
|
|
||||||
player.right += x
|
|
||||||
player.left += x
|
|
||||||
}
|
|
||||||
else if (player.velX>0){
|
|
||||||
player.top += y
|
|
||||||
player.bottom += y
|
|
||||||
player.right += x
|
|
||||||
player.left += x
|
|
||||||
level.elements.filterNot { it is Player || !it.isVisible }.forEach{ move(it, level, -player.velX, 0F)}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
player.top += y
|
|
||||||
player.bottom += y
|
|
||||||
player.right += x
|
|
||||||
player.left += x
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun movePlayer(player: Player, level: Level, side: Side) {
|
|
||||||
when(side){
|
|
||||||
Side.LEFT -> move(player, level, -40F, 0F)
|
|
||||||
Side.RIGHT -> move(player, level, 40F, 0F)
|
|
||||||
Side.UP -> move(player, level, 0F, 40F)
|
|
||||||
Side.DOWN -> move(player, level, 0F, -40F)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.mouvementManagers
|
|
||||||
|
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
import uca.iutinfo.studentbros.model.*
|
|
||||||
import uca.iutinfo.studentbros.model.gameManagers.MouvementManager
|
|
||||||
import kotlin.concurrent.thread
|
|
||||||
|
|
||||||
class ConcreteInertieManager(val mouvementManager: MouvementManager) : InertieManager {
|
|
||||||
|
|
||||||
val gottaMoveEmAll = mutableMapOf<Element, Float>()
|
|
||||||
|
|
||||||
override fun moveElement(player: Player, level: Level, side: Side) {
|
|
||||||
var coef = 1F
|
|
||||||
if (side==Side.LEFT) coef=-1F
|
|
||||||
if (gottaMoveEmAll.containsKey(player)) {
|
|
||||||
gottaMoveEmAll.remove(player)
|
|
||||||
}
|
|
||||||
gottaMoveEmAll.put(player, 40*coef)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun moveElement(element: Element, level: Level, side: Side) {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onChanged(t: GameLoop) {
|
|
||||||
val ite = gottaMoveEmAll.iterator()
|
|
||||||
ite.forEach {
|
|
||||||
if (mouvementManager.move(it.key, t.level, it.value, 0F)){
|
|
||||||
it.setValue(it.value-5F)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.mouvementManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
import uca.iutinfo.studentbros.model.Player
|
|
||||||
import uca.iutinfo.studentbros.model.Side
|
|
||||||
import uca.iutinfo.studentbros.model.gameManagers.CollisionManager
|
|
||||||
|
|
||||||
class ConcretePlayerMouvementManager(val collisionManager: CollisionManager) : PlayerMouvementManager {
|
|
||||||
|
|
||||||
val inertieManager = ConcreteInertieManager(this)
|
|
||||||
|
|
||||||
override fun movePlayer(player: Player, level: Level, side: Side) {
|
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun move(player: Player, level: Level, x: Float): Boolean {
|
|
||||||
player.right += x
|
|
||||||
player.left += x
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.mouvementManagers
|
|
||||||
|
|
||||||
import androidx.lifecycle.Observer
|
|
||||||
import uca.iutinfo.studentbros.model.*
|
|
||||||
|
|
||||||
interface InertieManager : Observer<GameLoop> {
|
|
||||||
|
|
||||||
fun moveElement(player: Player, level: Level, side: Side)
|
|
||||||
|
|
||||||
fun moveElement(element: Element, level: Level, side: Side)
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros.model.mouvementManagers
|
|
||||||
|
|
||||||
import uca.iutinfo.studentbros.model.Level
|
|
||||||
import uca.iutinfo.studentbros.model.Player
|
|
||||||
import uca.iutinfo.studentbros.model.Side
|
|
||||||
|
|
||||||
interface PlayerMouvementManager {
|
|
||||||
|
|
||||||
fun movePlayer(player: Player, level: Level, side: Side)
|
|
||||||
|
|
||||||
fun move(player: Player, level: Level, x: Float): Boolean
|
|
||||||
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
package uca.iutinfo.studentbros
|
|
||||||
|
|
||||||
import org.junit.Test
|
|
||||||
import uca.iutinfo.studentbros.data.Stub
|
|
||||||
import uca.iutinfo.studentbros.model.Side
|
|
||||||
import uca.iutinfo.studentbros.model.gameManagers.ConcreteCollisionManager
|
|
||||||
import uca.iutinfo.studentbros.model.mouvementManagers.ConcreteInertieManager
|
|
||||||
import uca.iutinfo.studentbros.model.mouvementManagers.ConcretePlayerMouvementManager
|
|
||||||
|
|
||||||
class ConcreteInertieManagerTest {
|
|
||||||
|
|
||||||
|
|
||||||
val inertieManager = ConcreteInertieManager(ConcretePlayerMouvementManager(
|
|
||||||
ConcreteCollisionManager()
|
|
||||||
))
|
|
||||||
|
|
||||||
val player = Stub().getPlayer()
|
|
||||||
val level = Stub().getLevel()
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testMovePlayer(){
|
|
||||||
inertieManager.moveElement(player, level, Side.RIGHT)
|
|
||||||
inertieManager.moveElement(player, level, Side.RIGHT)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue