Пример #1
0
        internal void Request()
        {
            // This sets the Validity to *at least* Requested state.

            if (validity == TargetValidity.Referenced)
            {
                validity = TargetValidity.Requested;
            }
        }
Пример #2
0
        internal bool Define(IWarningLogger log)
        {
            if (validity == TargetValidity.Defined)
            {
                log.Error(2009, "Trying to redefine the target " + FullName,
                          null);
                return(true);
            }

            validity = TargetValidity.Defined;
            return(false);
        }
Пример #3
0
        /// <summary>
        /// Gets the <see cref="SpatialTarget"/> related to the given data.
        /// </summary>
        /// <param name="data">The data to look on.</param>
        /// <returns>The found <see cref="SpatialTarget"/>.</returns>
        protected virtual SpatialTarget GetSpatialTarget(SurfaceData data)
        {
            if (data == null || data.CollisionData.transform == null)
            {
                return(null);
            }

            SpatialTarget foundTarget = data.CollisionData.transform.gameObject.TryGetComponent <SpatialTarget>(false, true);

            if (foundTarget == null || !TargetValidity.Accepts(foundTarget.TargetContainer != null ? foundTarget.TargetContainer : foundTarget.gameObject))
            {
                return(null);
            }

            return(foundTarget);
        }
Пример #4
0
        public bool DoneRequesting(TypeResolver res, IWarningLogger log)
        {
            if (done_modifying)
            {
                throw ExHelp.InvalidOp("Cannot call DoneRequesting twice on a provider");
            }

            foreach (KeyValuePair <string, TargetBuilder> kvp in targets)
            {
                TargetValidity tv       = kvp.Value.Validity;
                string         fullname = Basis + kvp.Key;

                if (tv == TargetValidity.Referenced)
                {
                    // FIXME: this error message sucks
                    log.Error(2000, "A target was referenced from another provider " +
                              "that was not formally allowed to request it, and the " +
                              "target was not defined by its provider", fullname);
                    return(true);
                }

                if (tv == TargetValidity.Requested)
                {
                    TargetTemplate tmpl;

                    if (res.TryMatch(kvp.Key, MatcherKind.Dependency, out tmpl, log))
                    {
                        return(true);
                    }

                    if (tmpl == null)
                    {
                        log.Error(2027, "Could not guess a rule for a target " +
                                  "implicitly defined in a dependency. Do you " +
                                  "need to add a using [] line?", fullname);
                        return(true);
                    }

                    kvp.Value.Define(log);
                    tmpl.ApplyTemplate(kvp.Value);
                }
            }

            done_modifying = true;
            return(false);
        }
Пример #5
0
 /// <summary>
 /// Determines whether the <see cref="RaycastHit"/> data contains a valid surface.
 /// </summary>
 /// <param name="collisionData">The <see cref="RaycastHit"/> data to check for validity on.</param>
 /// <returns><see langword="true"/> if the <see cref="RaycastHit"/> data contains a valid surface.</returns>
 protected virtual bool ValidSurface(RaycastHit collisionData)
 {
     return(collisionData.transform != null && TargetValidity.Accepts(collisionData.transform.gameObject));
 }