Esempio n. 1
0
 public void InsertChapter(List <EpubItem> chapters, EpubItem insertAt)
 {
     for (int i = 0; i < Manifest.Count; ++i)
     {
         if (insertAt == Manifest[i])
         {
             for (int j = 0; j < chapters.Count; ++j)
             {
                 Manifest.Insert(i + j, chapters[j]);
             }
             break;
         }
     }
     for (int i = 0; i < Spine.Count; ++i)
     {
         if (insertAt == Spine[i])
         {
             for (int j = 0; j < chapters.Count; ++j)
             {
                 Spine.Insert(i + j, chapters[j]);
             }
             break;
         }
     }
     for (int j = 0; j < chapters.Count; ++j)
     {
         var chapter = chapters[j];
         AbsolutePathIndex.Add(chapter.AbsolutePath, chapter);
         IdIndex.Add(chapter.Id, chapter);
     }
 }
 void HandleEvent(Spine.AnimationState state, int trackIndex, Spine.Event e)
 {
     if (e.Data.Name == groundcollide) {
         stepsound.Stop();
         stepsound.Play();
     }
 }
Esempio n. 3
0
    // DEFINE EVENT FUNCTIONS ---------------------------------------------------------------
    public void Event(Spine.AnimationState state, int trackIndex, Spine.Event e)
    {
        //Debug.Log(trackIndex + " " + state.GetCurrent(trackIndex) + ": event " + e + ", " + e.Int);

        // EVENT LISTENER
        switch (e.ToString()) {
            case "footstep" :
                fxFootstep.Play();
                break;
            case "charge" :
                if (charging) {
                    // CHARGE END
                    fxCharge.Stop();
                    charging = false;
                    cancelable = false;
                } else {
                    // START CHARGING
                    fxCharge.Play();
                    charging = true;
                }
                break;
            case "recovery" :
                cancelable = true;
                break;
        }
    }
Esempio n. 4
0
    public void Event(Spine.AnimationState state, int trackIndex, Spine.Event e)
    {
        // DEBUG event display
        debug_Event.text = e.ToString();
        debug_Event.fontSize = debug_Event.fontSize != 20 ? 20 : 15;
        //Debug.Log(trackIndex + " " + state.GetCurrent(trackIndex) + ": event " + e + ", " + e.Int);

        // EVENT LISTENER
        switch (e.ToString()) {
            case "footstep" :
                fxFootstep.Play();
                break;
            case "charge" :
                if (charging) {
                    // charge end
                    fxCharge.Stop();
                    charging = false;
                    cancelable = false;
                } else {
                    // start charging
                    fxCharge.Play();
                    charging = true;
                }
                break;
            case "recovery" :
                cancelable = true;
                break;
        }
    }
Esempio n. 5
0
 void HandleEvent(Spine.AnimationState state, int trackIndex, Spine.Event e)
 {
     if (e.Data.Name == footstepEvent) {
         footstepAudioSource.pitch = 0.5f + Random.Range(-0.2f, 0.2f);
         footstepAudioSource.Play();
     }
 }
Esempio n. 6
0
    public static GameObject CreateAniResOrOther(string prefabPath, Subject2 owner, UserTriggerDelegate handleFunc, Spine.AnimationState.EventDelegate spineEvent)
    {
        GameObject gameObject = null;
        if (!string.IsNullOrEmpty(prefabPath))
        {
            gameObject = RecycleManager.Instance.Instantiate(prefabPath);

            if (gameObject != null)
            {
                AniResource aniRes = gameObject.GetComponent<AniResource>();
                if (aniRes != null)
                {
                    aniRes.owner = owner as Automaton;
                    aniRes.RegisterUserTriggerDelegate(handleFunc, spineEvent);
                }
            }

            if (gameObject == null)
            {
                Debug.LogWarning("prefabPath null: [" + prefabPath + "]");

                CubeTile.E_Pivot pivot = CubeTile.E_Pivot.BC;
                if (owner is Projectile)
                {
                    pivot = CubeTile.E_Pivot.MC;
                }
                gameObject = CubeTile.Create(pivot).gameObject;
                gameObject.transform.localScale = new Vector3(owner.Rect.width, owner.Rect.height, 0);
            }
        }
        return gameObject;
    }
	void HandleEvent (Spine.AnimationState state, int trackIndex, Spine.Event e) {
		//play some sound if footstep event fired
		if (e.Data.Name == footstepEventName) {
			footstepAudioSource.Stop();
			footstepAudioSource.Play();
		}
	}
Esempio n. 8
0
        private static Spine ParseSpine(XElement element)
        {
            Spine result = null;

            if (element != null && element.Name.LocalName == ELEMENT_SPINE)
            {
                result = new Spine
                {
                    Id  = element.Attribute(ATTRIBUTE_ID)?.Value,
                    Toc = element.Attribute(ATTRIBUTE_TOC)?.Value,
                    PageProgressionDirection = element.Attribute(ATTRIBUTE_PAGEPROGRESSIONDIRECTION)?.Value,
                };
                foreach (var childElement in element.Elements())
                {
                    if (childElement.Name.LocalName == ELEMENT_ITEMREF)
                    {
                        var spineItemRef = new SpineItemRef
                        {
                            IdRef      = childElement.Attribute(ATTRIBUTE_IDREF)?.Value,
                            Linear     = childElement.Attribute(ATTRIBUTE_LINEAR)?.Value,
                            Id         = childElement.Attribute(ATTRIBUTE_ID)?.Value,
                            Properties = childElement.Attribute(ATTRIBUTE_PROPERTIES)?.Value,
                        };
                        result.Items.Add(spineItemRef);
                    }
                }
            }
            return(result);
        }
Esempio n. 9
0
 public void Spine_GatewayStateChanged(Spine source, Spine.GatewayStates old_state)
 {
     if (GatewayStateChanged != null)
     {
         GatewayStateChanged(source, old_state);
     }
 }
		public WaitForSpineAnimationComplete (Spine.TrackEntry trackEntry) {
			#if PREUNITY_5_3
			Debug.LogWarning("Unity 5.3 or later is required for Spine Unity custom yield instructions to function correctly.");
			#endif

			SafeSubscribe(trackEntry);
		}
Esempio n. 11
0
 public void Spine_SpineStateChanged(Spine source, Spine.States old_state)
 {
     if (SpineStateChanged != null)
     {
         SpineStateChanged(source, old_state);
     }
 }
Esempio n. 12
0
 public void DeleteItem(EpubItem item)
 {
     System.Diagnostics.Trace.Assert(item.IsXhtmlPage);
     Manifest.Remove(item);
     AbsolutePathIndex.Remove(item.AbsolutePath);
     IdIndex.Remove(item.Id);
     Spine.Remove(item);
 }
Esempio n. 13
0
 void EndEvent(Spine.AnimationState state, int trackIndex )
 {
     //		ZuDebug.Log ("EndEvent name = " + state );
     //		if( PLAYER_ATK_ANIN == state.ToString() )
     //		{
     //			//SetIdle ();
     //		}
 }
Esempio n. 14
0
        public override double CalculateArea(out Vector centroid)
        {
            // Temp
            double length = Spine.Length;

            centroid = Spine.PointAtLength(length / 2);
            return(Spine.Length * Width);
        }
Esempio n. 15
0
 //void state_Event(Spine.AnimationState state, int trackIndex, Spine.Event e)
 //{
 //    if (e + "" == "zhongjian")
 //    {
 //        Debug.Log("zhongjian!");
 //        Instantiate(m_arrowArea, new Vector2(0, 0), Quaternion.Euler(0, 0, 0));
 //        return;
 //    }
 //    if (e + "" == "tankai" )
 //    {
 //        isCheckBlock = true;
 //        checkTime = 0.05f;
 //        //try
 //        //{
 //        //    m_hit = Physics2D.Linecast(this.transform.position, playerObj.transform.position, 1 << LayerMask.NameToLayer("Block"));
 //        //    if (m_hit)
 //        //    {
 //        //        Debug.Log("block my arrow");
 //        //        beenBlock();
 //        //    }
 //        //}
 //        //catch {
 //        //    // exception
 //        //}
 //    }
 //}
 void state_End(Spine.AnimationState state, int trackIndex)
 {
     if (state.GetCurrent(trackIndex) + "" == "animation") {
         Instantiate(m_arrowStand, new Vector2(4.2f , 4.7f), Quaternion.Euler(0, 0, 0));
         m_audioManager.archerkill();
         Destroy(this.gameObject);
     }
 }
Esempio n. 16
0
        public static Spine.Attachment GetAttachment(string attachmentPath, Spine.SkeletonData skeletonData)
        {
            var hierarchy = SpineAttachment.GetHierarchy(attachmentPath);
            if (hierarchy.name == "")
                return null;

            return skeletonData.FindSkin(hierarchy.skin).GetAttachment(skeletonData.FindSlotIndex(hierarchy.slot), hierarchy.name);
        }
Esempio n. 17
0
 void state_End(Spine.AnimationState state, int trackIndex)
 {
     if (state.GetCurrent(trackIndex) + "" == "zoom_out2")
     {
         bgAnimationScript.state.SetAnimation(5, "stay", false);
         GameObject.Find("EnemyCreator").GetComponent<EnemyManager>().isPause = false;
         m_TouchController.setTouchState("fight");
     }
 }
		void SafeSubscribe (Spine.TrackEntry trackEntry) {
			if (trackEntry == null) {
				// Break immediately if trackEntry is null.
				Debug.LogWarning("TrackEntry was null. Coroutine will continue immediately.");
				m_WasFired = true;
			} else {
				trackEntry.End += HandleEnd;
			}
		}
		void SafeSubscribe (Spine.TrackEntry trackEntry) {
			if (trackEntry == null) {
				// Break immediately if trackEntry is null.
				m_WasFired = true;
			} else {
				// Function normally.
				trackEntry.Complete += HandleComplete;
			}
		}
Esempio n. 20
0
 void state_End(Spine.AnimationState state, int trackIndex)
 {
     if (state.GetCurrent(trackIndex) + "" == "animation") {
         changeAniamtion = true;
     }
     if (state.GetCurrent(trackIndex) + "" == "animation3") {
         Destroy(this.gameObject);
     }
 }
        private static CapabilityStatement ExecuteApiCall(Spine providerGpConnectDetails, Organisation providerOrganisationDetails, Spine consumerGpConnectDetails, Organisation consumerOrganisationDetails)
        {
            var userGuid     = Guid.NewGuid().ToString();
            var tokenHandler = new JwtSecurityTokenHandler
            {
                SetDefaultTimesOnTokenCreation = false
            };

            var tokenIssuer     = "ldap.gov.uk";
            var tokenAudience   = providerGpConnectDetails.EndpointAddress;
            var tokenIssuedAt   = DateTimeOffset.Now;
            var tokenExpiration = DateTimeOffset.Now.AddMinutes(5);

            var tokenDescriptor = BuildSecurityTokenDescriptor(tokenIssuer, tokenAudience, userGuid, tokenIssuedAt, tokenExpiration);

            AddRequestingDeviceClaim(tokenDescriptor);
            AddRequestingOrganisationClaim(providerOrganisationDetails, tokenDescriptor);
            AddRequestingPractitionerClaim(tokenDescriptor, userGuid);

            var token       = AddTokenHeader(tokenHandler, tokenDescriptor);
            var tokenString = tokenHandler.WriteToken(token);

            var requestParameters = new RequestParameters
            {
                BearerToken        = tokenString,
                SspFrom            = "100000000001",
                SspTo              = providerGpConnectDetails.AsId,
                UseSSP             = false,
                SspHostname        = providerGpConnectDetails.SspHostname,
                ConsumerODSCode    = consumerOrganisationDetails.OdsCode,
                ProviderODSCode    = providerOrganisationDetails.OdsCode,
                InteractionId      = "urn:nhs:names:services:gpconnect:fhir:rest:read:metadata-1",
                SpineMessageTypeId = 2
            };

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/fhir+json"));
                client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {
                    NoCache = true
                };

                AddRequiredRequestHeaders(requestParameters, client);
                using var request = new HttpRequestMessage
                      {
                          Method     = HttpMethod.Get,
                          RequestUri = new Uri($"{AddSecureSpineProxy(providerGpConnectDetails.SspHostname, requestParameters)}/metadata")
                      };

                var response       = client.SendAsync(request).Result;
                var responseStream = response.Content.ReadAsStringAsync().Result;

                var result = JsonConvert.DeserializeObject <CapabilityStatement>(responseStream);
                return(result);
            }
        }
		void SafeSubscribe (Spine.TrackEntry trackEntry) {
			if (trackEntry == null) {
				// Break immediately if trackEntry is null.
				Debug.LogWarning("TrackEntry was null. Coroutine will continue immediately.");
				m_WasFired = true;
			} else {
				// Function normally.
				trackEntry.Complete += HandleComplete;
			}
		}
Esempio n. 23
0
        private Spine GenerateSpine()
        {
            Spine spine = new Spine()
            {
                Toc      = "ncx",
                ItemRefs = ItemRefList
            };

            return(spine);
        }
Esempio n. 24
0
	//SkeletonAnimation
	/*
	 *	Int Value:		0 sets ghostingEnabled to false, 1 sets ghostingEnabled to true
	 *	Float Value:	Values greater than 0 set the spawnRate equal the float value
	 *	String Value:	Pass RGBA hex color values in to set the color property.  IE:   "A0FF8BFF"
	 */
	void OnEvent (Spine.AnimationState state, int trackIndex, Spine.Event e) {
		if (e.Data.Name == "Ghosting") {
			ghostingEnabled = e.Int > 0;
			if (e.Float > 0)
				spawnRate = e.Float;
			if (e.String != null) {
				this.color = HexToColor(e.String);
			}
		}
	}
Esempio n. 25
0
        private async Task PopulateSearchResults(Spine providerGpConnectDetails, Organisation providerOrganisationDetails,
                                                 Spine consumerGpConnectDetails, Organisation consumerOrganisationDetails)
        {
            var requestParameters = _tokenService.ConstructRequestParameters(
                _contextAccessor.HttpContext.GetAbsoluteUri(), providerGpConnectDetails, providerOrganisationDetails,
                consumerGpConnectDetails, consumerOrganisationDetails, (int)SpineMessageTypes.GpConnectSearchFreeSlots);
            var startDate = Convert.ToDateTime(SelectedDateRange.Split(":")[0]);
            var endDate   = Convert.ToDateTime(SelectedDateRange.Split(":")[1]);

            if (requestParameters != null)
            {
                //Step 3 - CALL PROVIDER METADATA ENDPOINT
                //Get capability statement
                var capabilityStatement = await _queryExecutionService.ExecuteFhirCapabilityStatement(requestParameters, providerGpConnectDetails.ssp_hostname);

                CapabilityStatementOk = (capabilityStatement.Issue?.Count == 0 || capabilityStatement.Issue == null);

                if (CapabilityStatementOk)
                {
                    var searchResults = await _queryExecutionService.ExecuteFreeSlotSearch(requestParameters, startDate, endDate, providerGpConnectDetails.ssp_hostname);

                    SlotSearchOk = searchResults?.Issue == null;

                    if (SlotSearchOk)
                    {
                        SearchResults = new List <List <SlotEntrySimple> >();
                        var locationGrouping = searchResults?.SlotEntrySimple.GroupBy(l => l.LocationName)
                                               .Select(grp => grp.ToList()).ToList();
                        SearchResultsCount = searchResults?.SlotEntrySimple.Count;

                        if (locationGrouping != null)
                        {
                            SearchResults.AddRange(locationGrouping);
                        }
                    }
                    else
                    {
                        ProviderErrorDisplay     = searchResults.Issue.FirstOrDefault()?.Details.Coding.FirstOrDefault()?.Display;
                        ProviderErrorCode        = searchResults.Issue.FirstOrDefault()?.Details.Coding.FirstOrDefault()?.Code;
                        ProviderErrorDiagnostics = StringExtensions.Coalesce(searchResults.Issue.FirstOrDefault()?.Diagnostics, searchResults.Issue.FirstOrDefault()?.Details.Text);
                        _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHSENDINGMESSAGETOPROVIDERSYSTEMTEXT, ProviderErrorDisplay, ProviderErrorCode));
                    }
                }
                else
                {
                    if (capabilityStatement?.Issue != null)
                    {
                        ProviderErrorDisplay     = capabilityStatement?.Issue?.FirstOrDefault()?.Details.Coding.FirstOrDefault()?.Display;
                        ProviderErrorCode        = capabilityStatement?.Issue?.FirstOrDefault()?.Details.Coding.FirstOrDefault()?.Code;
                        ProviderErrorDiagnostics = StringExtensions.Coalesce(capabilityStatement?.Issue?.FirstOrDefault()?.Diagnostics, capabilityStatement?.Issue.FirstOrDefault()?.Details.Text);
                        _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHSENDINGMESSAGETOPROVIDERSYSTEMTEXT, ProviderErrorDisplay, ProviderErrorCode));
                    }
                }
            }
        }
Esempio n. 26
0
 private Spine LoadAdditionalDependencies(Spine spine)
 {
     if (spine != null)
     {
         spine.SpineFqdn   = _spineOptionsDelegate.CurrentValue.SpineFqdn;
         spine.SspFrom     = _spineOptionsDelegate.CurrentValue.AsId;
         spine.SspHostname = _spineOptionsDelegate.CurrentValue.SspHostname;
         spine.UseSSP      = _spineOptionsDelegate.CurrentValue.UseSSP;
     }
     return(spine);
 }
Esempio n. 27
0
		void Subscribe (Spine.AnimationState state, Spine.EventData eventDataReference, bool unsubscribe) {
			if (state == null || eventDataReference == null) {
				m_WasFired = true;
			} else {
				m_AnimationState = state;
				m_TargetEvent = eventDataReference;
				state.Event += HandleAnimationStateEvent;

				m_unsubscribeAfterFiring = unsubscribe;
			}
		}
Esempio n. 28
0
        public static SpineItem Previous(this Spine spine, SpineItem item)
        {
            var index = spine.IndexOf(item);

            if (index - 1 > 0)
            {
                return(spine.ElementAt(index - 1));
            }

            return(null);
        }
Esempio n. 29
0
        public static SpineItem Next(this Spine spine, SpineItem item)
        {
            var index = spine.IndexOf(item);

            if (index + 1 < spine.Count)
            {
                return(spine.ElementAt(index + 1));
            }

            return(null);
        }
Esempio n. 30
0
        public void SpineTest()
        {
            OPF   target   = new OPF(); // TODO: Initialize to an appropriate value
            Spine expected = null;      // TODO: Initialize to an appropriate value
            Spine actual;

            target.Spine = expected;
            actual       = target.Spine;
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }
Esempio n. 31
0
 void state_Event(Spine.AnimationState state, int trackIndex, Spine.Event e)
 {
     if (e + "" == "launch")
     {
         Vector2 m_position = m_transform.position;
         if (m_position.y <= 0) {
             m_position.y += 0.8f;
         }
         Instantiate(stone, m_position, m_transform.rotation);
     }
 }
Esempio n. 32
0
 void state_End(Spine.AnimationState state, int trackIndex)
 {
     if (state.GetCurrent(trackIndex) + "" == "zoom_out2")
     {
         bgAnimationScript.state.SetAnimation(5, "stay", false);
     }
     if (state.GetCurrent(trackIndex) + "" == "stay")
     {
         Application.LoadLevel("fighting");
     }
 }
Esempio n. 33
0
		void SubscribeByName (Spine.AnimationState state, string eventName, bool unsubscribe) {
			if (state == null || string.IsNullOrEmpty(eventName)) {
				m_WasFired = true;
			} else {
				m_AnimationState = state;
				m_EventName = eventName;
				state.Event += HandleAnimationStateEventByName;

				m_unsubscribeAfterFiring = unsubscribe;
			}
		}
 public void Load(Spine.AtlasPage page, string path)
 {
     Debug.Log("load page:" + page.name);
     var mat = new Material(Shader.Find("Spine/Skeleton"));
     int right = path.LastIndexOf('.');
     path = path.Substring(0, right);
     string file = System.IO.Path.Combine(basepath, path);
     Debug.Log("Load pic:" + file + "," + path);
     mat.mainTexture = Resources.Load(file) as Texture2D;
     page.rendererObject = mat;
     page.width = mat.mainTexture.width;
     page.height = mat.mainTexture.height;
 }
Esempio n. 35
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Package p = new Package();
            p.unique_identifier = "boo";
            p.version = "1";
            Manifest manifest = new Manifest();
            manifest.AddItem(new Item("id1",".\\test.html","application/xhtml+xml", null));
            manifest.AddItem(new Item("id2", ".\\test.html", "application/xhtml+xml", null));
            manifest.AddItem(new Item("toc", txtNcxFile.Text, "application/x-dtbncx+xml", null));
            p.myManifest = manifest;

            Metadata metadata = new Metadata();
            p.myMetadata = metadata;
            metadata.title = "My title";

            Spine s = new Spine("ncx");
            s.AddItemRef(new ItemRef("id11","yes"));
            s.AddItemRef(new ItemRef("id12","yes"));
            p.mySpine = s;

            Guide g = new Guide();
            g.AddReference(new Reference("toc", "title",txtNcxFile.Text));
            g.AddReference(new Reference("toc1", "title2", ".//ref.html"));

            p.myGuide = g;

            TextWriter tw = serialise(p);
            txtPackage.Text = tw.ToString();

            tw.Close();

            NavigationCentereXtended ncx = new NavigationCentereXtended();
            ncx.myDocAuthor = new DocAuthor("John h author");
            ncx.myDocTitle = new DocTitle("My Book..");

            ncx.myNavList.AddNavTarget(new NavTarget(new NavLabel("Nav Label 1"), new Content("content.html")));
            ncx.myNavList.AddNavTarget(new NavTarget(new NavLabel("Nav Label 2"), new Content("content2.html")));
            ncx.myNavMap.AddNavPoint(new NavPoint(1, "id1", "point class", new NavLabel("Nav Label 1"), new Content("srctext")));
            ncx.myNavMap.AddNavPoint(new NavPoint(1, "id1", "point class2 ", new NavLabel("Nav Label 2"), new Content("srctext")));

            ncx.myNcxHead = new NcxHead();
            ncx.myNcxHead.myMeta = new Meta("content", "name");

            ncx.myPageList.AddPageTarget(new PageTarget("id1", "type", "value", new NavLabel("txtLabel"), new Content("src1")));
            ncx.myPageList.AddPageTarget(new PageTarget("id2", "type", "value", new NavLabel("txtLabel2"), new Content("src2")));

            TextWriter tw2 = serialise(ncx);
            txtNcx.Text = tw2.ToString();
            tw2.Close();
        }
Esempio n. 36
0
 private void OnEvent(Spine.AnimationState state, int trackIndex, Spine.Event e)
 {
     if (e.Data.name == "1st_syuriken" || e.Data.name == "2nd_syuriken") {
         GameObject dart = PoolManager.instance.GetPoolByType(AttackObjectType.Dart).Instantiate();
         AttackObjectController aoCtrl = dart.GetComponent<AttackObjectController>();
         dart.transform.parent  = zc.transform.parent;
         dart.transform.position = zc.transform.position + Vector3.up * 0.9f;
         dart.GetComponent<Collider2D>().enabled = true;
         dart.GetComponent<Renderer>().material.color = Color.white;
         aoCtrl.direction = (sbyte)zc.character.xDirection;
         aoCtrl.release(zc, zc.character.m_skills.getBySkillName("atk_far"));
         aoCtrl.StartFlyForward();
     }
 }
Esempio n. 37
0
 void state_End(Spine.AnimationState state, int trackIndex)
 {
     if (state.GetCurrent(trackIndex) + "" == "stay") {
         m_a.state.SetAnimation(1, "zoom_in", false);
     }
     if (state.GetCurrent(trackIndex) + "" == "zoom_in")
     {
         m_a.state.SetAnimation(2, "zoom_out", false);
     }
     if (state.GetCurrent(trackIndex) + "" == "zoom_out")
     {
         m_a.state.SetAnimation(3, "stay", false);
     }
 }
Esempio n. 38
0
        public List <StlTriangle> GetStlTrianglesD(Spine spine)
        {
            List <StlTriangle> triangles = new List <StlTriangle>();

            foreach (var t in TrianglesList)
            {
                if (spine.D.Contains(t.ElementAt(0)) && spine.D.Contains(t.ElementAt(1)) && spine.D.Contains(t.ElementAt(2)))
                {
                    triangles.Add(new StlTriangle(new StlNormal(), Vertices[t.ElementAt(0)],
                                                  Vertices[t.ElementAt(1)], Vertices[t.ElementAt(2)]));
                }
            }
            return(triangles);
        }
        private async Task PopulateSearchResults(Spine providerSpineDetails, Organisation providerOrganisationDetails, Spine consumerEnablement, Organisation consumerOrganisationDetails, string consumerOrganisationType = "")
        {
            var requestParameters = _tokenService.ConstructRequestParameters(
                _contextAccessor.HttpContext.GetAbsoluteUri(), providerSpineDetails, providerOrganisationDetails,
                consumerEnablement, consumerOrganisationDetails, (int)SpineMessageTypes.GpConnectSearchFreeSlots, consumerOrganisationType);
            var startDate = Convert.ToDateTime(SelectedDateRange.Split(":")[0]);
            var endDate   = Convert.ToDateTime(SelectedDateRange.Split(":")[1]);

            if (requestParameters != null)
            {
                var capabilityStatement = await _queryExecutionService.ExecuteFhirCapabilityStatement(requestParameters, providerSpineDetails.SspHostname);

                CapabilityStatementOk = capabilityStatement.CapabilityStatementNoIssues;

                if (CapabilityStatementOk)
                {
                    var searchResults = await _queryExecutionService.ExecuteFreeSlotSearch(requestParameters, startDate, endDate, providerSpineDetails.SspHostname, User.GetClaimValue("UserId").StringToInteger());

                    SlotSearchOk = searchResults.SlotSearchNoIssues;

                    if (SlotSearchOk)
                    {
                        SearchExportId    = searchResults.SearchExportId;
                        SearchResults     = new List <List <SlotEntrySimple> >();
                        SearchResultsPast = new List <List <SlotEntrySimple> >();

                        SearchResultsTotalCount   = searchResults.SlotCount;
                        SearchResultsCurrentCount = searchResults.CurrentSlotCount;
                        SearchResultsPastCount    = searchResults.PastSlotCount;

                        SearchResults.AddRange(searchResults.CurrentSlotEntriesByLocationGrouping);
                        SearchResultsPast.AddRange(searchResults.PastSlotEntriesByLocationGrouping);
                    }
                    else
                    {
                        ProviderErrorDisplay     = searchResults.ProviderError;
                        ProviderErrorCode        = searchResults.ProviderErrorCode;
                        ProviderErrorDiagnostics = searchResults.ProviderErrorDiagnostics;
                        _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHSENDINGMESSAGETOPROVIDERSYSTEMTEXT, ProviderErrorDisplay, ProviderErrorCode));
                    }
                }
                else
                {
                    ProviderErrorDisplay     = capabilityStatement.ProviderError;
                    ProviderErrorCode        = capabilityStatement.ProviderErrorCode;
                    ProviderErrorDiagnostics = capabilityStatement.ProviderErrorDiagnostics;
                    _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHSENDINGMESSAGETOPROVIDERSYSTEMTEXT, ProviderErrorDisplay, ProviderErrorCode));
                }
            }
        }
Esempio n. 40
0
        private void AddSpineElement(string id)
        {
            XElement Spine = GetXmlElement("spine");

            if (Spine == null)
            {
                Spine = new XElement(ns + "spine", new XAttribute("toc", GetNCXid()));
            }

            Spine.Add(
                new XElement(ns + "itemref",
                             new XAttribute("idref", id)));

            ReplaceSpine(Spine);
        }
Esempio n. 41
0
        private async void SendChapter(Spine chapter, int position = 0, bool lastPage = false, string marker = "")
        {
            currentChapter       = _ebook.Spines.IndexOf(chapter);
            _bookshelfBook.Spine = currentChapter;

            var bookLoader = EbookFormatHelper.GetBookLoader(_bookshelfBook.Format);

            var html = await bookLoader.GetChapter(_ebook, chapter);

            var htmlResult = await bookLoader.PrepareHTML(html, _ebook, _ebook.Files.Where(o => o.Id == chapter.Idref).First());

            Device.BeginInvokeOnMainThread(() => {
                this.SendHtml(htmlResult, position, lastPage, marker);
            });
        }
Esempio n. 42
0
	void AnimationComplete( Spine.AnimationState animationState, int trackIndex, int loopCount ){
		switch( animationState.ToString( ) ){
		case "Idle" :
			runningAnimation = AnimationList.Idle;
			break;
		case "Walking":
			runningAnimation = AnimationList.Walking;
			break;
		case "Running":
			runningAnimation = AnimationList.Running;
			break;
		case "Activate":
			runningAnimation = AnimationList.Activate;
			break;
		}
	}
Esempio n. 43
0
        public RequestParameters ConstructRequestParameters(Uri requestUri, Spine providerSpineDetails, Organisation providerOrganisationDetails, Spine consumerEnablement, Organisation consumerOrganisationDetails, int spineMessageTypeId, string consumerOrganisationType = "")
        {
            try
            {
                var spineMessageType = _configurationService.GetSpineMessageTypes().FirstOrDefault(x => x.SpineMessageTypeId == spineMessageTypeId);

                var userGuid     = Guid.NewGuid().ToString();
                var tokenHandler = new JwtSecurityTokenHandler
                {
                    SetDefaultTimesOnTokenCreation = false
                };

                var tokenIssuer     = _spineOptionsDelegate.CurrentValue.SpineFqdn;
                var tokenAudience   = providerSpineDetails.EndpointAddress;
                var tokenIssuedAt   = DateTimeOffset.Now;
                var tokenExpiration = DateTimeOffset.Now.AddMinutes(5);

                var tokenDescriptor = BuildSecurityTokenDescriptor(tokenIssuer, tokenAudience, userGuid, tokenIssuedAt, tokenExpiration);
                AddRequestingDeviceClaim(requestUri, tokenDescriptor);
                AddRequestingOrganisationClaim(providerOrganisationDetails, tokenDescriptor);
                AddRequestingPractitionerClaim(requestUri, tokenDescriptor, userGuid);

                var token       = AddTokenHeader(tokenHandler, tokenDescriptor);
                var tokenString = tokenHandler.WriteToken(token);

                var requestParameters = new RequestParameters
                {
                    BearerToken        = tokenString,
                    SspFrom            = _spineOptionsDelegate.CurrentValue.AsId,
                    SspTo              = providerSpineDetails.AsId,
                    UseSSP             = _spineOptionsDelegate.CurrentValue.UseSSP,
                    EndpointAddress    = providerSpineDetails.EndpointAddress,
                    ConsumerODSCode    = consumerOrganisationDetails?.OdsCode,
                    ProviderODSCode    = providerOrganisationDetails.OdsCode,
                    InteractionId      = spineMessageType?.InteractionId,
                    SpineMessageTypeId = spineMessageTypeId,
                    GPConnectConsumerOrganisationType = consumerOrganisationType,
                    SspHostname = _spineOptionsDelegate.CurrentValue.SspHostname
                };
                return(requestParameters);
            }
            catch (Exception exc)
            {
                _logger.LogError(exc, "An error has occurred in trying to build the JWT security token");
                throw;
            }
        }
Esempio n. 44
0
        public SpineClient()
        {
            Spine = new Spine();
            Spine.SpineStateChanged   += Spine_SpineStateChanged;
            Spine.GatewayStateChanged += Spine_GatewayStateChanged;
            Spine.DeviceAdded         += Spine_DeviceAdded;
            Spine.DeviceRemoved       += Spine_DeviceRemoved;
            Spine.SpineSignal         += Spine_SpineSignal;


            Devices = new Dictionary <short, DeviceState>();
            if (!RemotingServices.IsTransparentProxy(Spine))
            {
                throw new Exception(
                          "El modulo Spine esta configurado de forma inaporpiada, debe ser accesible por Remoting.");
            }
        }
Esempio n. 45
0
        public RequestParameters ConstructRequestParameters(Uri requestUri, Spine providerSpineMessage, Organisation providerOrganisationDetails, Spine consumerSpineMessage, Organisation consumerOrganisationDetails, int spineMessageTypeId)
        {
            try
            {
                var spineMessageType = _configurationService.GetSpineMessageTypes().FirstOrDefault(x => x.SpineMessageTypeId == spineMessageTypeId);

                var userGuid     = Guid.NewGuid().ToString();
                var tokenHandler = new JwtSecurityTokenHandler
                {
                    SetDefaultTimesOnTokenCreation = false
                };

                var tokenIssuer     = _configuration.GetSection("Spine:spine_fqdn").Value;
                var tokenAudience   = providerSpineMessage.ssp_hostname;
                var tokenIssuedAt   = DateTimeOffset.Now;
                var tokenExpiration = DateTimeOffset.Now.AddMinutes(5);

                var tokenDescriptor = BuildSecurityTokenDescriptor(tokenIssuer, tokenAudience, userGuid, tokenIssuedAt, tokenExpiration);
                AddRequestingDeviceClaim(requestUri, tokenDescriptor);
                AddRequestingOrganisationClaim(providerOrganisationDetails, tokenDescriptor);
                AddRequestingPractitionerClaim(requestUri, tokenDescriptor, userGuid);

                var token       = AddTokenHeader(tokenHandler, tokenDescriptor);
                var tokenString = tokenHandler.WriteToken(token);

                var requestParameters = new RequestParameters
                {
                    BearerToken        = tokenString,
                    SspFrom            = _configuration.GetSection("Spine:uniqueIdentifier").Value,
                    SspTo              = providerSpineMessage.asid,
                    UseSSP             = bool.Parse(_configuration.GetSection("Spine:use_ssp").Value),
                    SspHostname        = _configuration.GetSection("Spine:nhsMHSEndPoint").Value,
                    ConsumerODSCode    = consumerOrganisationDetails.ODSCode,
                    ProviderODSCode    = providerOrganisationDetails.ODSCode,
                    InteractionId      = spineMessageType?.InteractionId,
                    SpineMessageTypeId = spineMessageTypeId
                };
                return(requestParameters);
            }
            catch (Exception exc)
            {
                _logger.LogError(exc, "An error has occurred in trying to build the JWT security token");
                throw;
            }
        }
 /// <summary>
 /// Creates a spine out of all resources in the resources. The generated spine
 /// consists of all XHTML pages in order of their href.
 /// </summary>
 /// <param name="resources"></param>
 private static Spine generateSpineFromResources(Resources resources)
 {
     Spine result = new Spine();
     List<String> resourceHrefs = new List<String>(resources.getAllHrefs());
     foreach (String resourceHref in resourceHrefs)
     {
         Resource resource = resources.getByHref(resourceHref);
         if (resource.getMediaType() == MediatypeService.NCX)
         {
             result.setTocResource(resource);
         }
         else if (resource.getMediaType() == MediatypeService.XHTML)
         {
             result.addSpineReference(new SpineReference(resource));
         }
     }
     return result;
 }
Esempio n. 47
0
        // opfdata.opf
        private static MemoryStream GetOpfData(OpfPackage package)
        {
            var opfDoc = new XDocument();

            opfDoc.Declaration = XmlDeclaration;
            var xe = OpfPackage.CreateXElement(package);

            xe.Add(MetaData.CreateXElement(package.MetaData));
            xe.Add(Manifest.CreateXElement(package.Manifest));
            xe.Add(Spine.CreateXElement(package.Spine));
            xe.Add(Guide.CreateXElement(package.Guide));
            opfDoc.Add(xe);
            var ms = new MemoryStream();

            opfDoc.Save(ms);
            ms.Position = 0;
            return(ms);
        }
        /// <summary>
        /// Reads the document's spine, containing all sections in reading order.
        /// </summary>
        /// <param>book</param>
        /// <param>resourcesById</param>
        /// <param name="packageDocument"></param>
        /// <param name="epubReader"></param>
        /// <param name="resources"></param>
        /// <param name="idMapping"></param>
        private static Spine readSpine(XElement packageDocument, EpubReader epubReader, Resources resources, Dictionary<String, String> idMapping)
        {
            XElement spineElement = DOMUtil.getFirstElementByTagNameNS(packageDocument, NAMESPACE_OPF, OPFTags.spine);
            if (spineElement == null)
            {
                //log.error("Element " + OPFTags.spine + " not found in package document, generating one automatically");
                return generateSpineFromResources(resources);
            }
            Spine result = new Spine();
            result.setTocResource(findTableOfContentsResource(spineElement, resources));
            var spineNodes = packageDocument.Elements(NAMESPACE_OPF + OPFTags.itemref).Elements<XElement>();
            IEnumerator spineNode = spineNodes.GetEnumerator();
            List<SpineReference> spineReferences = new List<SpineReference>();
            while (spineNode.MoveNext())
            {
                XElement spineItem = (XElement)spineNode.Current;
                String itemref = DOMUtil.getAttribute(spineItem, OPFAttributes.idref);
                if (StringUtil.isBlank(itemref))
                {
                    //log.error("itemref with missing or empty idref"); // XXX
                    continue;
                }
                String id = idMapping[itemref];
                if (id == null)
                {
                    id = itemref;
                }
                Resource resource = resources.getByIdOrHref(id);
                if (resource == null)
                {
                    //log.error("resource with id \'" + id + "\' not found");
                    continue;
                }

                SpineReference spineReference = new SpineReference(resource);
                if (OPFValues.no.Equals(DOMUtil.getAttribute(spineItem, OPFAttributes.linear)))
                {
                    spineReference.setLinear(false);
                }
                spineReferences.Add(spineReference);
            }
            result.setSpineReferences(spineReferences);
            return result;
        }
Esempio n. 49
0
 public bool Connect()
 {
     try
     {
         Spine.Start();
         Spine.WaitForRunning();
         DevicesList = Spine.GetDevices();
         foreach (var device_id in DevicesList)
         {
             var ds = Spine.LoadDeviceState(device_id);
             Devices.Add(device_id, ds);
         }
         return(true);
     }
     catch (Exception e)
     {
         T.EXCEPTION(e);
         return(false);
     }
 }
Esempio n. 50
0
		void SubscribeByName (Spine.AnimationState state, string eventName, bool unsubscribe) {
			#if PREUNITY_5_3
			Debug.LogWarning("Unity 5.3 or later is required for Spine Unity custom yield instructions to function correctly.");
			#endif

			if (state == null) {
				Debug.LogWarning("AnimationState argument was null. Coroutine will continue immediately.");
				m_WasFired = true;
				return;
			} else if (string.IsNullOrEmpty(eventName)) {
				Debug.LogWarning("eventName argument was null. Coroutine will continue immediately.");
				m_WasFired = true;
				return;
			}
		
			m_AnimationState = state;
			m_EventName = eventName;
			state.Event += HandleAnimationStateEventByName;

			m_unsubscribeAfterFiring = unsubscribe;
		}
Esempio n. 51
0
    void OnWeaponThrown(Spine.AnimationState state, int trackIndex, Spine.Event e)
    {
        if (e.String != "throw")
            return;
        skeletonAnimation.state.Event -= OnWeaponThrown;

        float koef = BoostTime() / throwBoostTime;
        if (koef > 1)
            koef = 1;
        float xVel = minThrowVelocity + (throwVelocityAdd * koef);

        Vector3 axePosition = new Vector3(skeletonAnimation.transform.position.x + weaponPlace.worldX, skeletonAnimation.transform.position.y + weaponPlace.worldY);

        Rigidbody2D axeIstance = Instantiate(axe, axePosition, Quaternion.Euler(new Vector3(0, 0, 0))) as Rigidbody2D;

        float ang = InputManager.Instance.FireAngle * Mathf.Deg2Rad;

        axeIstance.velocity = new Vector2(Mathf.Cos(ang) * xVel, Mathf.Sin(ang) * xVel);

        axeIstance.AddTorque(-400);
    }
Esempio n. 52
0
		void Subscribe (Spine.AnimationState state, Spine.EventData eventDataReference, bool unsubscribe) {
			#if PREUNITY_5_3
			Debug.LogWarning("Unity 5.3 or later is required for Spine Unity custom yield instructions to function correctly.");
			#endif

			if (state == null) {
				Debug.LogWarning("AnimationState argument was null. Coroutine will continue immediately.");
				m_WasFired = true;
				return;
			} else if (eventDataReference == null) {
				Debug.LogWarning("eventDataReference argument was null. Coroutine will continue immediately.");
				m_WasFired = true;
				return;
			}

			m_AnimationState = state;
			m_TargetEvent = eventDataReference;
			state.Event += HandleAnimationStateEvent;

			m_unsubscribeAfterFiring = unsubscribe;

		}
Esempio n. 53
0
        private Spine CreateSpine()
        {
            var spine = new Spine
            {
                Itemref = new List <Itemref>(_session.GeneratedFiles.Count),
                Toc     = "ncx"
            };

            spine.Itemref.Add(new Itemref
            {
                Idref = "nav"
            });

            foreach (var file in _session.GeneratedFiles)
            {
                spine.Itemref.Add(new Itemref
                {
                    Idref = file
                });
            }
            return(spine);
        }
Esempio n. 54
0
    // Update is called once per frame
    void Update()
    {
        c  = new Vector2(Head.gameObject.transform.position.x, Head.gameObject.transform.position.z);
        rv = new Vector2(RK.transform.position.x, RK.transform.position.z);
        lv = new Vector2(LK.transform.position.x, LK.transform.position.z);

        dist = Vector3.Distance(rv, lv) + .3f;
        if ((state == states.standing) && (dist < Vector2.Distance(rv, c) && dist < Vector2.Distance(lv, c)))
        {
            state = states.falling;
        }
        else if ((state == states.falling || state == states.bounced) && (dist >= Vector2.Distance(rv, c) || dist >= Vector2.Distance(lv, c)))
        {
            state = states.standing;
        }
        if ((state == states.standing) && (RK.position.y - ground.position.y > 1.25f && LK.position.y - ground.position.y > 1.25f))
        {
            state = states.falling;
        }
        else if ((state == states.falling) && (RK.position.y - ground.position.y <= 1.25f && LK.position.y - ground.position.y <= 1.25f))
        {
            state = states.standing;
        }


        if (state == states.fallen)
        {
            Head.AddForce(0f, 27.5f, 0f, ForceMode.VelocityChange);
            Spine.AddForce(0f, 27.5f, 0f, ForceMode.VelocityChange);
            state = states.bounced;
        }
        else if (state == states.standing)
        {
            Head.AddForce(0f, 2.25f, 0f, ForceMode.VelocityChange);
        }

        Debug.Log(state);
    }
Esempio n. 55
0
        public Skeleton ToNetworkModel()
        {
            Skeleton s = new Skeleton();

            s.UserId        = UserId;
            s.BodyLocation  = BodyLocation.ToCoord();
            s.BodyRotation  = BodyRotation.ToCoord();
            s.Head          = Head.ToCoord();
            s.Neck          = Neck.ToCoord();
            s.Spine         = Spine.ToCoord();
            s.Hips          = Hips.ToCoord();
            s.LeftShoulder  = LeftShoulder.ToCoord();
            s.LeftArm       = LeftArm.ToCoord();
            s.LeftHand      = LeftHand.ToCoord();
            s.RightShoulder = RightShoulder.ToCoord();
            s.RightArm      = RightArm.ToCoord();
            s.RightHand     = RightHand.ToCoord();
            s.LeftKnee      = LeftKnee.ToCoord();
            s.LeftFoot      = LeftFoot.ToCoord();
            s.RightKnee     = RightKnee.ToCoord();
            s.RightFoot     = RightFoot.ToCoord();
            return(s);
        }
Esempio n. 56
0
 // call when Spine animation START
 void AnimationStartListener(Spine.AnimationState state, int trackIndex)
 {
     // DEBUG animation name
     debug_AniName.text = state.GetCurrent(0).ToString();
     drawTimelineHeight = (drawTimelineHeight == 10) ? 1:10;
     switch (state.GetCurrent(0).ToString()) {
     case "jump" :
         animTimelineColor = Color.green;
         break;
     case "fall" :
         animTimelineColor = Color.red;
         break;
     case "forward" :
         animTimelineColor = Color.blue;
         break;
     case "dashBackward" :
         animTimelineColor = Color.black;
         break;
     default :
         animTimelineColor = Color.white;
         break;
     }
 }
Esempio n. 57
0
 public bool Connect()
 {
     try
     {
         Spine = (ISpineInstance)Activator.GetObject(typeof(ISpineInstance), ServerUri);
         if (!RemotingServices.IsTransparentProxy(Spine))
         {
             throw new Exception(
                       "El modulo Spine esta configurado de forma inaporpiada, debe ser accesible por Remoting.");
         }
         Spine.Start();
         Spine.WaitForRunning();
         DevicesList = Spine.GetDevices();
         Spine.AttachClient(Sink, Description);
         return(true);
     }
     catch
     {
         // STrace.Exception(GetType().FullName,e);
         Spine = null;
         return(false);
     }
 }
Esempio n. 58
0
 /// <summary>
 /// Raises the jump complete event.
 /// </summary>
 /// <param name="state">State.</param>
 /// <param name="trackIndex">Track index.</param>
 /// <param name="loopcount">Loopcount.</param>
 protected virtual void OnJumpComplete(Spine.AnimationState state, int trackIndex, int loopcount)
 {
     if (isGrounded) {
     }
     spineState.Complete -= OnJumpComplete;
 }
Esempio n. 59
0
 get => new Position(Spine, SpinePosition);
Esempio n. 60
0
            public void Solve(VirtualBone rootBone, Spine spine, Leg leftLeg, Leg rightLeg, Arm leftArm, Arm rightArm, int supportLegIndex, out Vector3 leftFootPosition, out Vector3 rightFootPosition, out Quaternion leftFootRotation, out Quaternion rightFootRotation, out float leftFootOffset, out float rightFootOffset, out float leftHeelOffset, out float rightHeelOffset)
            {
                if (weight <= 0f)
                {
                    leftFootPosition  = Vector3.zero;
                    rightFootPosition = Vector3.zero;
                    leftFootRotation  = Quaternion.identity;
                    rightFootRotation = Quaternion.identity;
                    leftFootOffset    = 0f;
                    rightFootOffset   = 0f;
                    leftHeelOffset    = 0f;
                    rightHeelOffset   = 0f;
                    return;
                }

                Vector3 rootUp = rootBone.solverRotation * Vector3.up;

                Vector3 leftThighPosition  = spine.pelvis.solverPosition + spine.pelvis.solverRotation * leftLeg.thighRelativeToPelvis;
                Vector3 rightThighPosition = spine.pelvis.solverPosition + spine.pelvis.solverRotation * rightLeg.thighRelativeToPelvis;

                footsteps[0].characterSpaceOffset = footDistance * Vector3.left;
                footsteps[1].characterSpaceOffset = footDistance * Vector3.right;

                Vector3 forward  = spine.faceDirection;
                Vector3 forwardY = V3Tools.ExtractVertical(forward, rootUp, 1f);

                forward -= forwardY;
                Quaternion forwardRotation = Quaternion.LookRotation(forward, rootUp);

                if (spine.rootHeadingOffset != 0f)
                {
                    forwardRotation = Quaternion.AngleAxis(spine.rootHeadingOffset, rootUp) * forwardRotation;
                }

                //centerOfMass = Vector3.Lerp(spine.pelvis.solverPosition, spine.head.solverPosition, 0.25f) + rootBone.solverRotation * offset;

                float pelvisMass = 1f;
                float headMass   = 1f;
                float armMass    = 0.2f;
                float totalMass  = pelvisMass + headMass + 2f * armMass;

                centerOfMass  = Vector3.zero;
                centerOfMass += spine.pelvis.solverPosition * pelvisMass;
                centerOfMass += spine.head.solverPosition * headMass;
                centerOfMass += leftArm.position * armMass;
                centerOfMass += rightArm.position * armMass;
                centerOfMass /= totalMass;

                centerOfMass += rootBone.solverRotation * offset;

                comVelocity     = Time.deltaTime > 0f? (centerOfMass - lastComPosition) / Time.deltaTime: Vector3.zero;
                lastComPosition = centerOfMass;
                comVelocity     = Vector3.ClampMagnitude(comVelocity, maxVelocity) * velocityFactor;
                Vector3 centerOfMassV = centerOfMass + comVelocity;

                Vector3 pelvisPositionGroundLevel = V3Tools.PointToPlane(spine.pelvis.solverPosition, rootBone.solverPosition, rootUp);
                Vector3 centerOfMassVGroundLevel  = V3Tools.PointToPlane(centerOfMassV, rootBone.solverPosition, rootUp);

                Vector3 centerOfPressure = Vector3.Lerp(footsteps[0].position, footsteps[1].position, 0.5f);

                Vector3 comDir   = centerOfMassV - centerOfPressure;
                float   comAngle = Vector3.Angle(comDir, rootBone.solverRotation * Vector3.up) * comAngleMlp;

                // Set support leg
                for (int i = 0; i < footsteps.Length; i++)
                {
                    footsteps[i].isSupportLeg = supportLegIndex == i;
                }

                // Update stepTo while stepping
                for (int i = 0; i < footsteps.Length; i++)
                {
                    if (footsteps[i].isStepping)
                    {
                        Vector3 stepTo = centerOfMassVGroundLevel + rootBone.solverRotation * footsteps[i].characterSpaceOffset;

                        if (!StepBlocked(footsteps[i].stepFrom, stepTo, rootBone.solverPosition))
                        {
                            footsteps[i].UpdateStepping(stepTo, forwardRotation, 10f);
                        }
                    }
                    else
                    {
                        footsteps[i].UpdateStanding(forwardRotation, relaxLegTwistMinAngle, relaxLegTwistSpeed);
                    }
                }

                // Triggering new footsteps
                if (CanStep())
                {
                    int   stepLegIndex = -1;
                    float bestValue    = -Mathf.Infinity;

                    for (int i = 0; i < footsteps.Length; i++)
                    {
                        if (!footsteps[i].isStepping)
                        {
                            Vector3 stepTo = centerOfMassVGroundLevel + rootBone.solverRotation * footsteps[i].characterSpaceOffset;

                            float   legLength = i == 0? leftLeg.mag: rightLeg.mag;
                            Vector3 thighPos  = i == 0? leftThighPosition: rightThighPosition;

                            float thighDistance = Vector3.Distance(footsteps[i].position, thighPos);

                            bool lengthStep = false;
                            if (thighDistance >= legLength * maxLegStretch)                              // * 0.95f) {
                            {
                                stepTo     = pelvisPositionGroundLevel + rootBone.solverRotation * footsteps[i].characterSpaceOffset;
                                lengthStep = true;
                            }

                            bool collision = false;
                            for (int n = 0; n < footsteps.Length; n++)
                            {
                                if (n != i && !lengthStep)
                                {
                                    if (Vector3.Distance(footsteps[i].position, footsteps[n].position) < 0.25f && (footsteps[i].position - stepTo).sqrMagnitude < (footsteps[n].position - stepTo).sqrMagnitude)
                                    {
                                    }
                                    else
                                    {
                                        collision = GetLineSphereCollision(footsteps[i].position, stepTo, footsteps[n].position, 0.25f);
                                    }
                                    if (collision)
                                    {
                                        break;
                                    }
                                }
                            }

                            float angle = Quaternion.Angle(forwardRotation, footsteps[i].stepToRootRot);

                            if (!collision || angle > angleThreshold)
                            {
                                float stepDistance = Vector3.Distance(footsteps[i].position, stepTo);
                                float sT           = Mathf.Lerp(stepThreshold, stepThreshold * 0.1f, comAngle * 0.015f);
                                if (lengthStep)
                                {
                                    sT *= 0.5f;
                                }
                                if (i == 0)
                                {
                                    sT *= 0.9f;
                                }

                                if (!StepBlocked(footsteps[i].position, stepTo, rootBone.solverPosition))
                                {
                                    if (stepDistance > sT || angle > angleThreshold)
                                    {
                                        float value = 0f;

                                        value -= stepDistance;

                                        if (value > bestValue)
                                        {
                                            stepLegIndex = i;
                                            bestValue    = value;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (stepLegIndex != -1)
                    {
                        Vector3 stepTo = centerOfMassVGroundLevel + rootBone.solverRotation * footsteps[stepLegIndex].characterSpaceOffset;
                        footsteps[stepLegIndex].stepSpeed = UnityEngine.Random.Range(stepSpeed, stepSpeed * 1.5f);
                        footsteps[stepLegIndex].StepTo(stepTo, forwardRotation, stepThreshold);
                    }
                }

                footsteps[0].Update(stepInterpolation, onLeftFootstep);
                footsteps[1].Update(stepInterpolation, onRightFootstep);

                leftFootPosition  = footsteps[0].position;
                rightFootPosition = footsteps[1].position;

                leftFootPosition  = V3Tools.PointToPlane(leftFootPosition, leftLeg.lastBone.readPosition, rootUp);
                rightFootPosition = V3Tools.PointToPlane(rightFootPosition, rightLeg.lastBone.readPosition, rootUp);

                leftFootOffset  = stepHeight.Evaluate(footsteps[0].stepProgress);
                rightFootOffset = stepHeight.Evaluate(footsteps[1].stepProgress);

                leftHeelOffset  = heelHeight.Evaluate(footsteps[0].stepProgress);
                rightHeelOffset = heelHeight.Evaluate(footsteps[1].stepProgress);

                leftFootRotation  = footsteps[0].rotation;
                rightFootRotation = footsteps[1].rotation;
            }