public FieldGetContext(ScenarioTag scenario, ScenarioTag.ScriptSyntaxNode node, MemberNameRepository nameRepo) : base(node) { this.OwnDataType = node.DataType; if (node.NodeString == 0) { accessor = SyntaxFactory.DefaultExpression(SyntaxUtil.ScriptTypeSyntax(node.DataType)); } else { var stringVal = SyntaxUtil.GetScriptString(scenario, node); if (stringVal == "none") { accessor = SyntaxFactory.DefaultExpression(SyntaxUtil.ScriptTypeSyntax(node.DataType)); } else { if (nameRepo.TryGetName(stringVal, node.DataType.ToString(), node.NodeData_H16, out var finalName)) { accessor = SyntaxFactory.IdentifierName(finalName); } else { accessor = SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(stringVal)); } } } accessor = accessor.WithAdditionalAnnotations(ScriptGenAnnotations.TypeAnnotation(node.DataType)); }
public EntityGetContext(ScenarioTag scenario, ScenarioTag.ScriptSyntaxNode node, MemberNameRepository nameRepo) : base(node) { this.OwnDataType = node.DataType; if (node.NodeString == 0) { accessor = SyntaxFactory.DefaultExpression(SyntaxUtil.ScriptTypeSyntax(node.DataType)); } else { var stringVal = SyntaxUtil.GetScriptString(scenario, node); if (stringVal == "none") { accessor = SyntaxFactory.DefaultExpression(SyntaxUtil.ScriptTypeSyntax(node.DataType)); } else { if (nameRepo.TryGetName(stringVal, nameof(ScenarioTag.EntityReference), node.NodeData_H16, out var finalName)) { accessor = SyntaxFactory.IdentifierName(finalName); } else { accessor = SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(stringVal)); } if (node.DataType != ScriptDataType.EntityIdentifier) { accessor = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, accessor, SyntaxFactory.IdentifierName(nameof(ScenarioEntity <object> .Entity))); } } } accessor = accessor.WithAdditionalAnnotations(ScriptGenAnnotations.TypeAnnotation(node.DataType)); }
public AiGetContext(ScenarioTag scenario, ScenarioTag.ScriptSyntaxNode node, MemberNameRepository nameRepo) : base(node) { this.OwnDataType = node.DataType; if (node.NodeString == 0) { accessor = SyntaxFactory.DefaultExpression(SyntaxUtil.ScriptTypeSyntax(node.DataType)); } else { var stringVal = SyntaxUtil.GetScriptString(scenario, node); var slashIndex = stringVal.IndexOf('/'); if (slashIndex > 0) { Debug.Assert(node.NodeData_B0 == 192); // It's a squad member accessor var squadName = stringVal.Substring(0, slashIndex); var memberName = stringVal.Substring(slashIndex + 1); if (nameRepo.TryGetName(squadName, node.DataType.ToString(), node.NodeData_B1, out var finalSquad) && nameRepo.NestedRepos.TryGetValue(finalSquad, out var nestedRepo) && nestedRepo.TryGetName(memberName, node.DataType.ToString(), node.NodeData_H16, out var finalProp)) { accessor = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(finalSquad)), SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(finalProp))); } else { accessor = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(squadName)), SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(memberName))); } } else { // Ambiguous reference to either a squad or squad group...? if (nameRepo.TryGetName(stringVal, node.DataType.ToString(), node.NodeData_H16, out var finalSquad)) { if (nameRepo.NestedRepos.TryGetValue(finalSquad, out var nestedRepo)) { accessor = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(finalSquad)), SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier("Squad"))); } else { accessor = SyntaxFactory.IdentifierName(finalSquad); } } else { accessor = SyntaxFactory.IdentifierName(SyntaxUtil.SanitizeIdentifier(stringVal)); } } } accessor = accessor.WithAdditionalAnnotations(ScriptGenAnnotations.TypeAnnotation(node.DataType)); }