Posts Tagged ‘metatag’

Unity3D : Attribute

A muito tempo eu descobri o poder das MetaTag no actionscript e das Annotation no Java
(falei sobre aqui -> https://fabriciodezain.wordpress.com/2013/09/30/as3metatagcustom-javaannotation/)

Agora irei colocar aqui a magica acontecendo no c# / Unity3D.
Não foi muito facil encontrar algo no iniciao, mas com a insistência o google cedeu;P
Basicamente usei como gui esses dois links:
http://www.codeproject.com/Articles/2933/Attributes-in-C
http://www.tutorialspoint.com/csharp/csharp_attributes.htm

No inicio, a coisa mais difícil de entrar na cachola foi saber que  o c# suprimiria a parte ‘Attribute’

Onde:

[AttributeUsage(AttributeTargets.All , AllowMultiple = true)]
public class CustomAttribute : Attribute
{}

Viraria

[Custom] propriedade 

e não

[CustomAttribute] propriedade

O outro pulo do gato é saber como funciona ‘reflection’ no c#…
Não e difícil, mas

'propriedade.SetValue(objeto que tem a propriedade, valor, null)'

ainda parece gambiarra pra mim =/

Então…mão na massa!

Criei uma classe para ser a minha "annotation" (passo1)
using System;
namespace Annotation
{
 [AttributeUsage(AttributeTargets.All , AllowMultiple = true)]
 public class CustomAttribute : Attribute
 {
 public string Name;
 public CustomAttribute(string __name)
 {
 this.Name = __name;
 }
 }
}
Obs.: Não use 'public' na ausência de adultos

Criar uma classe onde usaremos o nosso CustomAttribute  (passo2)
public class MyTestClass
{
 [Annotation.Custom("MyTestClass")]
 public object MySystem { set; get; }
}
Criar o cara responsável pela mágica/macumba(passo3)
using System.Reflection;
using System;
namespace Annotation
{
	public class Properties
	{

		static public void Execute(object __target)
		{
			CustomAttribute customAttribute;

			Type type =  __target.GetType();

			object[] fildList = type.GetProperties();
			foreach(PropertyInfo field in fildList)
			{
				object[] attributeList = field.GetCustomAttributes(true);
				foreach (Attribute attr in attributeList)
				{
					customAttribute = attr as CustomAttribute;
					if(customAttribute == null) { continue ;}
					var a = field;
					field.SetValue(__target,customAttribute.Name,null);
				}
			}
		}
	}
}
E por último .......Fazer o teste \o/(passo4)
using UnityEngine;
using System.Collections;

public class MyBehaviour : MonoBehaviour {

 void Start ()
 {
  MyTestClass TestInstance = new MyTestClass();
  Debug.Log(TestInstance.MySystem);
  Annotation.Properties.Execute(TestInstance);
  Debug.Log(TestInstance.MySystem);
 } 

 void Update () { }
}
Enfim, de fato, não usei a unity pra muita coisa =/ #sorry 
isso porque tem um cara que vai fazer bastante coisa pra gente
e não teremos que ficar reinventando a roda. 
https://github.com/sebas77/Lightweight-IoC-Container-for-Unity3D/blob/master/README.md

[AS3(MetaTag=”custom”) && JAVA@Annotation

[AS3(MetaTag=”custom”) && JAVA@Annotation
Segue a brincadeira de hoje \o/

Como agora estou programando só em JAVA
acabei esbarrando em algo muito bacana/poderoso =)
as Annotations. -> http://docs.oracle.com/javase/tutorial/java/annotations/

E….fiquei encucado com isso. -Pô, isso tem que ter em flash/actionscript 3
Es que surge…a Metatag!!!Bem de baixo no meu nariz…
Coisas corriqueiras, como: [SWF], [Bindable] e etc… Sempre estiveram lá =’/
Mas faltou uma pergunta:- COMO ISSO FUNCIONA?
Ainda não sei muito sobre, mas segue um link -> http://pierrechamberlain.ca/blog/2011/04/custom_metadata/ (2011 =/ velin, né?!)

E como isso serviu bem pra mim ->

[Find(idGrade,idSubject)]
public function findByGradeAndSubject(idGrade:int,idSubject:int):Vector.<SubjectVO> 
{			
	return Vector.<SubjectVO> (findBy(idGrade,idSubject));
}
[Find(idGrade,title)]
public function findByGradeAndTitle(idGrade:int,title:String):Vector.<SubjectVO> 
{			
	return Vector.<SubjectVO> (findBy(idGrade,title));
}
[Find(idGrade,title,idSubject)]
public function find(...args):Vector.<SubjectVO> 
{			
	return Vector.<SubjectVO> (findBy(args));
}

Na proxima eu coloco o source.rar e tudo+

%d blogueiros gostam disto: