Skip to content
Gentilhomme edited this page Apr 17, 2020 · 8 revisions

SceneConstructor

Le principe de cet metatable est simple, construire et stocker tout le gameobjects de la scène dans un tableau séparer en catégorie distincte que vous pouvez vous-même créer et modifier. Le but est de pouvoir communiquer et jouer avec des groupes d'objets de manière rapide et performante.

Dépendances

  • Aucune

Base du système.

Pour pouvoir utiliser cet class vous allez devoir faire un scanroom dans un des fichiers de votre jeu. En général le fichier qui serait considérer comme "INDEX" de votre scène.

-- Exemple dans mon fichier UI qui est mon fichier principal de ma scène.
function Behavior:Awake()
    -- Pas d'inquiétude, elle fait le café toute seule ! 
    SceneConstructor:Scanroom()
end

Exemple

Récupération dynamique des containers dans la scène (class UserInterface).

if not SceneConstructor.Generate then 
    SceneConstructor:Scanroom()
end

-- > On applique une nouvelle position a tout les containers.
do local R = SceneConstructor:Get("container") 
    if R ~= false then
        for i=1, #R do  
            local PosZ = R[i].transform:GetLocalPosition().z
            R[i].transform:SetLocalPosition( V3:New( 200 , 0 , PosZ ) ) 
            R[i]:CreateScriptedBehavior( Craft.FindAsset( "United/Librairie/Core/Container" , "Script" ) , nil ) 
        end
    end
end

Les différentes commandes possible.

AddTag(tag,value)

Ajouter un tag au système de construction, par exemple vous avez un niveau avec plusieurs Plaque qui bouge !

-- Le constructor ici suivit de l'ajout du nouveau tag dans la construction de scène.
SceneConstructor:AddTag("plaque_","plaque") 

**Attention le système ne prend pas en compte la casse. **

Get(tag)

Permet de retourner un tableau avec tout les gameObjets contenant le tag argument, exemple :

function Behavior:Awake()
    SceneConstructor:Scanroom()
    local R = SceneConstructor:Get("input")
    for k,v in pairs(R) do
        print(k,v:GetName())
    end
end

Si dans votre scène vous aviez ajouter par exemple deux gameObjets avec des noms de type : Input_ alors le get vous les retournera. Dans notre cas voiçi ce que la console affiche.

-- Rapport d'éxecution.
1	Input_mdr
2	Input_xd
3	Input_test2

Echo(tag,name)

Le même résultat que précédemment sauf que vous n'avez pas besoin de print les objets, là class s'en charge elle-même.

function Behavior:Awake()
    SceneConstructor:Scanroom()
    SceneConstructor:Echo("input",true) -- true si vous voulez le nom des gameObjets
end
-- Rapport d'éxecution.
1	Input_mdr
2	Input_xd
3	Input_test2

Destroy(tag)

Supprime tout les objets de type "tag".

SceneConstructor:Destroy("input")

Message(tag,fonction,behavior)

Envoie un message à tout les objets de type "tag". Pour faire court c'est une boucle de SendMessage.

SceneConstructor:Message("input","Function",{test="lol"})

ObjectDestroy

Vous permet de détruire un objet du tableau courant.

Out_Memory (automatic function)

Cet function est automatiquement appeler au changement de scène afin de supprimer toutes les variables et le tableau storage.