/// <summary> /// Refresh the actor to force the game to load any changed values for appearance. /// </summary> public async Task RefreshAsync() { if (this.Pointer == null) { return; } this.IsRefreshing = true; MemoryModes oldMode = this.MemoryMode; this.MemoryMode = MemoryModes.Read; // Use direct pointers here so that we can write the values we need to update // for the refresh without the rest of the model's values, as writing most of the other // values will crash the game. IntPtr actorPointer = (IntPtr)this.Pointer; IntPtr objectKindPointer = actorPointer + 0x008c; IntPtr renderModePointer = actorPointer + 0x0104; if (this.ObjectKind == ActorTypes.Player) { MemoryService.Write(objectKindPointer, (byte)ActorTypes.BattleNpc); MemoryService.Write(renderModePointer, (int)RenderModes.Unload); await Task.Delay(50); MemoryService.Write(renderModePointer, (int)RenderModes.Draw); await Task.Delay(50); MemoryService.Write(objectKindPointer, (byte)ActorTypes.Player); MemoryService.Write(renderModePointer, (int)RenderModes.Draw); } else { MemoryService.Write(renderModePointer, (int)RenderModes.Unload); await Task.Delay(50); MemoryService.Write(renderModePointer, (int)RenderModes.Draw); } await Task.Delay(50); this.IsRefreshing = false; this.MemoryMode = oldMode; }
public double[,] InitWeights(MemoryModes memoryMode) { var weights = new double[NeuronsCount, PrevLayerNeuronsCount]; Console.WriteLine($"{NeuronType} layer weights are being initialized..."); var memoryDoc = new XmlDocument(); memoryDoc.Load(Path.Combine("../../../", Path.Combine("Memory", $"{NeuronType}_memory.xml"))); var memoryEl = memoryDoc.DocumentElement; switch (memoryMode) { case MemoryModes.Get: for (var l = 0; l < weights.GetLength(0); ++l) { for (var k = 0; k < weights.GetLength(1); ++k) { weights[l, k] = double.Parse(memoryEl.ChildNodes.Item(k + weights.GetLength(1) * l).InnerText.Replace(',', '.'), CultureInfo.InvariantCulture); } } break; case MemoryModes.Set: for (var l = 0; l < Neurons.Length; ++l) { for (var k = 0; k < PrevLayerNeuronsCount; ++k) { memoryEl.ChildNodes.Item(k + PrevLayerNeuronsCount * l).InnerText = Neurons[l].Weights[k].ToString(CultureInfo.InvariantCulture); } } break; } memoryDoc.Save($"{NeuronType}_memory.xml"); Console.WriteLine($"{NeuronType} layer weights have been initialized..."); return(weights); }