Файл: Классификация языков программирования (Критерии выбора среды и языка разработки программ).pdf
Добавлен: 28.03.2023
Просмотров: 43
Скачиваний: 2
float rot_time = Quaternion.Angle(target_rot, transform.rotation) / degreePerSecond;
Debug.Log(rot_time);
while (Quaternion.Angle(target_rot, transform.rotation) > 2 && elapsed_time < rot_time)
{
elapsed_time += Time.deltaTime;
transform.rotation = Quaternion.Slerp(start_rot, target_rot, (elapsed_time / rot_time));
yield return new WaitForEndOfFrame();
}
// end rotate
if (getGameObjType(type) != _Wind)
{
GameObject attack = (GameObject)Instantiate(getGameObjType(type), orb_Spot.transform.position, this.transform.rotation);
attack.GetComponent<Rigidbody>().AddForce(doAttackAngle * getSpeedObjType(type), ForceMode.Impulse);
}
else
{
GameObject wind = (GameObject)Instantiate(getGameObjType(type));
wind.transform.position = orb_Spot.transform.position;
Vector3 v = attackTarget.transform.position;
wind.transform.LookAt(v);
wind.transform.Rotate(new Vector3(90, wind.transform.rotation.y, wind.transform.rotation.z));
}
}
}
}
}
void DrawFieldOfAttack()
{
int stepCount = Mathf.RoundToInt(attackAngle * meshResolution);
float stepAngleSize = attackAngle / stepCount;
List<Vector3> viewPoints = new List<Vector3>();
ViewCastInfo oldViewCast = new ViewCastInfo();
for (int i = 0; i <= stepCount; i++)
{
float angle = transform.eulerAngles.y - attackAngle / 2 + stepAngleSize * i;
ViewCastInfo newViewCast = ViewCast(angle);
if (i > 0)
{
bool edgeDstThresholdExceeded = Mathf.Abs(oldViewCast.dst - newViewCast.dst) > edgeDstThreshold;
if (oldViewCast.hit != newViewCast.hit || (oldViewCast.hit && newViewCast.hit && edgeDstThresholdExceeded))
{
EdgeInfo edge = FindEdge(oldViewCast, newViewCast);
if (edge.pointA != Vector3.zero)
{
viewPoints.Add(edge.pointA);
}
if (edge.pointB != Vector3.zero)
{
viewPoints.Add(edge.pointB);
}
}
}
viewPoints.Add(newViewCast.point);
oldViewCast = newViewCast;
}
int vertexCount = viewPoints.Count + 1;
Vector3[] vertices = new Vector3[vertexCount];
int[] triangles = new int[(vertexCount - 2) * 3];
vertices[0] = Vector3.zero;
for (int i = 0; i < vertexCount - 1; i++)
{
vertices[i + 1] = transform.InverseTransformPoint(viewPoints[i]) + Vector3.forward * maskCutawayDst;
if (i < vertexCount - 2)
{
triangles[i * 3] = 0;
triangles[i * 3 + 1] = i + 1;
triangles[i * 3 + 2] = i + 2;
}
}
viewMesh.Clear();
viewMesh.vertices = vertices;
viewMesh.triangles = triangles;
viewMesh.RecalculateNormals();
}
EdgeInfo FindEdge(ViewCastInfo minViewCast, ViewCastInfo maxViewCast)
{
float minAngle = minViewCast.angle;
float maxAngle = maxViewCast.angle;
Vector3 minPoint = Vector3.zero;
Vector3 maxPoint = Vector3.zero;
for (int i = 0; i < edgeResolveIterations; i++)
{
float angle = (minAngle + maxAngle) / 2;
ViewCastInfo newViewCast = ViewCast(angle);
bool edgeDstThresholdExceeded = Mathf.Abs(minViewCast.dst - newViewCast.dst) > edgeDstThreshold;
if (newViewCast.hit == minViewCast.hit && !edgeDstThresholdExceeded)
{
minAngle = angle;
minPoint = newViewCast.point;
}
else
{
maxAngle = angle;
maxPoint = newViewCast.point;
}
}
return new EdgeInfo(minPoint, maxPoint);
}
ViewCastInfo ViewCast(float globalAngle)
{
Vector3 dir = DirFromAngle(globalAngle, true);
RaycastHit hit;
if (Physics.Raycast(transform.position, dir, out hit, attackRadius, obstacleMask))
{
return new ViewCastInfo(true, hit.point, hit.distance, globalAngle);
}
else
{
return new ViewCastInfo(false, transform.position + dir * attackRadius, attackRadius, globalAngle);
}
}
public Vector3 DirFromAngle(float angleInDegrees, bool angleIsGlobal)
{
if (!angleIsGlobal)
{
angleInDegrees += transform.eulerAngles.y;
}
return new Vector3(Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), 0, Mathf.Cos(angleInDegrees * Mathf.Deg2Rad));
}
public struct ViewCastInfo
{
public bool hit;
public Vector3 point;
public float dst;
public float angle;
public ViewCastInfo(bool _hit, Vector3 _point, float _dst, float _angle)
{
hit = _hit;
point = _point;
dst = _dst;
angle = _angle;
}
}
public struct EdgeInfo
{
public Vector3 pointA;
public Vector3 pointB;
public EdgeInfo(Vector3 _pointA, Vector3 _pointB)
{
pointA = _pointA;
pointB = _pointB;
}
}
}
public class MagesAttackType
{
public enum MageType
{
None,
Fire,
Water,
Earth,
Wind
}
public MageType attackType;
public GameObject attackPref;
}
Часть плагина авторизации на Java
package ru.redzver.joinallow;
import java.io.File;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
public class JoinAllow extends JavaPlugin {
public static JoinAllow Instance;
public static String PluginNameWColor = ChatColor.YELLOW + "[" + ChatColor.GREEN + "JoinAllow" + ChatColor.YELLOW + "]" + ChatColor.GRAY;
public static String PluginName = "[JoinAllow]";
public static String JoinMessage = "{player} joined the game";
public static String TimeMessage = "subscription ending in {endtime}";
public static String KickMessage = "{player}, subscription expires";
public static String SiteUrl = "http://minecraft.local/";
public static String SiteOutLocal = "en";
private File configFile;
private YamlConfiguration config;
private static Logger log = Logger.getLogger("Minecraft");
@Override
public void onEnable() {
Instance = this;
RegisterListeners();
InitConfig();
LoadConfigData();
Log("Enabled");
}
@Override
public void onDisable() {
Log("Disabled");
}
public static void Log(String msg) {
log.info(PluginName + " " + msg);
}
private void RegisterListeners() {
getServer().getPluginManager().registerEvents(new PlayerLoginListener(), this);
}
private void InitConfig() {
configFile = new File(getDataFolder(), "config.yml");
if(!configFile.exists()) {
saveResource("config.yml", true);
}
config = new YamlConfiguration();
try {
config.load(configFile);
} catch (Exception e) {
e.printStackTrace();
}
}
private void LoadConfigData() {
JoinMessage = Utils.ReplaceColor(config.getString("JoinMessage"));
KickMessage = Utils.ReplaceColor(config.getString("KickMessage"));
TimeMessage = Utils.ReplaceColor(config.getString("TimeMessage"));
SiteOutLocal = config.getString("SiteOutLocal");
}
}
- Байдачный С.С. .NET Framework. Секреты создания Windows-приложений. – М.: СОЛОН-Пресс, 2004. – 496 с.
- Гербердт Шилдт. C#: учебный курс. – СПб.: Питер; К.: Издательская группа BHV, 2003. – 512 c.: ил. СПб.: Питер, 2002. – 464 с.
- Медведев В.И. Особенности объектно-ориентированного программирования на C++/CLI, C# и Java. – Казань: РИЦ «Школа», 2008. – 360 c.– (Серия «Современная прикладная математика и информатика»).
- Медведев В.И. Программирование на С++, С++.NET/C# и .NET компоненты. – Казань: Мастер Лайн, 2006. – 296 c.
- Медведев В.И. Программирование на C++,C++.NETиC# (Серия “Современная прикладная математика и информатика”). – Казань: Мастер Лайн, 2005. – 270c.
- Петцольд Ч. Программирование для Microsoft Windows на C#. В 2-х томах/Пер. с англ. – М.: Издательско-торговый дом “Русская Редакция”, 2002. – 576 + 624 с.
- П. Наутон, Г. Шилдт. Java 2. Наиболее полное руководство в подлиннике.– СПб.: БХВ-Петербург, 2000. – 1072 с.
- Рамбо Дж., Якобсон А., Буч Г. UML: специальный справочник. – СПб.: Питер, 2002. – 656 c.