Commit e325e598 authored by Rennarde's avatar Rennarde
Browse files

Massive commit from Léo the best

parent 8ca8db42
{
"WindowTitle": "Default",
"WindowSizeX": 800,
"WindowSizeY": 600,
"ParticleImage": "assets/particle.png",
"Debug": true,
"InitNumParticles": 3000,
"RandomSpawn": false,
"SpawnX": 400,
"SpawnY": 400,
"scaleX":1,
"scaleY":1,
"SpawnRate": 0,
"SpeedLimit": [-2, 2, -2, 2],
"Colors": [0, 1, 0, 0, 0, 1],
"Gravity": 0,
"Pictures": "",
"GravityCenter": false,
"Scaleimg": false,
"Spawnimg" : false,
"GravityPoint": false,
"Clock" : false,
"Horlogescale" : 2,
"Variation": 25000,
"Limite_affichage": [-1000,-1000,1800,1600],
"Cahos": true
}
\ No newline at end of file
{
"WindowTitle": "Default",
"WindowSizeX": 800,
"WindowSizeY": 600,
"ParticleImage": "assets/particle.png",
"Debug": true,
"InitNumParticles": 1000,
"RandomSpawn": true,
"SpawnX": 400,
"SpawnY": 400,
"scaleX":1,
"scaleY":1,
"SpawnRate": 0,
"SpeedLimit": [-2, 2, -2, 2],
"Colors": [0, 0, 0, 1, 0, 1],
"Gravity": 0,
"Pictures": "",
"GravityCenter": true,
"Scaleimg": false,
"Spawnimg" : false,
"GravityPoint": false,
"Clock" : false,
"Horlogescale" : 2,
"Variation": 1,
"Limite_affichage": [-1000,-1000,1800,1600],
"Cahos": false
}
\ No newline at end of file
......@@ -20,5 +20,8 @@
"Spawnimg" : false,
"GravityPoint": false,
"Clock" : false,
"Horlogescale" : 2
"Horlogescale" : 2,
"Variation": 1,
"Limite_affichage": [-1000,-1000,1800,1600],
"Cahos": false
}
\ No newline at end of file
......@@ -21,5 +21,9 @@
"GravityPoint": false,
"Clock" : false,
"Horlogescale" : 2
"Horlogescale" : 2,
"Variation": 1,
"Limite_affichage": [-1000,-1000,1800,1600],
"Cahos": false
}
\ No newline at end of file
......@@ -22,12 +22,14 @@ type Config struct {
Spawnimg bool //fait directement apparaitre les pixels d'une image vers leurs position d'origine
Pictures string //fait apparaitre l'image donnée en lien, elles sont au format jpeg, il est non recommandé de mettre des images trop lourdes
Colors []float64
Gravity float64
Gravity, Variation float64
GravityCenter,GravityPoint bool //Active plusieurs type de gravités, GravityPoint attire les pixels d'une image vers leur position d'origine sur celle ci
Clock bool //fait apparaitre une les aiguilles d'une horloge analogique s'actualisant, peut etre combine avec Pictures pour rajouter un fond
Clock,Cahos bool //fait apparaitre une les aiguilles d'une horloge analogique s'actualisant, peut etre combine avec Pictures pour rajouter un fond
Horlogescale int //determine la taille des aiguilles, une valeur de 1 pour 250pixels est recommandé
NumCycle int
LifeOpt []string
Limite_affichage []float64
}
var General Config
......@@ -71,6 +71,22 @@ func commands() {
ExecPart("./Extension/life.json")
},
},
{
Name: "Chaos",
Aliases: []string{"ch"},
Usage: "Make a fancy particle animation",
Action: func(c *cli.Context) {
ExecPart("./Extension/Cahos.json")
},
},
{
Name: "GravityCenter",
Aliases: []string{"gc"},
Usage: "Make a fancy particle animation",
Action: func(c *cli.Context) {
ExecPart("./Extension/GravityCenter.json")
},
},
}
}
......
......@@ -37,6 +37,7 @@ func GenPart() Particle { // Crée une particule avec Px,Py comme position
SpeedY: config.General.SpeedLimit[2] + rand.Float64()*(config.General.SpeedLimit[3]-config.General.SpeedLimit[2]),
Overflow: false,
Life: config.General.NumCycle,
Variation: config.General.Variation,
}
}
......
......@@ -26,4 +26,6 @@ type Particle struct {
CibleX, CibleY float64
Overflow bool
Life int
Cahos bool
Variation float64
}
......@@ -20,6 +20,13 @@ func Nettoyage(tab []Particle) ([]Particle){
return tab
}
func too_far(p Particle) bool {
if p.PositionX < config.General.Limite_affichage[0] || p.PositionY < config.General.Limite_affichage[1] || p.PositionX > config.General.Limite_affichage[2] || p.PositionX > config.General.Limite_affichage[3] {
return true
}
return false
}
func UpdateCycle(Part Particle) (Particle) {
Part.Life = Part.Life -1
for i:=0; i < len(config.General.LifeOpt); i++ {
......@@ -96,8 +103,6 @@ func ClockUpdate(TabParticule []Particle) ([]Particle){
TabParticule[i].CibleY, TabParticule[i].CibleX = math.Sincos( math.Pi * (t[0]*2 + 1.0/2.0))
TabParticule[i].CibleY = -1 *TabParticule[i].CibleY* float64(k*9) + float64(config.General.WindowSizeY)/2
TabParticule[i].CibleX = -1 * TabParticule[i].CibleX *float64(k*9) +float64(config.General.WindowSizeX)/2
}
for k:=(horlogescale*7); k < (horlogescale*18); k++ {
i := k + Clockminparticule
......@@ -115,79 +120,132 @@ func ClockUpdate(TabParticule []Particle) ([]Particle){
}
return TabParticule
}
func spirale(p Particle) (Particle){
var centerX = config.General.WindowSizeX/2
var centerY = config.General.WindowSizeY/2
if p.PositionX >= float64(centerX){
if p.PositionY >= float64(centerY){
func cercle(p Particle) Particle {
var centerX = config.General.WindowSizeX / 2
var centerY = config.General.WindowSizeY / 2
p.Variation += 0.001
var distancex = math.Abs(p.PositionX - float64(centerX))
var distancey = math.Abs(p.PositionY - float64(centerY))
/*var distance = math.Sqrt((distancex*distancex) + (distancey*distancey))*/
if p.PositionX >= float64(centerX) {
if p.PositionY >= float64(centerY) {
/*X sup et Y sup
en bas à droite*/
if p.SpeedX > 0{
p.SpeedX = p.SpeedX - 0.0005
if p.SpeedX > 0 {
p.SpeedX = p.SpeedX - 0.00001*distancex*p.Variation
}
if p.SpeedY > -1{
p.SpeedY = p.SpeedY - 0.03
if p.SpeedY > -1 {
p.SpeedY = p.SpeedY - 0.00001*distancey*p.Variation
}
}else{
} else {
/*X sup et Y inf
en haut à droite*/
if p.SpeedX > -1{
p.SpeedX = p.SpeedX - 0.03
if p.SpeedX > -1 {
p.SpeedX = p.SpeedX - 0.00001*distancex*p.Variation
}
if p.SpeedY < 0{
p.SpeedY = p.SpeedY + 0.0005
if p.SpeedY < 0 {
p.SpeedY = p.SpeedY + 0.00001*distancey*p.Variation
}
}
}else if p.PositionX < float64(centerX){
if p.PositionY >= float64(centerY){
} else if p.PositionX < float64(centerX) {
if p.PositionY >= float64(centerY) {
/*X inf et Y sup
en bas à gauche*/
if p.SpeedX < 1{
p.SpeedX = p.SpeedX + 0.03
if p.SpeedX < 1 {
p.SpeedX = p.SpeedX + 0.00001*distancex*p.Variation
}
if p.SpeedY > 0{
p.SpeedY = p.SpeedY - 0.0005
if p.SpeedY > 0 {
p.SpeedY = p.SpeedY - 0.00001*distancey*p.Variation
}
}else{
} else {
/*X inf et Y inf
en haut à gauche*/
if p.SpeedX < 0{
p.SpeedX = p.SpeedX + 0.0005
if p.SpeedX < 0 {
p.SpeedX = p.SpeedX + 0.00001*distancex*p.Variation
}
if p.SpeedY < 1{
p.SpeedY = p.SpeedY + 0.03
if p.SpeedY < 1 {
p.SpeedY = p.SpeedY + 0.00001*distancey*p.Variation
}
}
}
return p
}
func cahos(p Particle) Particle {
var centerX = config.General.WindowSizeX / 2
var centerY = config.General.WindowSizeY / 2
p.Variation -= 10
if p.PositionX >= float64(centerX) {
if p.PositionY >= float64(centerY) {
/*X sup et Y sup
en bas à droite*/
if p.SpeedX > 0 {
p.SpeedX = p.SpeedX - (0.000012 * p.Variation)
}
if p.SpeedY > -1 {
p.SpeedY = p.SpeedY - (0.001 * p.Variation)
}
} else {
/*X sup et Y inf
en haut à droite*/
if p.SpeedX > -1 {
p.SpeedX = p.SpeedX - (0.001 * p.Variation)
}
if p.SpeedY < 0 {
p.SpeedY = p.SpeedY + (0.000012 * p.Variation)
}
}
} else if p.PositionX < float64(centerX) {
if p.PositionY >= float64(centerY) {
/*X inf et Y sup
en bas à gauche*/
if p.SpeedX < 1 {
p.SpeedX = p.SpeedX + (0.001 * p.Variation)
}
if p.SpeedY > 0 {
p.SpeedY = p.SpeedY - (0.000012 * p.Variation)
}
} else {
/*X inf et Y inf
en haut à gauche*/
if p.SpeedX < 0 {
p.SpeedX = p.SpeedX + (0.000012 * p.Variation)
}
if p.SpeedY < 1 {
p.SpeedY = p.SpeedY + (0.001 * p.Variation)
}
}
}
return p
}
func (s *System) Update() {
s.Content = Nettoyage(s.Content)
// s.Content = Nettoyage(s.Content)
for i:=0; i < len(s.Content); i++ {
if s.Content[i].Overflow == false {
if too_far(s.Content[i]) == false {
s.Content[i].PositionX += s.Content[i].SpeedX
s.Content[i].PositionY += s.Content[i].SpeedY
if config.General.Gravity != 0 {
s.Content[i] = gravite(s.Content[i])
}
if config.General.GravityCenter{
s.Content[i] = spirale(s.Content[i])
if config.General.GravityCenter {
s.Content[i] = cercle(s.Content[i])
}
if config.General.NumCycle > 0 {
s.Content[i] = UpdateCycle(s.Content[i])
}
if config.General.Cahos {
s.Content[i] = cahos(s.Content[i])
}
} else {
s.Content[i].Overflow = true
}
if config.General.GravityPoint{
s.Content[i] = gravitepoint(s.Content[i])
}
}
if config.General.Clock{
s.Content = ClockUpdate(s.Content)
......
......@@ -147,6 +147,19 @@ func Test_UpdateCycle_Grow(t *testing.T) {
}
}
// func Test_Gravite(t *testing.T) {
func Test_Gravite(t *testing.T) {
config.Get("../Extension/TestConfig.json")
config.General.InitNumParticles = 20
config.General.NumCycle = 5
config.General.Gravity = 10
config.General.SpeedLimit = []float64 {-1,1,-1,1}
Sys := NewSystem()
var OldSpdX,OldSpdY []float64
for i:=0; i
// }
\ No newline at end of file
for i:=0; i < 60; i++ {
for j:=0; j < len(Sys.Content); j++ {
Sys.Content[j]
}
}
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment