{"FileModelVersion":{"Major":1,"Minor":0},"Name":"HelicopterDrone01_V05b_Pigeon","Version":11,"SavedTotalBlockCount":53,"SavedMaterialCost":3974.5,"ContainedMaterialCost":24.3,"ItemDictionary":{"291":"d3924bae-be5a-43a0-be19-64fc7c8d6059","478":"26a604f0-071c-49ca-8a0e-e1d9c959b1c5","477":"f29b1372-f4f3-4305-aa85-5fe214361fb7","525":"a56e0dcf-94e4-48a0-b8b9-5e33e0ab69cf","501":"a745d992-b62f-4014-a524-9e5953ccffd3","523":"e6bb2b09-daee-432d-9aff-45fc63d24fca","335":"e63040c9-0027-4fd3-be30-67fe3e950140","323":"cdca5dec-eeee-4849-9b2e-73b23e216465","773":"69202543-e9d5-41a6-bf9f-96627eafecfa","775":"84dce5de-cacc-4ce5-b3fe-498f926c7ea4","0":"31277649-04ec-45db-adfc-4a7d0a73686a","99":"61c56906-c2ae-4953-8fef-2e18e5ff7a68","322":"788700be-1e74-46d7-9e34-1a5ec2747548","333":"c5cec892-2e43-4905-9d28-44fc8ecb5cc7","334":"213026bc-fd7a-44e6-b543-a31c219aaef0","649":"564a75cd-8d7c-469b-a4b3-053d772b7d9d","647":"862712ab-6534-45e2-ad89-1d8eb0fd26de","1467":"020fae5d-c759-4456-87e6-7e423752a427","446":"912404d2-30c9-47c5-8430-5e2834b64271","445":"44cdf22f-f4b9-43bc-aaff-2d4ae6c80503","447":"8ba7a591-3923-4344-9f87-0588c6a1aba0","504":"ef545d00-c22d-4eed-bd76-74d6432e2974","415":"310a7a9a-8d4e-4365-a877-1a8e2bac2a81","423":"4aa8cfcb-7aeb-430b-9726-f8bb8d8f4124","538":"9b8657b9-c820-43a0-ad19-25ea45a100f1"},"Blueprint":{"ContainedMaterialCost":0.0,"CSI":[0.0,0.0,-1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1499.98132,2.61531687,1.0,1.0,0.0,1.0,24.5582123,166.654434,-1.0,0.0,1500.0,1.0,1.0,0.0,0.0,0.0,0.0,6.555002,0.0,0.1,0.1,1.0,1.0,3.0,0.0,0.0,0.0,0.0,-1.0,1.0,2.24525118,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,-1.0,53.05,87.87528,-1.0,0.0,0.0,500.0,-1.0,12.0,0.0,0.0,0.0,0.194993079,0.0,0.370065778,0.0,0.0,0.0006290099,0.0,0.0,0.0,0.0,1.0,1.0,-1.0,-1.0,-1.0,-1.0],"COL":["0.011764,0,0,0","0.658823,0.66,0.66,0.99","0.658823,0.66,0.66,0.99","0.658823,0.66,0.66,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.72549,0.13,0.13,0.99","0.72549,0.13,0.13,0.99","0.72549,0.13,0.13,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.231372,0.23,0.23,0.99","0.756862,0.76,0.76,0.99","0.035294,0.04,0.04,0.99","0.4,0.4,0,0.9","0.415686,0.42,0.42,0.99","0.411764,0.54,0.62,0.99","1,0.4125,0,0.99","0,0,0,0","0,0,0,0","0,0,0,0","0,0,0,0","0.752941,0.2,0.75,0.99","0.658823,0.66,0.19,0.99","0.098039,0.1,0.1,1","0.356862,0.36,0.47,1","0.231372,0.23,0.23,1","0.6,0.61,0.62,1"],"SCs":[{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[],"BLP":["0,0,0","0,-1,0","0,-3,1","0,-2,1","0,-1,1","0,0,1","0,1,1"],"BLR":[0,14,20,20,4,21,21],"BP1":null,"BP2":null,"BCI":[1,1,1,1,1,1,1],"BEI":null,"BlockData":"AAAAKgAAABIAAQAAAAAAAAIAAAAACwADAAAAAAsAJIgAAAALAF0AAAAACwBdGwEAAAsABwABAQgABAAAgD8AAAQyAAAABAAAMQAAAA4ABQAAAAAAAAEAAAAAAAACAAAAAAAAAwAAAAAAACSIAAAABwBdAAAAAAcAXRsBAAAHAGQABAAA8EEAAAQzAAAA","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin  Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,1,0","LocalRotation":"0,0,0,1","ForceId":0,"TotalBlockCount":7,"MaxCords":"0,1,1","MinCords":"0,-3,0","BlockIds":[323,1467,647,647,649,647,647],"BlockState":"=0,7","AliveCount":7,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":37,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":7},{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[],"BLP":["0,0,0","0,-1,0","0,-3,1","0,-2,1","0,-1,1","0,0,1","0,1,1"],"BLR":[0,14,20,20,4,21,21],"BP1":null,"BP2":null,"BCI":[1,1,1,1,1,1,1],"BEI":null,"BlockData":"AAAAKgAAABIAAQAAAAAAAAIAAAAACwADAAAAAAsAJIgAAAALAF0AAAAACwBdGwEAAAsABwABAQgABAAAgD8AAAQyAAAABAAAMQAAAA4ABQAAAAAAAAEAAAAAAAACAAAAAAAAAwAAAAAAACSIAAAABwBdAAAAAAcAXRsBAAAHAGQABAAA8EEAAAQzAAAA","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin  Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,-1,0","LocalRotation":"0,0,-0.999999,0","ForceId":0,"TotalBlockCount":7,"MaxCords":"0,1,1","MinCords":"0,-3,0","BlockIds":[323,1467,647,647,649,647,647],"BlockState":"=0,7","AliveCount":7,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":38,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":7}],"BLP":["0,0,0","0,0,1","0,1,1","0,2,1","0,-1,1","0,-2,1"],"BLR":[0,8,21,21,20,20],"BP1":null,"BP2":null,"BCI":[1,1,1,1,1,1],"BEI":null,"BlockData":"AAAAKgAAABIAAQAAAAAAAAIAAAAACwADAAAAAAsAJIgAAAALAF0AAAAACwBdGwEAAAsABwABAQgABAAAgD8AAAQwAAAAAQAAMQAAAA4ABQAAAAAAAAEAAAAAAAACAAAAAAAAAwAAAAAAACSIAAAABwBdAAAAAAcAXRsBAAAHAGQABAAA8EEAAAQxAAAA","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin / Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,0,1","LocalRotation":"0,0.999999,0,0","ForceId":0,"TotalBlockCount":20,"MaxCords":"0,2,1","MinCords":"0,-2,0","BlockIds":[323,649,647,647,647,647],"BlockState":"=0,6","AliveCount":6,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":36,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":6}],"BLP":["0,0,0"],"BLR":[0],"BP1":null,"BP2":null,"BCI":[9],"BEI":null,"BlockData":"AAAAKgAAAA4AAwAAAAAAAAEAAAAAAAACAAAAAAAAdiYAAAAHAEIYAAAABwBdGwEAAAcAAQAEzczMPQAABC8AAAA=","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAAOAAAAKACDycAAAAAAKCGAQAAnAAAAAAAAJwAAgAAAADyAAMAAAAASAEEAAAAAJ4BBQAAAAD0AQYAAAAASgIAABAAAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAADAAQCAAAABAAQAAAAAAAAAAAAAAAAAAAAAAUABAMAAAAGABAAAAAAAAAAAAAAAAAAAAAABwAEBAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAJAAQFAAAACgAQAAAAAAAAAAAAAAAAAAAAAAsABAYAAAAAABDYeQB9+EgEToVoOK9kJBRAAQAMZmaOPwAAgD5mZo4/AgAMAAAAAAAAAACamZm+AwAMAAC0wgAAAAAAAAAABAAEAwAAAAUADAAAAAAAAAAAAAAAAAAAENh5AH34SAROhWg4r2QkFEABAAwAAKA/AADAPgAAoD8CAAwAAAAAAAAAAJqZGb0DAAwAALTCAAAAAAAAAAAEAAQJAAAABQAMAAAAAAAAAAAAAAAAAAAQeC0E967XC0qycxl4E8YWSAEADM3MtD/NzLQ/AACAPgIADAAAAAAAAAAAMzOTvgMADAAAAAAAADRDAAA0QgQABAkAAAAFAAwAAAAAAAAAAAAAAAAAABBTKYnreQcnSoC0yEuGB7bWAQAMAACQPwAAgD8AAJA/AgAMAAAAAAAAAAA9Cte+AwAMAAC0wgAAAAAAAAAABAAEAwAAAAUADAAAAAAAAAAAAAAAAAAAENhSN0xhWudGvKb0izxS9r4BAAyamUk/zcxMPZqZST8CAAwAAAAAAAAAAJqZCb8DAAwAALRCAAAAAAAAAAAEAAQDAAAABQAMAAAAAAAAAAAAAAAAAAAQOobQjcfQyUy1g9dILQRZogEADAAAoD8AAKA+AACgPwIADAAAAAAAAAAAAACgvgMADAAAtMIAAAAAAAAAAAQABAkAAAAFAAwAAAAAAAAAAAAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Two Axis Turret","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":334,"LocalPosition":"0,1,2","LocalRotation":"0.707106,0,0,0.707106","ForceId":0,"TotalBlockCount":21,"MaxCords":"0,0,1","MinCords":"0,0,0","BlockIds":[333],"BlockState":"0","AliveCount":1,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":35,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":1},{"ContainedMaterialCost":24.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[{"ContainedMaterialCost":0.3,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[],"BLP":["0,0,0","0,1,0"],"BLR":[0,0],"BP1":null,"BP2":null,"BCI":[1,1],"BEI":null,"BlockData":"AAAAKgAAABIAAQAAAAAAAAIAAAAACwADAAAAAAsAJIgAAAALAF0AAAAACwBdGwEAAAsABwABAQgABAAAgD8AAAQnAAAAAQAAKgAAACMAAwAAAAAAAAEAAAAABwACAAAAAAcAdiYAAAAOAEIYAAAADgBdGwEAABwAAwAEBgAAAAEABAAAgD8AAAQAgLxCAQAEr7v7QAAABAIAAAA=","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin / Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,-1,0","LocalRotation":"0,0,0,1","ForceId":0,"TotalBlockCount":2,"MaxCords":"0,1,2","MinCords":"0,0,0","BlockIds":[323,538],"BlockState":"00","AliveCount":2,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":43,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":2}],"BLP":["0,0,0"],"BLR":[0],"BP1":null,"BP2":null,"BCI":[1],"BEI":null,"BlockData":"AAAAKgAAACAAAwAAAAAAAAEAAAAAAAACAAAAABIAdiYAAAAZAEIYAAAAGQBdGwEAABkAAgAEAABwwQMABAAAtEIGAAEBAQAEzczMPQAABCYAAAA=","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAAIwAAAB0BDycAAAAAAKCGAQAATgABAAAAAE4AAgAAAACOAAMAAAAAzgAAABAAAAAAAAAAAAAAAAAAAAAAAQAEAQAAAAIAEAAAAAAAAAAAAAAAAAAAAAADAAQCAAAABAAQAAAAAAAAAAAAAAAAAAAAAAUABAMAAAAAABBmJmd7dbJPRZaPUG6TmHgAAQAMAABAPwAA4D4AAGA/AgAMAAAAAAAAQD4AACA/BQAMAAAAAAAAAAAAAAAAAAAQpjMSqYanqEy1D5+spcs3MwEADAAAAD8AAAA/AACgPwIADAAAAAAAAKA+AAAAPgUADAAAAAAAAAAAAAAAAAAAEL3xo/H3tb9Dm3LHoGDCT3MBAAwAAMg/ZmbmPgAAAD4CAAwAAAAAAADAvZqZiT4DAAwAALRCAAC0QgAAAAAFAAwAAAAAAAAAAAAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Two Axis Turret","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":334,"LocalPosition":"0,-1,-2","LocalRotation":"0,0,-0.999999,0","ForceId":0,"TotalBlockCount":3,"MaxCords":"0,0,0","MinCords":"0,-1,0","BlockIds":[333],"BlockState":"0","AliveCount":1,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":42,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":1}],"BLP":["0,0,0","-1,0,-1","-1,0,-2","-1,0,-3","0,0,-1","0,0,-2","0,0,-3","0,0,-4","1,0,-1","1,0,-2","1,0,-3","0,1,-2"],"BLR":[0,18,18,18,10,0,10,10,16,16,16,8],"BP1":null,"BP2":null,"BCI":[1,1,1,1,1,1,1,1,1,1,1,1],"BEI":null,"BlockData":"AAAAKgAAABIAAQAAAAAAAAIAAAAACwADAAAAAAsAJIgAAAALAF0AAAAACwBdGwEAAAsABwABAQgABAAAgD8AAAQiAAAAAQAADgAAAA4AWgAAAAAAAF0bAQAADgDGBARQAAAAHQkERQAAAAIAAA4AAAAOAFoAAAAAAABdGwEAAA4AxgQEQgAAAB0JBB8AAAADAAAVAAAAIwBaAAAAAAAAEwAAAAAVAF0bAQAAIwDGBAQ0AAAAVwQEAACgQB0JBBQAAAABAAQAAAAABgAEAACAPwUAABwAAAAZAAIAAAAAAAABAAAAAAAAjhwAAAALAF0bAQAAGQABAAgAAAAAAAB6RAAABO/zNUgBAARSwAJGBgAAKgAAAC4ABQAAAAAAAAEAAAAAAAACAAAAABIAdiYAAAAZAEIYAAAAGQBdGwEAACcAAgAEAABwwgMABAAAcEIGAAEBAQAEAAA0QwAABIp+JUgBAAQAQPtFAAAEAQAAAAgAAA4AAAAOAFoAAAAAAABdGwEAAA4AxgQEUAAAAB0JBEUAAAAJAAAOAAAADgBaAAAAAAAAXRsBAAAOAMYEBEIAAAAdCQQfAAAACgAAFQAAACMAWgAAAAAAABMAAAAAFQBdGwEAACMAxgQENAAAAFcEBAAAoEAdCQQUAAAAAQAEAAAAAAYABAAAgD8LAAAOAAAABwBpAQAAAAAAXRsBAAAAAAAABBYAAAA=","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin  Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,0,4","LocalRotation":"0,0,0,1","ForceId":0,"TotalBlockCount":15,"MaxCords":"1,1,0","MinCords":"-1,-1,-4","BlockIds":[323,446,445,447,0,504,415,423,446,445,447,523],"BlockState":"=0,12","AliveCount":12,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":39,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":12},{"ContainedMaterialCost":0.0,"CSI":[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0],"COL":null,"SCs":[],"BLP":["0,0,0","0,-1,0","0,1,0"],"BLR":[0,0,0],"BP1":null,"BP2":null,"BCI":[1,1,1],"BEI":null,"BlockData":"AAAAKgAAABUAAQAAAAAAAAIAAAAADgADAAAAAA4AJIgAAAAOAF0AAAAADgBdGwEAAA4ABQAEAQAAAAgABAAAgD8AAAQTAAAAAQAADgAAAB4AAQAAAAAAAF0bAQAAHgABAAzNzEw9zcxMPc3MTD0CAAwAAAAAAACAPwAAAAACAAAOAAAAHgABAAAAAAAAXRsBAAAeAAEADM3MTD3NzEw9zcxMPQIADAAAAAAAAIC/AAAAAA==","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin / Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,0,2","LocalRotation":"0,0,0,1","ForceId":0,"TotalBlockCount":3,"MaxCords":"0,1,0","MinCords":"0,-1,0","BlockIds":[323,99,99],"BlockState":"000","AliveCount":3,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":46,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":3}],"BLP":["0,0,0","0,-1,1","0,-1,2","0,-1,3","0,0,1","0,0,3","0,1,1","0,1,3"],"BLR":[0,0,0,0,10,10,0,0],"BP1":null,"BP2":null,"BCI":[1,0,1,1,1,1,1,1],"BEI":null,"BlockData":"AAAAKgAAABIAAQAAAAAAAAIAAAAACwADAAAAAAsAJIgAAAALAF0AAAAACwBdGwEAAAsABwABAQgABAAAgD8AAAQaAAAAAQAADgAAAB4AAQAAAAAAAF0bAQAAHgABAAzNzEw9zcxMPc3MTD0CAAwAAAAAAACAPwAAAAACAAAOAAAAHgABAAAAAAAAXRsBAAAeAAEADM3MTD3NzEw9zcxMPQIADAAAAAAAAIA/AAAAAAMAAA4AAAAeAAEAAAAAAABdGwEAAB4AAQAMzcxMPc3MTD3NzEw9AgAMAAAAAAAAgD8AAAAABgAADgAAAB4AAQAAAAAAAF0bAQAAHgABAAzNzEw9zcxMPc3MTD0CAAwAAAAAAACAvwAAAAAHAAAOAAAAHgABAAAAAAAAXRsBAAAeAAEADM3MTD3NzEw9zcxMPQIADAAAAAAAAIC/AAAAAA==","VehicleData":"Vy4AAAAAAAAHAAAAAAAAAAAAAAAA8FsKAQAAAAAOAAAAAAAPJwAAAAAA0AcAAAAAAJ9xBAAAAAAADgAAAAAADycAAAAAAKCGAQAAAABHKQEAAAAAAAcAAAAAAAAAAAAAAAA=","designChanged":false,"blueprintVersion":0,"blueprintName":"Spin  Turn block","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":322,"LocalPosition":"0,0,-2","LocalRotation":"0,0,0,1","ForceId":0,"TotalBlockCount":47,"MaxCords":"0,1,4","MinCords":"0,-1,0","BlockIds":[323,773,775,775,0,0,99,99],"BlockState":"=0,8","AliveCount":8,"BlockStringData":[],"BlockStringDataIds":[],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":10,"PersistentBlockIndex":-1,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":8}],"BLP":["0,0,-1","0,0,0","0,0,1","0,1,0","0,0,2","0,-1,0"],"BLR":[0,0,0,0,4,6],"BP1":null,"BP2":null,"BCI":[1,1,1,1,1,1],"BEI":null,"BlockData":"AAAABwAAAAcAXRsBAAAAAAAABAcAAAABAAAqAAAAdwAPJwAAAAAAhM0AAAAaAAAAAAAASwCFzQAAAHAAhs0AAABwAF0bAQAAcAAAABDk7BfL5lSfQqDG3ZcfL4qhAQAEAAAAAAIABAAAAADQBwQDAAAA0QcEAACgQdIHBAAAoEHTBwQAABZE1AcEAABIQtUHBAAAIEH8BQEAKCMe5yAx56lPSEmtHYsqn0xNREhvdmVyIG1vdmVtZW50AAAECAAAAAMAAA4AAAAHAGkBAAAAAABdGwEAAAAAAAAECgAAAAQAAA4AAAAHAAAAAAAAAABdGwEAAAAAAAAEEQAAAAUAAA4AAAAHAGkBAAAAAABdGwEAAAAAAAAEGQAAAA==","VehicleData":"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","designChanged":false,"blueprintVersion":11,"blueprintName":"HelicopterDrone01_V05b_Pigeon","SerialisedInfo":{"JsonDictionary":{},"IsEmpty":true},"Name":null,"ItemNumber":335,"LocalPosition":"10016.53,209.4784,9999.637","LocalRotation":"-0.1316294,0.6698022,-0.125843,-0.7198626","ForceId":1766547194,"TotalBlockCount":53,"MaxCords":"0,1,2","MinCords":"0,-1,-2","BlockIds":[291,478,477,525,501,523],"BlockState":"=0,6","AliveCount":6,"BlockStringData":["    m_mainframeIndex = 0 --The number of the AI block to refer to. (Starting from 0, there are as many as there are installed.)\r\n    m_targetEnemyIndex = 0 --A number that determines which enemy to target. (Starting from 0, there are as many as the number of enemies.)\r\n    m_yawSpinBlockIndex = 46 --The number of the spin block (reaction wheel) controlled by Yaw. (Starting from 0, there are as many as the number of spin blocks installed since the vehicle was created. The removed ones are also counted.)\r\n    m_heliBladeTurretIndex = 0 --The number of the turret for the helicopter blade. (Starting from 0, there are as many as there are existing turrets. OneAxis (1m, 3m, 5m), ElevationOnly, TwoAxis are counted.)\r\n    m_maxTiltAngle = 22.5 --The maximum angle for controlling the heliblade. (At 90 degrees, the heliblade bends directly in front, directly behind, directly to the right, and to the left.)\r\n    m_maxAngleToMove = 52.5 --The angle of posture to maintain when moving to the direction at maximum speed. (You can't move at 0 degrees. It's probably the best speed you can think of at 90 degrees, but it's also the best chance of kissing the surface of the sea.)\r\n    m_altitudeDifference = 100.0 --The elevation difference from the target enemy to be maintained or the sea level. If there are no enemies, it will refer to the sea level. (0 keeps the same altitude as the enemy or sea level. 100 keeps the altitude 100m higher than the enemy or sea level.)\r\n    m_altitudeLimit = { min = 50.0, max = 400.0 } --A value that sets a limit on the altitude to be maintained from the minimum value to the maximum value.\r\n    m_rangeToStartTurning = { min = 200.0, max = 400.0 } --When the distance to the target enemy falls within this limit, you will start moving counterclockwise around the enemy. (This move tries to maintain a distance of (min + max) / 2.)\r\n    m_valuesToSet = { --A storage box that stores the settings required to initialize the PID. (Probably these values and the existing PID values are synonymous. Kp = Gain, Ti = Integral, Tp = Derivative)\r\n        forward = { Kp = 0.025, Ti = 250.0, Td = 1.5 },\r\n        strafe = { Kp = 0.025, Ti = 250.0, Td = 1.5 },\r\n        hover = { Kp = 1.0, Ti = 250.0, Td = 1.0 },\r\n        pitch = { Kp = 0.5, Ti = 250.0, Td = 0.5 },\r\n        roll = { Kp = 0.5, Ti = 250.0, Td = 0.5 },\r\n        yaw = { Kp = 1.5, Ti = 250.0, Td = 1.0 },\r\n    }\r\n    ----------------\r\n    m_initializable = false --A value that remembers whether initialization was done.\r\n\r\n    --A storage box containing time information.\r\n    Time = {\r\n        previous, current, deltaTime,\r\n        Update = function(I)\r\n            Time.previous = Time.current or I:GetTimeSinceSpawn()\r\n            Time.current = I:GetTimeSinceSpawn()\r\n            Time.deltaTime = Time.current - Time.previous\r\n        end\r\n    }\r\n\r\n    --A storage box for using PID control.\r\n    PID = {\r\n        selfs = {}, --selfs are toolboxes.\r\n        NewSelf = function(_Kp, _Ti, _Tp, _GetDifferenceToTarget, _GetVelocity) --New Self is a blueprint for tools. Store the created tool in selfs.\r\n            return {\r\n                total = 0.0,\r\n                Kp = Mathf.Max(_Kp, 0.0),\r\n                Ti = Mathf.Max(_Ti >= 250.0 and 0.0 or _Ti, 0.0),\r\n                Td = Mathf.Clamp(_Tp, 0.0, 10.0),\r\n                GetDifferenceToTarget = _GetDifferenceToTarget,\r\n                GetVelocity = _GetVelocity\r\n            }\r\n        end,\r\n        GetGain = function(I, self, target) --GetGain is a person who works with the tools in selfs and passes on the results.\r\n            local differenceToTarget = self.GetDifferenceToTarget(I, target)\r\n            self.total = self.total + differenceToTarget * Time.deltaTime\r\n            local gain = -self.Kp * (differenceToTarget + (self.Ti == 0.0 and 0.0 or self.total / self.Ti) + self.GetVelocity(I) * self.Td)\r\n            gain = Mathf.Clamp(gain, -1.0, 1.0)\r\n            \r\n            return gain\r\n        end\r\n    }\r\n\r\n\r\n    --Functions that calculate with trigonometric functions-----------------------------\r\n    --Returns the angle calculated from the coordinates.\r\n    function GetAngleFromVector(vector)\r\n        local angle = Mathf.Abs(Mathf.Atan(vector.horizontal / vector.vertical)) * Mathf.Rad2Deg\r\n        angle = vector.vertical > 0.0 and 180.0 - angle or angle\r\n        angle = vector.horizontal < 0.0 and -angle or angle\r\n\r\n        return angle\r\n    end\r\n\r\n    --Returns the coordinates calculated from the angle and distance.\r\n    function GetVectorFromAngleAndDistance(angle, distance)\r\n        local vector = {\r\n            vertical = distance * Mathf.Cos(angle * Mathf.Deg2Rad),\r\n            horizontal = distance * Mathf.Sin(angle * Mathf.Deg2Rad)\r\n        }\r\n        \r\n        return vector\r\n    end\r\n\r\n    --Converts the coordinates that are based on the world to the coordinates that are based on you and returns it.\r\n    function GetPositionFromSelfAttitude(targetPositionFromSelf, selfAngle)\r\n        targetPositionFromSelf.vertical = -targetPositionFromSelf.vertical\r\n        local fromSelfPositionToTarget = GetAngleFromVector(targetPositionFromSelf)\r\n        local angleFromSelfToTarget = Mathf.DeltaAngle(selfAngle, fromSelfPositionToTarget)\r\n        local distance = Mathf.Sqrt(Mathf.Pow(targetPositionFromSelf.horizontal, 2.0) + Mathf.Pow(targetPositionFromSelf.vertical, 2.0))\r\n\r\n        return GetVectorFromAngleAndDistance(angleFromSelfToTarget, distance)\r\n    end\r\n\r\n\r\n    ------------------------------------------------------------------------------------\r\n    --It is for initialization. It is only loaded the first time at startup.\r\n    function Initialize(I)\r\n        I:ClearLogs()\r\n        I:Log(\"Lua start-up\")\r\n        ----------------\r\n        do --Forward\r\n            local GetDifferenceToTarget = function(I, target)\r\n                return -target\r\n            end\r\n            local GetVelocity = function(I)\r\n                local targetPositionFromSelf = { horizontal = I:GetVelocityVector().x, vertical = I:GetVelocityVector().z }\r\n                local position = GetPositionFromSelfAttitude(targetPositionFromSelf, I:GetConstructYaw())\r\n                return position.vertical\r\n            end\r\n            PID.selfs.forward = PID.NewSelf(m_valuesToSet.forward.Kp, m_valuesToSet.forward.Ti, m_valuesToSet.forward.Td, GetDifferenceToTarget, GetVelocity)\r\n        end\r\n        do --Strafe\r\n            local GetDifferenceToTarget = function(I, target)\r\n                return -target\r\n            end\r\n            local GetVelocity = function(I)\r\n                local targetPositionFromSelf = { horizontal = I:GetVelocityVector().x, vertical = I:GetVelocityVector().z }\r\n                local position = GetPositionFromSelfAttitude(targetPositionFromSelf, I:GetConstructYaw())\r\n                return position.horizontal\r\n            end\r\n            PID.selfs.strafe = PID.NewSelf(m_valuesToSet.strafe.Kp, m_valuesToSet.strafe.Ti, m_valuesToSet.strafe.Td, GetDifferenceToTarget, GetVelocity)\r\n        end\r\n        do --Hover\r\n            local GetDifferenceToTarget = function(I, target)\r\n                return (I:GetConstructCenterOfMass().y - target)\r\n            end\r\n            local GetVelocity = function(I)\r\n                return I:GetVelocityVector().y\r\n            end\r\n            PID.selfs.hover = PID.NewSelf(m_valuesToSet.hover.Kp, m_valuesToSet.hover.Ti, m_valuesToSet.hover.Td, GetDifferenceToTarget, GetVelocity)\r\n        end\r\n        do --Pitch\r\n            local GetDifferenceToTarget = function(I, target)\r\n                local difference = Mathf.DeltaAngle(I:GetConstructPitch(), target)\r\n                local normalize = Mathf.Clamp(difference / 90.0, -1.0, 1.0)\r\n                return normalize\r\n            end\r\n            local GetVelocity = function(I)\r\n                return -I:GetLocalAngularVelocity().x\r\n            end\r\n            PID.selfs.pitch = PID.NewSelf(m_valuesToSet.pitch.Kp, m_valuesToSet.pitch.Ti, m_valuesToSet.pitch.Td, GetDifferenceToTarget, GetVelocity)\r\n        end\r\n        do --Roll\r\n            local GetDifferenceToTarget = function(I, target)\r\n                local difference = Mathf.DeltaAngle(I:GetConstructRoll(), target)\r\n                local normalize = Mathf.Clamp(difference / 90.0, -1.0, 1.0)\r\n                return normalize\r\n            end\r\n            local GetVelocity = function(I)\r\n                return -I:GetLocalAngularVelocity().z\r\n            end\r\n            PID.selfs.roll = PID.NewSelf(m_valuesToSet.roll.Kp, m_valuesToSet.roll.Ti, m_valuesToSet.roll.Td, GetDifferenceToTarget, GetVelocity)\r\n        end\r\n        do --Yaw\r\n            local GetDifferenceToTarget = function(I, target)\r\n                local difference = Mathf.DeltaAngle(I:GetConstructYaw(), target)\r\n                local normalize = Mathf.Clamp(difference / 90.0, -1.0, 1.0)\r\n                return normalize\r\n            end\r\n            local GetVelocity = function(I)\r\n                return -I:GetLocalAngularVelocity().y\r\n            end\r\n            PID.selfs.yaw = PID.NewSelf(m_valuesToSet.yaw.Kp, m_valuesToSet.yaw.Ti, m_valuesToSet.yaw.Td, GetDifferenceToTarget, GetVelocity)\r\n        end\r\n        ----------------\r\n        m_initializable = true\r\n        I:Log(\"Initialization completion\")\r\n        I:Log(\"----------------\")\r\n    end\r\n\r\n\r\n    ------------------------------------------------------------------------------------\r\n    --Check if AI control is enabled.\r\n    function IsAIControl(I)\r\n        local mainAIIndex = 0\r\n        return I:GetAIMovementMode(mainAIIndex) ~= \"Off\" and\r\n        I:IsDocked() == false\r\n    end\r\n\r\n\r\n    --Functions related to Yaw control--------------------------------------------------\r\n    --Control Yaw and turn the front to the coordinates.\r\n    function LookAtTargetWithYaw(I, targetPosition)\r\n        local position = I:GetConstructPosition() - targetPosition\r\n        local vector = { horizontal = position.x, vertical = position.z}\r\n        local angle = GetAngleFromVector(vector)\r\n        local yawInput = PID.GetGain(I, PID.selfs.yaw, -angle)\r\n        I:SetSpinBlockInstaSpin(m_yawSpinBlockIndex, yawInput)\r\n    end\r\n\r\n    --Inertial control of Yaw's angular velocity makes it stationary.\r\n    function InertialControlOfYaw(I)\r\n        local yawInput = PID.GetGain(I, PID.selfs.yaw, I:GetConstructYaw())\r\n        I:SetSpinBlockInstaSpin(m_yawSpinBlockIndex, yawInput)\r\n    end\r\n\r\n\r\n    --Functions related to Manoeuvre-----------------------------------------------------------\r\n    --Move counterclockwise around the target coordinates.\r\n    function RotateAroundTarget(I, targetPosition)\r\n        local distance = (m_rangeToStartTurning.min + m_rangeToStartTurning.max) / 2.0\r\n        local circumfence = distance * Mathf.PI\r\n        local targetAngle = Mathf.Pow(I:GetVelocityMagnitude(), Mathf.Log(360.0, circumfence), 2.0)\r\n\r\n        local selfPosition = targetPosition - I:GetConstructCenterOfMass()\r\n        selfPosition = { horizontal = selfPosition.x, vertical = selfPosition.z }\r\n        local selfAngle = GetAngleFromVector(selfPosition)\r\n        \r\n        local vector = GetVectorFromAngleAndDistance(selfAngle + targetAngle, distance)\r\n        local targetPosition = targetPosition\r\n        targetPosition.x = targetPosition.x - vector.horizontal\r\n        targetPosition.z = targetPosition.z + vector.vertical\r\n\r\n        return targetPosition\r\n    end\r\n\r\n    --Move straight to the coordinates.\r\n    function HeadToTargetDistance(I, targetPosition)\r\n        local targetPositionFromSelf = targetPosition - I:GetConstructCenterOfMass()\r\n        targetPositionFromSelf = { horizontal = targetPositionFromSelf.x, vertical = targetPositionFromSelf.z }\r\n        local angle = GetAngleFromVector(targetPositionFromSelf)\r\n        local distance = (m_rangeToStartTurning.min + m_rangeToStartTurning.max) / 2.0\r\n        local vector = GetVectorFromAngleAndDistance(angle, distance)\r\n        local targetPosition = targetPosition\r\n        targetPosition.x = targetPosition.x - vector.horizontal\r\n        targetPosition.z = targetPosition.z + vector.vertical\r\n\r\n        return targetPosition\r\n    end\r\n\r\n\r\n    --Functions related to heliblades-------------------------------------------\r\n    --Returns the maneuver amount to go to the target coordinates.\r\n    function GetHelicopterMoveInputs(I, targetPosition)\r\n        local targetPositionFromSelf = targetPosition - I:GetConstructCenterOfMass()\r\n        targetPositionFromSelf = { horizontal = targetPositionFromSelf.x, vertical = targetPositionFromSelf.z }\r\n        local targetValues = GetPositionFromSelfAttitude(targetPositionFromSelf, I:GetConstructYaw())\r\n\r\n        local forward = PID.GetGain(I, PID.selfs.forward, targetValues.vertical)\r\n        local strafe = PID.GetGain(I, PID.selfs.strafe, targetValues.horizontal)\r\n\r\n        return { forward = forward, strafe = strafe }\r\n    end\r\n\r\n    --Converts normal maneuver to maneuver for helicopter control and returns.\r\n    function GetHeliBladeInputs(I, forward, strafe, altitude)\r\n        local inputs = {}\r\n        altitude = Mathf.Clamp(altitude + m_altitudeDifference, m_altitudeLimit.min, m_altitudeLimit.max)\r\n        inputs.hover = PID.GetGain(I, PID.selfs.hover, altitude)\r\n        --Maximize ascent when forward and reverse are maximum\r\n        if Mathf.Abs(forward) >= 1.0 or Mathf.Abs(strafe) >= 1.0 then\r\n            inputs.hover = 1.0\r\n        end\r\n        do\r\n            local adjustAngle = m_maxAngleToMove + PID.selfs.hover.GetDifferenceToTarget(I, altitude)\r\n            adjustAngle = Mathf.Clamp(adjustAngle, 0.0, 90.0)\r\n            inputs.pitch = PID.GetGain(I, PID.selfs.pitch, forward * adjustAngle)\r\n            inputs.roll = PID.GetGain(I, PID.selfs.roll, -strafe * adjustAngle)\r\n        end\r\n        do --Normalize when vector length is 1 or greater\r\n            local length = Mathf.Sqrt(Mathf.Pow(inputs.pitch, 2) + Mathf.Pow(inputs.roll, 2))\r\n            if length > 1.0 then\r\n                inputs.pitch = inputs.pitch / length\r\n                inputs.roll = inputs.roll / length\r\n            end\r\n        end\r\n        --Invert the shaft rotation when descending\r\n        if inputs.hover < 0.0 then\r\n            inputs.pitch = -inputs.pitch\r\n            inputs.roll = -inputs.roll\r\n        end\r\n\r\n        return inputs\r\n    end\r\n\r\n    --Controls the angle of the helicopter turret.\r\n    function SetHeliBladeTilt(I, inputPitch, inputRoll)\r\n        local aimRotation = nil\r\n        do\r\n            local constructForward = I:GetConstructForwardVector()\r\n            local constructUp = I:GetConstructUpVector()\r\n            local constructRight = I:GetConstructRightVector()\r\n            local iRotations = {\r\n                pitch = {\r\n                    up = Quaternion.LookRotation(constructUp, -constructForward),\r\n                    down = Quaternion.LookRotation(-constructUp, constructForward)\r\n                },\r\n                roll = {\r\n                    right = Quaternion.LookRotation(constructForward, constructRight),\r\n                    left = Quaternion.LookRotation(constructForward, -constructRight)\r\n                }\r\n            }\r\n            \r\n            local function GetRotationAfterManeuver(inputValue, plusRotation, minusRotation)\r\n                local edgeRotation = inputValue >= 0.0 and plusRotation or minusRotation \r\n                local verticleAngle = 90.0\r\n                local interpolatedValue = Mathf.Abs(inputValue) * (m_maxTiltAngle / verticleAngle)\r\n                return Quaternion.Lerp(aimRotation, edgeRotation, interpolatedValue)\r\n            end\r\n            \r\n            aimRotation = Quaternion.LookRotation(constructForward, constructUp)\r\n            aimRotation = GetRotationAfterManeuver(inputPitch, iRotations.pitch.up, iRotations.pitch.down)\r\n            aimRotation = GetRotationAfterManeuver(inputRoll, iRotations.roll.right, iRotations.roll.left)\r\n        end\r\n        \r\n        do\r\n            local aimPosition = aimRotation * Vector3.down\r\n            local weaponSlotNumber = 0\r\n            I:AimWeaponInDirection(m_heliBladeTurretIndex, aimPosition.x, aimPosition.y, aimPosition.z, weaponSlotNumber)\r\n        end\r\n    end\r\n\r\n    --Specifies the rotation speed of the heliblade.\r\n    function SetHeliBladeSpeed(I, inputHover)\r\n        for i = 0, I:GetDedibladeCount() do\r\n            I:SetDedibladeContinuousSpeed(i, inputHover * 30.0)\r\n        end\r\n    end\r\n\r\n\r\n    ------------------------------------------------------------------------------------\r\n    --FPS is the number of frames called in per second, but Update is a function that is called in as well.\r\n    function Update(I)\r\n        if not m_initializable then\r\n            Initialize(I)\r\n        end\r\n        ----------------\r\n        Time.Update(I) --Calculates how many seconds the current frame is.\r\n        ----------------\r\n        I:TellAiThatWeAreTakingControl() --Turn off the original AI control. This is mandatory.\r\n        \r\n        if IsAIControl(I) then\r\n            local targetInfo = I:GetTargetInfo(m_mainframeIndex, m_targetEnemyIndex) --A storage box containing information on the target enemy.\r\n            local altitude = 0.0 --This is the target altitude.\r\n            \r\n            local forwardAndStrafe = { forward = 0.0, strafe = 0.0 } --It is the amount of maneuvering to move back and forth and left and right.\r\n            if targetInfo.Valid then --There are enemies.\r\n                local difference = Vector3.Distance(I:GetConstructCenterOfMass(), targetInfo.Position) --The distance from yourself to the enemy.\r\n                if difference > m_rangeToStartTurning.min and difference < m_rangeToStartTurning.max then --The enemy is at a distance that rotates counterclockwise around the enemy.\r\n                    forwardAndStrafe = GetHelicopterMoveInputs(I, RotateAroundTarget(I, targetInfo.Position)) --Returns the amount of maneuvering to turn counterclockwise.\r\n                else --The enemy is not at a distance to turn counterclockwise around the enemy.\r\n                    forwardAndStrafe = GetHelicopterMoveInputs(I, HeadToTargetDistance(I, targetInfo.Position)) --Returns the amount of maneuvering towards the enemy.\r\n                end\r\n                ----------------\r\n                altitude = targetInfo.Position.y\r\n                ----------------\r\n                LookAtTargetWithYaw(I, targetInfo.Position) --Turn the front toward the enemy.\r\n            else --There are no enemies.\r\n                InertialControlOfYaw(I) --Inertial control of Yaw's angular velocity makes it stationary.\r\n            end\r\n\r\n            local inputs = GetHeliBladeInputs(I, forwardAndStrafe.forward, forwardAndStrafe.strafe, altitude) --Converts normal maneuver to maneuver for helicopter control and returns.\r\n            SetHeliBladeTilt(I, inputs.pitch, inputs.roll) --Controls the angle of the helicopter turret.\r\n            SetHeliBladeSpeed(I, inputs.hover) --Controls the rotation speed of the heliblade.\r\n        else\r\n            SetHeliBladeSpeed(I, 0.0) --Stop the rotation of the heliblade.\r\n\r\n            PID.selfs.forward.total = 0.0\r\n            PID.selfs.strafe.total = 0.0\r\n            PID.selfs.hover.total = 0.0\r\n            PID.selfs.pitch.total = 0.0\r\n            PID.selfs.roll.total = 0.0\r\n            PID.selfs.yaw.total = 0.0\r\n        end\r\n    end\r\n"],"BlockStringDataIds":[7],"GameVersion":"3.2.9.7","PersistentSubObjectIndex":46,"PersistentBlockIndex":31,"AuthorDetails":{"Valid":true,"ForeignBlocks":0,"CreatorId":"281e8398-791c-43e7-a707-f4057df41256","ObjectId":"00b00ccf-1a30-4681-af70-cee96fc2321a","CreatorReadableName":"shinano","HashV1":"6a610ab1e8cdff63a61ebd0224a93998"},"BlockCount":6}}