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