public override void UpdateActivationRadii()
        {
            ContextParameters paramaters = sSystemRegistry.ContextParameters;
            //float halfHeight2 = (paramaters.GameHeight * 0.5f) * (paramaters.GameHeight * 0.5f);
            //float halfWidth2 = (paramaters.GameWidth * 0.5f) * (paramaters.GameWidth * 0.5f);
            //float screenSizeRadius = (float)Math.Sqrt(halfHeight2 + halfWidth2);

            //to londgside
            float screenSizeRadius;

            if (paramaters.GameWidth > paramaters.GameHeight)
            {
                screenSizeRadius = paramaters.GameWidth / 2;
            }
            else
            {
                screenSizeRadius = paramaters.GameHeight / 2;
            }

            mActivationRadiusTight         = screenSizeRadius + 128.0f;
            mActivationRadiusNormal        = screenSizeRadius * 1.25f;
            mActivationRadiusWide          = screenSizeRadius * 2.0f;
            mActivationRadiusExtraWide     = screenSizeRadius * 4.0f;
            mActivationRadius_AlwaysActive = -1.0f;
        }
示例#2
0
        public void EnterContext(QNode node)
        {
            Type parameterType;
            var  expression = ContextExpression.Peek();

            parameterType = expression.Type.IsGenericType ? expression.Type.GenericTypeArguments[0] : expression.Type.UnderlyingSystemType;

            var parameter = Expression.Parameter(
                parameterType,
                string.Format("x{0}", parameterPrefix++));

            ContextParameters.Push(parameter);
        }
示例#3
0
        public void VisitProjection(QNode node)
        {
            var left = ContextExpression.Pop();

            Type projectorType     = null;
            var  dynamicProperties = new List <DynamicProperty>();
            var  bindings1         = MemberNodeConverter.ConvertToBindings(ContextParameters.Peek(), node);

            foreach (var binding in bindings1)
            {
                var property = new DynamicProperty(binding.Key, binding.Value.Type);
                dynamicProperties.Add(property);
            }

            projectorType = ClassFactory.Instance.GetDynamicClass(dynamicProperties);

            var resultProperties   = projectorType.GetProperties();
            var bindingsSource     = new List <Expression>();
            var bindingsProperties = new List <PropertyInfo>();

            foreach (var binding in bindings1)
            {
                bindingsProperties.Add(resultProperties.FirstOrDefault(x => x.Name == binding.Key));
                bindingsSource.Add(binding.Value);
            }

            var bindings = new List <MemberBinding>();

            for (var i = 0; i < bindingsSource.Count; i++)
            {
                var exp = Expression.Bind(bindingsProperties[i], bindingsSource[i]);
                bindings.Add(exp);
            }

            var lambda =
                Expression.Lambda(
                    Expression.MemberInit(Expression.New(projectorType.GetConstructor(Type.EmptyTypes)), bindings),
                    ContextParameters.Peek());

            var result = BuildMethodCallExpression(MethodType.Select, left, lambda);

            ContextExpression.Push(result);

            HasProjection        = true;
            Mapper.EnableMapping = false;
        }
示例#4
0
        public void VisitMethod(QNode node)
        {
            MethodType method;

            if (node.Value is long)
            {
                method = (MethodType)Convert.ToInt16(node.Value);
            }
            else
            {
                Enum.TryParse(Convert.ToString(node.Value), out method);
            }

            var right = ContextExpression.Pop();
            var left  = ContextExpression.Pop();

            var lambda = Expression.Lambda(right, ContextParameters.Peek());

            var exp = BuildMethodCallExpression(method, left, lambda);

            ContextExpression.Push(exp);
        }
示例#5
0
 public void LeaveContext(QNode node)
 {
     ContextParameters.Pop();
 }
示例#6
0
        public void VisitMember(QNode node)
        {
            var member = MemberNodeConverter.ConvertToMemberExpression(ContextParameters.Peek(), node);

            ContextExpression.Push(member);
        }