On peut à présent remettre le flag start sur vrai | Code Source | Stéphane Gantelet
     

#pragma strict
import System.Collections.Generic ;
var soundManager : SoundManager ;
//déclaration des variables
var oeufBase : GameObject ;
var oeufActuel : GameObject ;
var newOeufActuel : GameObject ;
var scriptCameraSwitch : CameraSwitch ;
var cameraActive : Camera ;
var oeufList : List. ;
var oeufPosDepart : List.<Vector3> ;
var oeufPosArriv : List.<Vector3> ;
var oeufScale1 : List.<Vector3> ;
var oeufScale2 : List.<Vector3> ;
var listIndexCliqued : List. ;
var scoreText : GameObject {;//le texte du nombre de vagues à afficher à l’écran}
var start : boolean ;
var clickTime : boolean ;
var collide : boolean ;
var saturation : boolean ;
var reset : boolean ;
var speed : int ;
var espacement : int ;
var vertex : int ;
var indexActuel : int ;
var increment : int ;
var targetCount : int {;//total des œufs}
var score : int ;{//le nombre de reset depuis le début du jeu}
var txt : String ;
var ray : Ray ;
var lineRenderer : LineRenderer ;
var scriptOeuf : Action ;
var c1 : Color = Color.yellow ;
var c2 : Color = Color.red ;
var colorOeufActuel : Color ;
function Awake (){//recherche dans la hiérarchie des objets de jeu principaux}
soundManager = GetComponent(SoundManager) ;
oeufBase = GameObject.Find(« OeufBase ») ;
scoreText = GameObject.Find(« Score ») ;{//sprite de score}
for (var list:Transform in oeufBase.transform)/{/crée le tableau de l’ensemble des œufs de premier niveau}
oeufList.Add(list.gameObject) ;//{ajoute les œufs}
function Score()//{fonction qui permet d’augementer le compteur du nombre de vagues à l’écran}
score +=1 ;//{incrément avec un pas de 1}
scoreText.GetComponent(TextMesh).text = score.ToString() ;//{convertit le score } {(nombre) en un string (texte) pour l’afficher}
function WaitAndReset()//{fonction qui permet un reset complet des éléments à l’écran après 0.3 secondes}
//yield WaitForSeconds(0.3) ;
clickTime = false ;
soundManager.setSoundClip = false ;
start = false ;
ClearAll() ;//{appel à la fonction qui permet de remettre tous les tableaux à zéro}
for (var listt:Transform in oeufBase.transform)//{crée le tableau de l’ensemble des œufs de premier niveau}
oeufList.Add(listt.gameObject) ;//{ajoute les œufs enfants contenus dans l’œuf parent au tableau principal}

for (var oeufsPoss:GameObject in oeufList)
AddOeuf(oeufsPoss) ;//{lance la fonction qui nourrit l’ensemble des tableaux secondaires de position de départ, d’arrivée, etc.
}

increment += 10 ;//{on augmente l’incrément de 1 à chaque passage par la fonction WaitAndReset.}
targetCount = increment+10 ;//{définit un nouvel objectif. Le nombre total d’œufs qui pourront être créés lors de la prochaine session}
start = true ;//{on peut à présent remettre le flag start sur vrai}
reset = false ;
function Reset()// {fonction qui permet aux œufs sur lesquel la souris est passée de retrouver leur couleur d’origine après 0.1 secondes}
yield WaitForSeconds(0.1) ;
//oeufActuel.transform.localScale = Vector3(1,1,1) ;
if(oeufActuel != null)// {si la variable oeufActuel à été attribuée}
oeufActuel.renderer.material.color.r = 0.283 ;//{remet la couleur du matériau d’origine
}

collide = false ;//{la souris n’est plus sur un œuf}
function ClearAll()/{/vidange des tableaux}
for (var t:int=28 ;t<oeufList.Count ;t++)//{28 est le nombre total d’œufs au départ du jeu
Destroy(oeufList[t]) ;//destruction des œufs au-delà de 23 présents à l’écran}

for (var tt:int=0 ;tt<28 ;tt++)//{28 est le nombre total d’œufs au départ du jeu}
if(oeufList[tt].GetComponent(AudioSource) != null) ;//{si il reste un composant audioSource sur l’œuf}
Destroy(oeufList[tt].GetComponent(AudioSource)) ;

oeufList.Clear() ;
oeufPosDepart.Clear() ;
oeufPosArriv.Clear() ;
listIndexCliqued.Clear() ;
soundManager.audioSourceList.Clear() ;
Score() ;//appel à la fonction Score
function RenderMesh()
for(var rend:GameObject in oeufList)
rend.GetComponent(Renderer).enabled = true ;
function NotRenderMesh()
for(var rend:GameObject in oeufList)
rend.GetComponent(Renderer).enabled = false ;
function LineRender()//{fonction qui permet de créer une ligne pour joindre les œufs}
vertex = oeufList.Count ;//{le nombre de segments (sommets) de la ligne est défini par le nombre d’œufs présents à l’écran}
lineRenderer = GetComponent(LineRenderer) ;
lineRenderer.useWorldSpace = true ;
lineRenderer.SetVertexCount(vertex) ;///{affecte le nombre vertex à la lineRenderer}
for(var i:int=0 ;i<vertex;i++){/{/boucle pour affecter tout les éléments du tableau target}
if (i >= listIndexCliqued.Count)//{tableau des éléments déja cliqués à prendre en compte pour tracer la ligne}
lineRenderer.SetPosition(i,oeufPosArriv[listIndexCliqued.Count-1]) ;//{définit la position de chaque sommet}
lineRenderer.SetWidth(25,25) ;//{définit la largeur de la ligne
}

else
var pos:int = listIndexCliqued[i] ;
lineRenderer.SetPosition(i,oeufPosArriv[pos]) ;
function AddOeuf(pPos:GameObject) //{fonction qui permet de remplir les tableaux en fonction du nombre d’œufs créés lors du jeu.}
oeufPosDepart.Add(Vector3.zero) ;//{remplit un tableau de position des œufs au départ } du jeu soit vector3(0,0,0)
var oeufP = Vector3(Random.Range(-espacement,espacement),Random.Range(-espacement,espacement),Random.Range(-espacement,espacement)) ;
oeufPosArriv.Add(oeufP) ;//{ajoute une position aléatoire à chaque œuf dans l’espace}
function Start () //{démarrage du jeu/définition des variables sur la première frame}
Application.targetFrameRate = 35 ;
txt = « START » ;
reset = false ;
start = false ;
clickTime = false ;
collide = false ;
increment = 19 ;
targetCount = 29 ;
speed = 2 ;
score = 0 ;
espacement = 4000 ;
for (var oeufsPos:GameObject in oeufList)
AddOeuf(oeufsPos) ;

NotRenderMesh() ;
function Update () //{exécution du jeu toutes les frames}
if(start)
RenderMesh() ;
var dist = Vector3.Distance(oeufList[oeufList.Count-1].transform.position,oeufPosArriv[oeufList.Count-1]) ;//{distance des œufs de leur position définitive}
if (dist>10)//{si cette distance est trop grande on attire les œufs vers leur position définitive }
for (var i:int=0 ;i<oeufList.Count ;i++)
oeufList[i].transform.position = Vector3.Lerp(oeufList[i].transform.position,oeufPosArriv[i],Time.deltaTime * speed) ;//{déplace les œufs à des positions aléatoires dans l’espace (position calculée dans la fonction Start)}


if (dist<50)/{/si cette distance est inférieure à 50 alors on peu commencer à cliquer}
clickTime = true ;//{on peut activer le jeu pour le joueur afin de cliquer
}


if (clickTime)//{si on autorise le clic à l’écran alors}
ray = cameraActive.ScreenPointToRay (Input.mousePosition) ;// {on projete des rayons depuis la caméra dans la direction de la souris}
var hit : RaycastHit ;//{si ce rayon entre en collision avec un œuf}
for (var ii:int=0 ;ii<oeufList.Count;ii++)//on> 0)//{si ce n’est pas le premier objet sur lequel on clique}
LineRender() ;//{on lance la fonction de dessin de ligne et on affiche la ligne entre les œufs à l’écran}
if (listIndexCliqued.Count > 1)/{/au dela de 1 œuf déjà cliqué on crée un œuf supplémentaire qui est un clone de celui sur lequel on vient de cliquer}
var rand = Random.Range(0,oeufList.Count) ;
var tempOeuf:GameObject = Instantiate(oeufList[rand], Vector3(0,0,0),oeufList[ii].transform.rotation) ;
oeufList.Add(tempOeuf) ;/{/on ajoute ce nouvel œuf à la liste totale des œufs}
AddOeuf(tempOeuf) ;





if (collide)
Reset() ;//{si on est passé sur un œuf avec la souris on lance la fonction reset définie plus haut dans le script}



if(oeufList.Count>targetCount)//{si la liste des oeufs cliqués dépasse l’incrément actuel * 5}
reset = true ;//{on remet tout à zéro et on redistribue les œufs dans l’espace}

if(reset)
scriptCameraSwitch.camearSwitch = true ;//{on en profite aussi pour changer de point de vue}
WaitAndReset() ; //lance la fonction de Reset


#pragma strict
/{/script qui permet de changer le point de vue de la caméra au moment de la remise à zéro ou quand on clique sur le bouton « lisser »}
var camearSwitch : boolean ;
var go : boolean ;
var zero : GameObject ;
var repere : GameObject[] ;//{repères disposés dans l’espace vers lequel la caméra peut se déplacer (repères disposés aux points cardinaux)}
var i : int ;
function Start ()
go = false ;
camearSwitch = false ;
i=0 ;
function Update ()
if (camearSwitch)//{si le flag est vrai}
if(i>=3)//{si i est inférieur à 4 soit le nombre total de repères}
i=0 ;//on le remet à zéro

i +=1 ;//sinon on augment i de 1
go = true ;
camearSwitch = false ;

if(go)//si flag go vrai
transform.position = Vector3.Lerp(transform.position, repere[i].transform.position, Time.deltaTime/4) ;/{/changement de position en x, y et z}
transform.LookAt(zero.transform.position) ;//{on oriente la caméra pour qu’elle regarde au milieu de la scène}


#pragma strict
/{/script attaché aux sprites cubes qui sont associés aux sprites cliquables en bas à gauche de l’écran pour afficher le texte, etc.}
var gameManager : GameManager ;
var cameraSwitch : CameraSwitch ;
var cameraSprite : Camera ;
var txt : GameObject[] ;//{les sprites de texte}
var go : boolean ;
var animX : AnimationCurve[] ;
var timer : float ;
var timer2 : float ;
var tpsAction : float ;
var colliderCastRay :Collider2D ;
var renderList : List. ;
var emptyCollider : GameObject ;//{empty qui sert de cible par défaut à la variable } gameManager.colliderCastRay
function Awake()
gameManager = GameObject.Find(« ControlCenter »).GetComponent(GameManager) ;
function Reset()
for(var rendd in renderList)
rendd.material.color.a = 1 ;
function CastRay2D()//{fonction qui permet de cliquer sur le bouton Sommaire en } {faisant un raycast 2D}
var mousePosition:Vector3 = Input.mousePosition ;
mousePosition.z = 0 ;
var ray : Vector2 = cameraSprite.ScreenToWorldPoint(mousePosition) ;//{fonction qui permet de récupérer les coordonnées de la souris sur une caméra orthographique}
var col : Collider2D[] = Physics2D.OverlapPointAll(ray, 1 << 8) ; //OverlapPointAll est nécessaire pour un collider 2D
if(col.Length>0 && col != null)
colliderCastRay = col[col.length-1] ;//{on ne prend que le dernier élément du tableau
}

Debug.Log(col.Length) ;
Debug.Log(colliderCastRay.gameObject.name) ;
return colliderCastRay ;
function CheckSprite()
for(var i:int=0 ;i<txt.length ;i++)
if (colliderCastRay.gameObject == txt[i])
if (colliderCastRay.gameObject == txt[2]) //sprite start
renderList[2].enabled = false ;
renderList[4].enabled = true ;
if (Input.GetMouseButtonDown(0))//{et si on clique dessus}
if (!gameManager.start)
gameManager.start = true ;//{si on clique sur ce bouton on passe en mode start qui lance le jeu}
txt[2].SetActive(false) ;
txt[4].SetActive(false) ;
txt[5].SetActive(true) ;



else
if(txt[2].active)
renderList[2].enabled = true ;
renderList[4].enabled = false ;


if (colliderCastRay.gameObject == txt[1]) //{sprite switch}
renderList[1].enabled = false ;
renderList[3].enabled = true ;
if (Input.GetMouseButtonDown(0))//{et si on clique dessus}
cameraSwitch.camearSwitch = true ;


else
renderList[1].enabled = true ;
renderList[3].enabled = false ;

if (colliderCastRay.gameObject == txt[0]) //sprite reset

if (colliderCastRay.gameObject == txt[5]) //sprite switch
renderList[5].enabled = false ;
renderList[6].enabled = true ;
if (Input.GetMouseButtonDown(0))//{et si on clique dessus}
if (gameManager.start)
Application.Quit() ;//{fonction de sortie du jeu}



else
if(txt[5].active)//exit
renderList[5].enabled = true ;
renderList[6].enabled = false ;


if (colliderCastRay.gameObject == txt[7]) //sprite ?
renderList[7].enabled = false ;
renderList[8].enabled = true ;
if (Input.GetMouseButtonDown(0))//{et si on clique dessus ouvre une page web avec infos sur le jeu + code source}
Application.OpenURL("http://gantelet.com/spip.php?page=breve&id_breve=25&var_mode=calcul") ;


else
if(txt[7].active)//exit
renderList[7].enabled = true ;
renderList[8].enabled = false ;



function Start()
colliderCastRay = emptyCollider.GetComponent(Collider2D) ;
for (var ren:GameObject in txt)//{crée le tableau des render des sprites}
var rende = ren.GetComponent(SpriteRenderer) ;
renderList.Add(rende) ;

go = true ;
tpsAction = 0.3 ;
timer = 0 ;
timer2 = 0 ;
function Update()
CastRay2D() ;//{lance la fonction de détection de collision sur les sprites (boutons) affichés à l’écran}
CheckSprite() ;/{/lance la fonction qui permet de déterminer quel bouton à été cliqué et donc quelle action effectuer}

#pragma strict
//Script qui gère le son
var gameManager : GameManager ;
var shortSoundList : List. ;//{liste d’audio clips 3}
var shortHiSoundList : List. ;//{liste d’audio clips 1}
var longSoundList : List. ;//{liste d’audio clips 2}
var audioSourceList : List. ;/{/liste des audioSources nécessaires à l’affectation des audioClips}
var audioSourceActuel : AudioSource ;/{/L’audioSource sur laquelle on effectue des manipulations à l’instant T}
var audioActuel : AudioClip ;//{l’audioClip concerné par la manipulation en T}
var totalIndex : int ;
var iteration : int ;
var setSoundClip : boolean ;//{flag pour lancer la manipulation}
function Awake()
gameManager = GameObject.Find(« ControlCenter »).GetComponent(GameManager) ;//{trouve le script GameManager}
function PlaySound(audioSourceActu:AudioSource)//{fonction qui gère le volume et le pan de l’audio en les faisant varier de manière aléatoire}
var hasard3:float = Random.Range(0.2,0.8) ;//{volume compris entre 0.2 et 0.8}
audioSourceActu.volume = hasard3 ;//{volume}
var hasard4:float = Random.Range(-1,1) ;
audioSourceActu.pan = hasard4 ;//{pan}
function SetSound(maxi:int, audioClipConcern : List.)//{arguments : maxi=taille du tableau, audioClipConcern=liste d’audioClip adaptée à la condition de jeu}
var hasard:int = Random.Range(0,maxi-1) ;
audioActuel = audioClipConcern[hasard] ;//{affecte un clip pris au hasard dans le tableau concerné}
audioSourceActuel = audioSourceList[totalIndex-1] ;//{affecte l’audio source actuelle à une variable locale}
audioSourceActuel.clip = audioActuel ; //{affecte le clip choisi au hasard à l’audio source actuelle (soit la variable locale déclarée précédement)}
PlaySound(audioSourceActuel) ;//{fonction de gestion du clip}
audioSourceActuel.Play() ;//{lecture}
setSoundClip = false ;/{/inversion de flag}

function Update () //{chaque frame exécute ceci}
if(gameManager.clickTime)//{si flag d’indication de départ du jeu (bouton strier)}
totalIndex = gameManager.listIndexCliqued.Count ;//{nombre total des œufs déja cliqués}
if(setSoundClip)//{ Si flag ok pour le son}
if(totalIndex<gameManager.targetCount/3)//{ si moins de 3 œufs à l’écran}
var temp1 = shortHiSoundList ;//{ on pioche le son au hasard dans cette liste}
var temp2 = shortSoundList ;/{/ou celle-ci}
var temp3 = longSoundList ;//{ou celle-là}
var hasard2 = Random.Range(1,3) ;//{prend un chiffre de 1 à 3 au hasard
}
if(hasard2 == 1)
SetSound(temp1.Count, temp1) ;//{affecte le bon clip grace à la fonction SetSound}

if(hasard2 == 2)
SetSound(temp2.Count, temp2) ;//{affecte le bon clip grace à la fonction SetSound}

if(hasard2 == 3)
SetSound(temp3.Count, temp3) ;//{affecte le bon clip grace à la fonction SetSound}





#pragma strict
//{Script embarqué sur chaque œuf qui le fait tourner sur lui-même et gonfler comme si il respirait lorsqu’on clique dessus}
var gameManager : GameManager ;
var go : boolean ;
var anim : AnimationCurve ;
var timer : float ;
function Awake()
gameManager = GameObject.Find("ControlCenter").GetComponent(GameManager) ;
function Start ()
go = false ;
function Update ()
if (go)
var offset = gameManager.listIndexCliqued.Count ;
timer += Time.deltaTime ;
transform.localScale = Vector3(anim.Evaluate(timer),anim.Evaluate(timer),anim.Evaluate(timer)) ;/{/change l’échelle de l’œuf }
transform.Rotate(Time.deltaTime*8,Time.deltaTime*10,Time.deltaTime*12) ; /{/le fait tourner lentement}


#pragma strict
//{script qui gère la barre de progression soit en fonction du nombre total d’œufs présents à l’écran soit en fonction du nombre total}
var drawcalls : int = 0 ;
var oldDrawCalls : int = 0 ;
var objectVisible : float = 0 ;
var oldint:float ;
var allObjects : GameObject[] ;
var gameManager : GameManager ;
var go : boolean ;
var barreVie : GameObject ;
function Awake()
gameManager = GameObject.Find("ControlCenter").GetComponent(GameManager) ;
function DrawCalls()//{fonction qui calcule le nombre d’objets visibles à l’écran
}
allObjects = FindObjectsOfType (GameObject) ;
for(var obj : GameObject in allObjects)
var rend : Renderer = obj.GetComponent(Renderer) ;
if(rend && rend.isVisible)
objectVisible ++ ;


drawcalls = objectVisible ;
go = false ;
function WaitAndGo()
oldDrawCalls = drawcalls ;
yield WaitForSeconds(0.3) ;
objectVisible = 0 ;
go= true ;
function Start()
drawcalls = 0 ;
oldint = 0 ;
go= true ;
function Update()
if(gameManager.clickTime)//{si le jeu à démarré}
//oldint = (oldDrawCalls) ;
//var newInt:float = (drawcalls) ;
oldint = gameManager.oeufList.Count-1 ;
var newInt:float = gameManager.oeufList.Count ;//{définit la taille grâce au tableau temps réel des œufs cliqués}
barreVie.transform.localScale.x = (Mathf.SmoothStep(oldint,newInt,2)/100) ;//{augmentation de la taille de la jauge rouge. Au delà de 100 la jauge sort de son cadre}
if(go)
//DrawCalls() ;//{fonction en sommeil}

if(!go)
//WaitAndGo() ;



#pragma strict
//{script qui fait varier la couleur de la LineRender qui relie les œufs}
var materials : Color[] ;
var mat : Color ;
var duration : float ;
var t : float =0 ;
var v : float =0 ;
var w : float =0 ;
var i : int = 0 ;
var gameManager : GameManager ;
var timer : float ;
function Awake()
gameManager = GameObject.Find("ControlCenter").GetComponent(GameManager) ;
function Start ()
duration = 3 ;
timer=0 ;
function Update ()
if(!gameManager.reset)
t = t+Time.deltaTime/duration ;
if (t<=1)
mat.a = renderer.material.color.a +=Time.deltaTime ;//{affecte le canal alpha de la couleu}r
renderer.material.color = Color.Lerp (materials[i], materials[i+1],t) ;
mat = renderer.material.color ;
if (t>1)
v = v+Time.deltaTime/duration ;
renderer.material.color = Color.Lerp (materials[i+1], materials[i+2],v) ;
mat = renderer.material.color ;

if (t>2)
w = w+Time.deltaTime/duration ;
renderer.material.color = Color.Lerp (materials[i+2], materials[i],w) ;
mat = renderer.material.color ;
if (t>3)
t=0 ;
v=0 ;
w=0 ;


if(gameManager.reset)
mat.a = renderer.material.color.a -=Time.deltaTime ;
t=0 ;
v=0 ;
w=0 ;
Fin du programme

 

Retour au jeu